ImagePrint/ImagePrintEngine/ImagePrintServer/src/server/cprotocolsloader.cpp
branchRCL_3
changeset 21 d59c248c9d36
parent 0 d11fb78c4374
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ImagePrint/ImagePrintEngine/ImagePrintServer/src/server/cprotocolsloader.cpp	Wed Sep 01 12:30:38 2010 +0100
@@ -0,0 +1,190 @@
+/*
+* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Contains the CProtocolsLoader class definition.
+*
+*/
+
+
+#include <ecom/ecom.h>
+
+#include "cprotocolsloader.h"
+#include "mprotprintingdevice.h"
+#include "clog.h"
+#include "imageprint.h"
+
+namespace
+	{
+	const TUid KImagePrintEcomUid = { 0x10208A1E };
+	}
+
+CProtocolsLoader* CProtocolsLoader::NewL()
+	{		
+	LOG("[CProtocolsLoader::NewL]\t Begin");
+	CProtocolsLoader* self = new (ELeave) CProtocolsLoader();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	LOG("[CProtocolsLoader::NewL]\t End");
+	return self;	
+	}
+
+
+CProtocolsLoader::~CProtocolsLoader()
+	{
+	LOG("[CProtocolsLoader::~CProtocolsLoader]\t Begin");
+	iProtocols.ResetAndDestroy(); 
+	LOG("[CProtocolsLoader::~CProtocolsLoader]\t End");
+	}
+
+
+TInt CProtocolsLoader::GetNumberOfProtocolsAvailable() const
+	{
+	LOG("[CProtocolsLoader::GetNumberOfProtocolsAvailable]\t Begin");	
+	LOG1("[CProtocolsLoader::GetNumberOfProtocolsAvailable]\t return: %d", iAvailableProtocols);
+	LOG("[CProtocolsLoader::GetNumberOfProtocolsAvailable]\t End");
+	return iAvailableProtocols;
+	}
+
+
+MProtPrintingDevice* CProtocolsLoader::GetNextProtocol()
+	{
+	LOG("[CProtocolsLoader::GetNextProtocol]\t Begin");
+	if (iAvailableProtocols <= 0)
+		return NULL;
+
+	if (iProtIndex == iAvailableProtocols)
+		iProtIndex = 0;
+
+	MProtPrintingDevice* temp = iProtocols[iProtIndex];
+	iProtIndex++;
+	LOG("[CProtocolsLoader::GetNextProtocol]\t End");
+	return temp;
+	}
+
+
+MProtPrintingDevice* CProtocolsLoader::GetProtocolAt(TInt aIndex)
+	{
+	LOG("[CProtocolsLoader::GetProtocolAt]\t Begin");
+	if( iAvailableProtocols <= 0 ) return NULL;
+
+	MProtPrintingDevice* temp = NULL;
+
+	if (aIndex < 0)
+		temp = (MProtPrintingDevice*) iProtocols[0];
+	else
+		if (aIndex >= iAvailableProtocols)
+			temp = (MProtPrintingDevice*) iProtocols[iAvailableProtocols - 1];
+		else
+			temp = (MProtPrintingDevice*) iProtocols[aIndex];
+
+	LOG("[CProtocolsLoader::GetProtocolAt]\t End");
+	return temp;
+	
+	}
+
+
+void CProtocolsLoader::Reset()
+	{
+	LOG("[CProtocolsLoader::Reset]\t Begin");
+	iProtIndex = 0;
+	LOG("[CProtocolsLoader::Reset]\t End");
+	}
+
+
+TInt CProtocolsLoader::GetProtocolIndex() const
+	{
+	LOG("[CProtocolsLoader::GetProtocolIndex]\t Begin");
+
+	TInt retVal = iProtIndex - 1;
+	// The next check is probably unnecessary since GetNextProtocol() should only leave iProtIndex with
+	// a value between 1 and iAvailableProtocols
+	if (retVal < 0)
+	{
+		retVal = iProtocols.Count() - 1;
+	}
+	LOG1("[CProtocolsLoader::GetProtocolIndex] return: %d", retVal);
+	LOG("[CProtocolsLoader::GetProtocolIndex]\t End");
+	return retVal;
+	}
+
+
+TUint CProtocolsLoader::SupportedProtocols() const
+	{
+	LOG("[CProtocolsLoader::SupportedProtocols]\t Begin");
+	LOG1("[CProtocolsLoader::SupportedProtocols] return: %d", iSupportedProtocols);
+	LOG("[CProtocolsLoader::SupportedProtocols]\t End");
+	return iSupportedProtocols;
+	}
+
+
+CProtocolsLoader::CProtocolsLoader()
+	{
+	LOG("[CProtocolsLoader::CProtocolsLoader]\t Begin");
+	iAvailableProtocols = 0;
+	iProtIndex = 0;
+	iSupportedProtocols = 0;
+	LOG("[CProtocolsLoader::CProtocolsLoader]\t End");
+	}
+
+void CProtocolsLoader::ConstructL()
+	{
+	LOG("[CProtocolsLoader::ConstructL]\t Begin");
+	LoadL();
+	LOG("[CProtocolsLoader::ConstructL]\t End");
+	}
+
+void CProtocolsLoader::LoadL()
+	{
+	LOG("[CProtocolsLoader::LoadL]\t Begin");	
+	RImplInfoPtrArray infoArray;		
+	REComSession::ListImplementationsL( KImagePrintEcomUid, infoArray );	
+	CleanupClosePushL( infoArray );		
+	MProtPrintingDevice* device = NULL;	
+	LOG1("CProtocolsLoader::LoadL infoArray.Count(): %d", infoArray.Count());		
+	for( TInt i = 0; i < infoArray.Count(); i++ )
+		{		
+		LOG1("CProtocolsLoader::LoadL i: %d", i);
+		TPtrC8 dataType = infoArray[i]->DataType();
+		TEComResolverParams resolverParams;
+		resolverParams.SetDataType( dataType );
+		resolverParams.SetWildcardMatch( ETrue );		
+		TAny* prot = REComSession::CreateImplementationL( KImagePrintEcomUid,
+				_FOFF( MProtPrintingDevice, iDtor_ID_Key ), NULL, resolverParams );
+		device = static_cast<MProtPrintingDevice*>(prot);						
+		TCleanupItem clItem( CleanupProt, device );
+        CleanupStack::PushL( clItem );				
+		device->ConstructL( KNullDesC );
+		LOG1("CProtocolsLoader::LoadL device->SupportedProtocols(): %d", device->SupportedProtocols());			
+		iProtocols.AppendL( device );
+		iSupportedProtocols |= device->SupportedProtocols();														
+		CleanupStack::Pop(); // device
+		device = NULL;		
+		}
+
+	infoArray.ResetAndDestroy();
+	CleanupStack::PopAndDestroy(); // infoArray		
+	
+	iAvailableProtocols = iProtocols.Count();
+	LOG("[CProtocolsLoader::LoadL]\t End");
+	}
+				
+void CProtocolsLoader::CleanupProt( TAny* aData )
+    {
+    LOG("[CProtocolsLoader::CleanupProt]\t Begin");
+    MProtPrintingDevice* prot = (MProtPrintingDevice*)aData;
+    delete prot;
+    LOG("[CProtocolsLoader::CleanupProt]\t End");
+    }	
+
+//  End of File