diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/cntplsql/src/clplproxyfactory.cpp --- /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 +#include + +#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(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*/) + { + }