phonebookengines/VirtualPhonebook/VPbkSimStore/src/CContactStoreDomain.cpp
changeset 0 e686773b3f54
child 18 d4f567ce2e7c
--- /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 <CVPbkContactStoreList.h>
+#include <cvpbkcontactoperationfactory.h>
+#include <CVPbkContactStoreUriArray.h>
+#include <MVPbkContactStore.h>
+#include <RLocalizedResourceFile.h>
+#include <TVPbkContactStoreUriPtr.h>
+#include <VPbkDataCaging.hrh>
+#include <VPbkSimStoreRes.rsg>
+#include <VPbkStoreUriLiterals.h>
+#include <VPbkUtil.h>
+
+#include <barsc.h>
+#include <barsread.h>
+
+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<TStoreDomainParam*>( 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<MVPbkStoreContact*>& 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<MVPbkContactOperationFactory2*>
+    	(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<MVPbkContactOperationFactory2*>( this );
+		}
+	return NULL;
+	}
+	
+} // namespace VPbkSimStore
+
+//  End of File