phonebookengines/contactsmodel/cntplsql/src/clplproxyfactory.cpp
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/cntplsql/src/clplproxyfactory.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,479 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+  
+#include "clplproxyfactory.h"
+#include "rcntmodel.h"
+#include <ecom/ecom.h>
+#include <cntsync.h>
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "cntsyncecom.h"
+#endif
+
+#include "cntviewprivate.h"
+
+
+// The name of the test phone book sync plugin.  This plugin will be used in the
+// first instance (i.e. if it exists then use it rather than any other plugin).
+_LIT(KTestPluginName,"Test phone book synchronizer Implementation");
+
+
+/**
+CContactSynchroniser object factory method.
+
+This class is copied from the Persistence Layer.  It should be refactored into
+a shared library if possible.
+
+@return CContactSynchroniser object.
+*/
+CContactSynchroniser* CContactSynchroniser::NewL()
+	{
+	RImplInfoPtrArray implInfoArray;
+	CleanupResetAndDestroyPushL(implInfoArray);
+	REComSession::ListImplementationsL(KUidEcomCntPhBkSyncInterface, implInfoArray);
+	
+	const TInt count = implInfoArray.Count(); 
+	__ASSERT_ALWAYS(count > 0, User::Leave(KErrNotSupported));
+
+	TInt pluginToBeUsed = 0;
+	CImplementationInformation *info;
+
+	// Scan the list of plugins for the test plugin.
+	for (TInt plugIn = 0 ; plugIn < count ; ++plugIn)
+	{
+		info = implInfoArray[plugIn];
+		if(info->DisplayName() == KTestPluginName)
+		{
+			// We have found the test plugin so use it rather than any other
+			// plugin.
+			pluginToBeUsed = plugIn;
+			break;
+		}
+	}
+
+	// Create the implementation found for KUidEcomCntPhBkSyncInterface.
+	const TUid theImplementationID = implInfoArray[pluginToBeUsed]->ImplementationUid();
+	
+	TAny* ptr(NULL);
+	ptr = REComSession::CreateImplementationL(theImplementationID, _FOFF(CContactSynchroniser,iDtor_ID_Key));
+
+#ifdef __VERBOSE_DEBUG__
+	RDebug::Print(_L("[CNTMODEL] CContactSynchroniser::NewL(): Create sync plugin: %S\n"), &info->DisplayName());
+#endif
+
+	CleanupStack::PopAndDestroy(&implInfoArray);
+
+	return reinterpret_cast<CContactSynchroniser*>(ptr);
+	}
+
+
+/**
+CProxyFactory object factory method.
+
+@param aDb Contacts database used by the proxies this factory provides.
+
+@return CProxyFactory object.
+*/
+CProxyFactory* CProxyFactory::NewL(const CContactDatabase& aDb)
+	{
+	CProxyFactory*	self = new (ELeave) CProxyFactory(aDb);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+	
+/**
+CProxyFactory second phase constructor.
+*/
+void CProxyFactory::ConstructL()
+	{
+	}
+
+
+/**
+CProxyFactory first phase constructor.
+
+@param aDb Contacts database used to access Contacts Model session handle.
+*/
+CProxyFactory::CProxyFactory(const CContactDatabase& aDb)
+	:
+	iDb(aDb)
+	{
+	}
+
+
+/**
+CProxyFactory destructor.
+*/
+CProxyFactory::~CProxyFactory()
+	{
+	if (iSynchroniser)
+		{
+		iSynchroniser->Release();  //calls delete this
+		iSynchroniser = NULL;
+		}	
+	delete iManager;
+	delete iCollection;
+	}
+
+
+/**
+Get the MLplViewItemManager proxy interface.  If the
+CViewIteratorProxyManager object does not yet exist then 
+create it.
+
+@return MLplViewIteratorManager proxy interface instance.
+*/
+MLplViewIteratorManager& CProxyFactory::GetViewIteratorManagerL()
+	{
+	if(iManager == NULL)
+		{
+		iManager = CViewIteratorProxyManager::NewL(iDb);
+		}
+	return *iManager;
+	}
+
+
+/**
+Get the MContactSynchroniser interface.  If the CContactSynchroniser object does
+not yet exist then create it (lazy initialisation).
+
+@return MContactSynchroniser interface instance.
+*/
+MContactSynchroniser& CProxyFactory::GetContactSynchroniserL(TUint)
+	{
+	if(iSynchroniser == NULL)
+		{
+		iSynchroniser = CContactSynchroniser::NewL();
+		}
+	return *iSynchroniser;
+	}
+
+
+/**
+Get the MLplCollection proxy interface.  If the CCollectionProxy proxy object
+does not yet exist then create it (lazy initialisation).
+
+@return MLplCollection proxy interface instance.
+*/
+MLplCollection& CProxyFactory::GetCollectorL()
+	{
+	if(iCollection == NULL)
+		{
+		iCollection = new (ELeave) CCollectionProxy(iDb);
+		}
+	return *iCollection;
+	}
+
+
+/**
+CViewIteratorProxyManager object factory method.
+
+@param aDb Contacts database used to access Contacts Model session handle.
+
+@return CViewIteratorProxyManager object.
+*/
+CViewIteratorProxyManager* CViewIteratorProxyManager::NewL(const CContactDatabase& aDb)
+	{
+	CViewIteratorProxyManager* self = new (ELeave) CViewIteratorProxyManager(aDb);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+/**
+CViewIteratorProxyManager second phase constructor.
+*/
+void CViewIteratorProxyManager::ConstructL()
+	{
+	}
+
+
+/**
+CViewIteratorProxyManager first phase constructor.
+
+@param aDb Contacts database used to access Contacts Model session handle.
+*/
+CViewIteratorProxyManager::CViewIteratorProxyManager(const CContactDatabase& aDb)
+	:
+	iDb(aDb)
+	{
+	}
+
+
+/**
+CViewIteratorProxyManager destructor.
+*/
+CViewIteratorProxyManager::~CViewIteratorProxyManager()
+	{
+	}
+
+
+/**
+Proxy implementation of pure virtual methods in MLplViewItemManager.
+
+The proxy does not access the Persistence Layer directly.  Instead it uses the
+Contacts Model session handle to access the Persistence Layer via the server.
+*/
+CViewContact* CViewIteratorProxyManager::ItemAtL(TContactItemId aContactId, TInt aViewId)
+	{
+	return iDb.iCntSvr->ItemAtL(aContactId, aViewId);
+	}
+
+	
+/**
+Proxy implementation of pure virtual methods in MLplViewItemManager.
+
+The proxy does not access the Persistence Layer directly.  Instead it uses the
+Contacts Model session handle to access the Persistence Layer via the server.
+*/
+TInt CViewIteratorProxyManager::OpenViewL(const CContactTextDef& aTextDef, TContactViewPreferences aViewPrefs)
+	{
+	return iDb.iCntSvr->OpenViewL(aTextDef, aViewPrefs);
+	}
+	
+
+/**
+Proxy implementation of pure virtual methods in MLplViewItemManager.
+
+The proxy does not access the Persistence Layer directly.  Instead it uses the
+Contacts Model session handle to access the Persistence Layer via the server.
+*/
+void CViewIteratorProxyManager::CloseView(TInt aViewId)
+	{
+	iDb.iCntSvr->CloseView(aViewId);
+	}
+
+	
+/**
+Proxy implementation of pure virtual methods in MLplViewItemManager.
+
+The proxy does not access the Persistence Layer directly.  Instead it uses the
+Contacts Model session handle to access the Persistence Layer via the server.
+*/
+void CViewIteratorProxyManager::ChangeSortOrderL(TInt aViewId, const CContactTextDef& aTextDef)
+	{
+	iDb.iCntSvr->ChangeSortOrderL(aViewId, aTextDef);
+	}
+
+	
+/**
+Proxy implementation of pure virtual methods in MLplViewItemManager.
+
+The proxy does not access the Persistence Layer directly.  Instead it uses the
+Contacts Model session handle to access the Persistence Layer via the server.
+*/
+void CViewIteratorProxyManager::BeginIterateL(TInt aViewId)
+	{
+	iDb.iCntSvr->BeginIterateL(aViewId);
+	}
+	
+	
+/**
+Proxy implementation of pure virtual methods in MLplViewItemManager.
+
+The proxy does not access the Persistence Layer directly.  Instead it uses the
+Contacts Model session handle to access the Persistence Layer via the server.
+*/
+void CViewIteratorProxyManager::EndIterateL(TInt aViewId)
+	{
+	iDb.iCntSvr->EndIterateL(aViewId);
+	}
+
+	
+/**
+Proxy implementation of pure virtual methods in MLplViewItemManager.
+
+The proxy does not access the Persistence Layer directly.  Instead it uses the
+Contacts Model session handle to access the Persistence Layer via the server.
+*/
+CViewContact* CViewIteratorProxyManager::NextItemL(TInt aViewId, TContactViewPreferences aViewPrefs)
+	{
+	return iDb.iCntSvr->NextItemL(aViewId, aViewPrefs);
+	}
+
+
+/**
+Proxy implementation of pure virtual methods in MLplViewItemManager.
+
+The proxy does not access the Persistence Layer directly.  Instead it uses the
+Contacts Model session handle to access the Persistence Layer via the server.
+*/
+TUid CViewIteratorProxyManager::ReadContactTextDefL(TContactItemId aContactId, TDes &aResult,const CContactTextDef& aTextDef)
+    {
+    iDb.iCntSvr->ReadContactTextDefL(aContactId, aResult, aTextDef);
+    return TUid(KNullUid); //type uid is not used at client side.   
+    }
+
+
+/**
+Proxy implementation of pure virtual methods in MLplViewItemManager.
+
+The proxy does not access the Persistence Layer directly.  Instead it uses the
+Contacts Model session handle to access the Persistence Layer via the server.
+*/
+void CViewIteratorProxyManager::TextFieldL(TInt aCntItemId,TFieldType aFieldType, TDes& aText)
+    {
+    iDb.iCntSvr->TextFieldL(aCntItemId, aFieldType, aText);
+    }
+
+
+/**
+CCollectionProxy first phase constructor.
+
+@param aDb Contacts database used to access Contacts Model session handle.
+*/
+CCollectionProxy::CCollectionProxy(const CContactDatabase& aDb)
+	:
+	iDb(aDb)
+	{
+	}
+
+
+/**
+Proxy implementation of pure virtual method in MLplCollection.
+
+The proxy does not access the Persistence Layer directly.  Instead it uses the
+Contacts Model session handle to access the Persistence Layer via the server.
+*/
+CContactIdArray* CCollectionProxy::CollectionL(TLplViewType aViewType,TTime aTime,const TDesC& aGuid)
+	{
+	return iDb.iCntSvr->CollectionL(aViewType,aTime,aGuid);
+	}
+
+/**
+Proxy implementation of pure virtual method in MLplCollection.
+
+The proxy does not access the Persistence Layer directly.  Instead it uses the
+Contacts Model session handle to access the Persistence Layer via the server.
+*/
+TBool CCollectionProxy::SeekContactL(TContactItemId aReqId,TContactItemId& aId,TUid& aContactType, TBool& aDeleted)
+	{
+	return iDb.iCntSvr->SeekContactL(aReqId, aId, aContactType, aDeleted);		
+	}
+	
+/**
+Proxy implementation of pure virtual method in MLplCollection.
+
+The proxy does not access the Persistence Layer directly.  Instead it uses the
+Contacts Model session handle to access the Persistence Layer via the server.
+*/
+TInt CCollectionProxy::ContactCountL()
+	{
+	return iDb.iCntSvr->ContactCountL();
+	}
+
+
+/**
+Dummy method - implemented in the Persistence Layer.
+*/
+TBool CCollectionProxy::ContactMatchesHintFieldL (TInt /*aBitWiseFilter*/, TContactItemId /*aContactId*/)
+	{
+	return EFalse;		
+	}
+
+
+/**
+Dummy method - implemented in the Persistence Layer.
+*/
+CContactIdArray* CCollectionProxy::MatchPhoneNumberL(const TDesC& /*aNumber*/, const TInt /*aMatchLengthFromRight*/)
+	{
+	return NULL;	
+	}
+
+
+/**
+Proxy implementation of pure virtual method in MLplCollection.
+
+The proxy does not access the Persistence Layer directly.  Instead it uses the
+Contacts Model session handle to access the Persistence Layer via the server.
+
+This method could be a dummy implementation since only CContactDatabase calls
+the client session FindL() method.
+*/
+CContactIdArray* CCollectionProxy::FindL(const TDesC& aText, const CContactItemFieldDef* aFieldDef, TUint /*aSessionId*/)
+	{
+	return iDb.iCntSvr->FindL(aText,aFieldDef);
+	}
+
+	
+/**
+Dummy method - implemented in the Persistence Layer.
+*/
+CContactIdArray* CCollectionProxy::FilterDatabaseL(CCntFilter& /*aFilter*/)
+	{
+	return NULL;
+	}
+
+
+/**
+Dummy method - implemented in the Persistence Layer.
+*/
+void CCollectionProxy::Reset()
+	{
+	}
+
+
+/**
+Dummy method - implemented in the Persistence Layer.
+*/
+void CCollectionProxy::FindAsyncInitL(const TDesC& /*aText*/,CContactItemFieldDef* /*aFieldDef*/)
+	{
+	}
+
+
+/**
+Dummy method - implemented in the Persistence Layer.
+*/
+void CCollectionProxy::FindAsyncTextDefInitL(const CDesCArray& /*aWords*/,CContactTextDef* /*aTextDef*/)
+	{
+	}
+
+
+/**
+Dummy method - implemented in the Persistence Layer.
+*/
+CContactIdArray* CCollectionProxy::FindAsyncL(TBool& /*aMoreToGo*/, TUint /*aSessionId*/)
+	{
+	return NULL;
+	}
+
+
+/**
+Dummy method - implemented in the Persistence Layer.
+*/
+TBool CCollectionProxy::UsesIdentityFieldsOnly(TInt /*aFindFlags*/)
+	{
+	return EFalse;		
+	}
+
+
+/**
+Dummy method - implemented in the Persistence Layer.
+*/
+void CCollectionProxy::ConstructBitwiseFlagsFromTextDef(TInt& /*aFindFlags*/, TInt& /*aIdentityColumnsCount*/, const CContactTextDef* /*aTextDef*/)	
+	{
+	}