diff -r 000000000000 -r e686773b3f54 phonebookengines/VirtualPhonebook/VPbkSimStore/src/CContactStoreDomain.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/VirtualPhonebook/VPbkSimStore/src/CContactStoreDomain.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,341 @@ +/* +* Copyright (c) 2002-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: Implements the sim store domain +* +*/ + + + +// INCLUDE FILES +#include "CContactStoreDomain.h" + +#include "CFieldTypeMappings.h" +#include "CContactStore.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace VPbkSimStore { + +// CONSTANTS +_LIT(KResFile, "VPbkSimStoreRes.rsc"); + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::CContactStoreDomain +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CContactStoreDomain::CContactStoreDomain( + const MVPbkFieldTypeList& aMasterFieldTypeList, + const TSecurityInfo& aSecurityInfo ) + : iMasterFieldTypeList( aMasterFieldTypeList ), + iSecurityInfo( aSecurityInfo ) + { + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CContactStoreDomain::ConstructL( + const CVPbkContactStoreUriArray& aURIList, const TDesC& aURIDomain ) + { + iDomainDescriptor = aURIDomain.AllocL(); + + // Load Versit field type mappings + User::LeaveIfError( iFs.Connect() ); + + // Create text store for versit property extension names + iTextStore = new(ELeave) VPbkEngUtils::CTextStore; + // Create the field type mapper + iFieldTypeMappings = CFieldTypeMappings::NewL( iMasterFieldTypeList, * + iTextStore ); + + VPbkEngUtils::RLocalizedResourceFile resFile; + resFile.OpenLC( iFs, KVPbkRomFileDrive, KDC_RESOURCE_FILES_DIR, KResFile ); + + TResourceReader resReader; + resReader.SetBuffer( resFile.AllocReadLC( + R_VPBK_VERSIT_FIELD_TYPE_MAPPINGS ) ); + // Read versit types + iFieldTypeMappings->InitVersitMappingsL( resReader ); + resReader.SetBuffer( resFile.AllocReadLC( + R_VPBK_NONVERSIT_FIELD_TYPE_MAPPINGS ) ); + // Read non versit types + iFieldTypeMappings->InitNonVersitMappingsL( resReader ); + //R_VPBK_NONVERSIT_FIELD_TYPE_MAPPINGS, resFile, iFs + CleanupStack::PopAndDestroy( 3 ); + + // Create the store list + iContactStoreList = CVPbkContactStoreList::NewL(); + // Load all SIM stores + TVPbkContactStoreUriPtr defaultDb( KVPbkSimGlobalAdnURI ); + const TPtrC domain = defaultDb.Component( + TVPbkContactStoreUriPtr::EContactStoreUriStoreType ); + const TInt uriCount = aURIList.Count(); + for ( TInt i = 0; i < uriCount; ++i ) + { + if ( aURIList[i].Compare( domain, + TVPbkContactStoreUriPtr::EContactStoreUriStoreType ) == 0 ) + { + LoadContactStoreL( aURIList[i] ); + } + } + // Create multioperation factory + iOperationFactory = CVPbkContactOperationFactory::NewL( + *iContactStoreList ); + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CContactStoreDomain* CContactStoreDomain::NewL + ( const CVPbkContactStoreUriArray& aURIList, + const TDesC& aURIDomain, + const MVPbkFieldTypeList& aMasterFieldTypeList, + const TSecurityInfo& aSecurityInfo ) + { + CContactStoreDomain* self = + new( ELeave ) CContactStoreDomain( aMasterFieldTypeList, aSecurityInfo ); + CleanupStack::PushL( self ); + self->ConstructL( aURIList, aURIDomain ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CContactStoreDomain* CContactStoreDomain::NewL( TAny* aParam ) + { + TStoreDomainParam* param = static_cast( aParam ); + return NewL( param->iURIList, *param->iURIDomain, + *param->iFieldTypeList, param->iSecurityInfo ); + } + +// Destructor +CContactStoreDomain::~CContactStoreDomain() + { + delete iDomainDescriptor; + delete iFieldTypeMappings; + delete iOperationFactory; + delete iContactStoreList; + delete iTextStore; + iFs.Close(); + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::UriDomain +// ----------------------------------------------------------------------------- +// +const TDesC& CContactStoreDomain::UriDomain() const + { + return *iDomainDescriptor; + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::Count +// ----------------------------------------------------------------------------- +// +void CContactStoreDomain::LoadContactStoreL( + const TVPbkContactStoreUriPtr& aUri ) + { + if ( !iContactStoreList->Find(aUri) ) + { + CContactStore* store = CContactStore::NewL( aUri, *this ); + CleanupStack::PushL( store ); + iContactStoreList->AppendL( store ); + CleanupStack::Pop( store ); + } + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::Count +// ----------------------------------------------------------------------------- +// +TInt CContactStoreDomain::Count() const + { + return iContactStoreList->Count(); + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::At +// ----------------------------------------------------------------------------- +// +MVPbkContactStore& CContactStoreDomain::At( TInt aIndex ) const + { + return iContactStoreList->At( aIndex ); + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::Find +// ----------------------------------------------------------------------------- +// +MVPbkContactStore* CContactStoreDomain::Find( + const TVPbkContactStoreUriPtr& aUri ) const + { + return iContactStoreList->Find( aUri ); + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::OpenAllL +// ----------------------------------------------------------------------------- +// +void CContactStoreDomain::OpenAllL( MVPbkContactStoreListObserver& aObserver ) + { + iContactStoreList->OpenAllL( aObserver ); + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::CloseAll +// ----------------------------------------------------------------------------- +// +void CContactStoreDomain::CloseAll( MVPbkContactStoreListObserver& aObserver ) + { + iContactStoreList->CloseAll( aObserver ); + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::CreateContactRetrieverL +// ----------------------------------------------------------------------------- +// +MVPbkContactOperation* CContactStoreDomain::CreateContactRetrieverL( + const MVPbkContactLink& aLink, + MVPbkSingleContactOperationObserver& aObserver ) + { + return iOperationFactory->CreateContactRetrieverL( aLink, aObserver ); + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::CreateDeleteContactsOperationL +// ----------------------------------------------------------------------------- +// +MVPbkContactOperation* CContactStoreDomain::CreateDeleteContactsOperationL( + const MVPbkContactLinkArray& aContactLinks, + MVPbkBatchOperationObserver& aObserver ) + { + return iOperationFactory->CreateDeleteContactsOperationL( aContactLinks, + aObserver ); + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::CreateCommitContactsOperationL +// ----------------------------------------------------------------------------- +// +MVPbkContactOperation* CContactStoreDomain::CreateCommitContactsOperationL( + const TArray& aContacts, + MVPbkBatchOperationObserver& aObserver ) + { + return iOperationFactory->CreateCommitContactsOperationL( + aContacts, aObserver ); + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::CreateMatchPhoneNumberOperationL +// ----------------------------------------------------------------------------- +// +MVPbkContactOperation* CContactStoreDomain::CreateMatchPhoneNumberOperationL( + const TDesC& aPhoneNumber, + TInt aMaxMatchDigits, + MVPbkContactFindObserver& aObserver ) + { + return iOperationFactory->CreateMatchPhoneNumberOperationL( aPhoneNumber, + aMaxMatchDigits, aObserver ); + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::CreateMatchPhoneNumberOperationL +// ----------------------------------------------------------------------------- +// +MVPbkContactOperation* CContactStoreDomain::CreateFindOperationL( + const TDesC& aSearchString, + const MVPbkFieldTypeList& aFieldTypes, + MVPbkContactFindObserver& aObserver) + { + return iOperationFactory->CreateFindOperationL( aSearchString, aFieldTypes, + aObserver ); + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::CreateFindOperationL +// ----------------------------------------------------------------------------- +// +MVPbkContactOperation* CContactStoreDomain::CreateFindOperationL( + const MDesC16Array& aSearchStrings, + const MVPbkFieldTypeList& aFieldTypes, + MVPbkContactFindFromStoresObserver& aObserver, + const TCallBack& aWordParserCallBack ) + { + return iOperationFactory->CreateFindOperationL( aSearchStrings, aFieldTypes, + aObserver, aWordParserCallBack ); + } + +// ----------------------------------------------------------------------------- +// CContactStoreDomain::CreateFindOperationL +// ----------------------------------------------------------------------------- +// +MVPbkContactOperation* CContactStoreDomain::CreateFindOperationL( + const MDesC16Array& aSearchStrings, + const MVPbkFieldTypeList& aFieldTypes, + MVPbkContactFindFromStoresObserver& aObserver, + const TCallBack& aWordParserCallBack, + const CDesC16ArrayFlat& aStoreEntriesArray ) + { + return (reinterpret_cast + (iOperationFactory->ContactOperationFactoryExtension(KMVPbkContactOperationFactory2Uid)))-> + CreateFindOperationL( aSearchStrings, aFieldTypes, + aObserver, aWordParserCallBack, aStoreEntriesArray ); + } + +// CContactStoreDomain::CreateCompressStoresOperationL +// ----------------------------------------------------------------------------- +// +MVPbkContactOperation* CContactStoreDomain::CreateCompressStoresOperationL( + MVPbkBatchOperationObserver& /*aObserver*/) + { + // Compress not supported in SIM store + return NULL; + } +TAny* CContactStoreDomain::ContactOperationFactoryExtension( TUid aExtensionUid ) + { + if ( aExtensionUid == KMVPbkContactOperationFactory2Uid ) + { + return static_cast( this ); + } + return NULL; + } + +} // namespace VPbkSimStore + +// End of File