phonebookengines/VirtualPhonebook/VPbkLdapStore/src/ContactStoreDomain.cpp
branchRCL_3
changeset 20 f4a778e096c2
parent 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkLdapStore/src/ContactStoreDomain.cpp	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,454 @@
+/*
+* Copyright (c) 2005-2006 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:  CContactStoreDomain implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "contactstoredomain.h"
+#include "contactstorelist.h"
+#include "contactstore.h"
+#include "ldapuid.h"
+#include "ldapfinderui.h"
+
+#include <barsc.h>              // For resource
+#include <barsread.h>           // For resource reader
+#include <mvpbkfieldtype.h>     // Field type list
+#include "fieldtypemappings.h"  // Field type mapping
+#include <ldapstoreres.rsg>     // Field type mapping resource
+
+// CONSTANTS
+_LIT(KLDAPDriveZ,"z:");
+_LIT(KLDAPResourceFilesDir,"\\resource\\");
+_LIT(KLDAPStoreResFile,"LDAPStoreRes.rsc");
+
+// -----------------------------------------------------------------------------
+// LDAP Store namespace
+// -----------------------------------------------------------------------------
+namespace LDAPStore {
+
+// -----------------------------------------------------------------------------
+// CleanupResetAndDestroy
+// Cleanup finder ui plugin implementations
+// -----------------------------------------------------------------------------
+//
+void CleanupResetAndDestroy(TAny* aObj)
+    {
+    if (aObj)
+        {
+        static_cast<RImplInfoPtrArray*>(aObj)->ResetAndDestroy();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::CContactStoreDomain
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CContactStoreDomain::CContactStoreDomain
+(
+    const MVPbkFieldTypeList& aMasterFieldTypeList
+)
+:   iMasterFieldTypeList     (aMasterFieldTypeList)
+    {
+    // No implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::ConstructL
+// CContactStoreDomain constructor for performing 2nd stage construction
+// -----------------------------------------------------------------------------
+//
+void CContactStoreDomain::ConstructL
+(
+    const CVPbkContactStoreUriArray& aURIList,
+    const TDesC& aURIDomain
+)
+    {
+    // Domain descriptor
+    iDomainDescriptor = aURIDomain.AllocL();
+
+    // Field types
+    iFieldTypeMappings = CFieldTypeMappings::NewL(iMasterFieldTypeList);
+
+    // Initialize field mappings
+    InitializeFieldMappingL();
+
+    // Finder ui for all stores
+    LoadFinderUIL();
+
+    // Create the store list that creates the stores
+    iContactStoreList = CContactStoreList::NewL(aURIList,*this);
+    }
+
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::InitializeFieldMappingL
+// Initialize contact model mappings to versit properties
+// -----------------------------------------------------------------------------
+//
+void CContactStoreDomain::InitializeFieldMappingL()
+    {
+    // For resource reading
+    RFs fs;
+    User::LeaveIfError(fs.Connect());
+    CleanupClosePushL(fs);
+   
+    // Resource file name
+    TFileName res_name(KLDAPDriveZ);
+    res_name.Append(KLDAPResourceFilesDir);
+    res_name.Append(KLDAPStoreResFile);
+
+    // Load Versit field type mappings
+    RResourceFile res_file;
+
+    // Open resource
+    res_file.OpenL(fs,res_name);
+    CleanupClosePushL(res_file);
+
+    // Resource reader
+    TResourceReader reader;
+    // Versit types
+    reader.SetBuffer(res_file.AllocReadLC(R_VERSIT_FIELD_TYPE_MAPPINGS));
+    // Read versit types
+    iFieldTypeMappings->InitVersitMappingsL(reader);
+    CleanupStack::PopAndDestroy();  //R_VERSIT_FIELD_TYPE_MAPPINGS
+
+    // Non versit types
+    reader.SetBuffer(res_file.AllocReadLC(R_NONVERSIT_FIELD_TYPE_MAPPINGS));
+    // Read non versit types
+    iFieldTypeMappings->InitNonVersitMappingsL(reader);
+    CleanupStack::PopAndDestroy();  //R_NONVERSIT_FIELD_TYPE_MAPPINGS
+
+    // Close resource
+    res_file.Close();
+
+    // Resource file
+    CleanupStack::PopAndDestroy();
+    // File server
+    CleanupStack::PopAndDestroy();
+    }
+
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::LoadFinderUIL
+// Initialize finder ui
+// -----------------------------------------------------------------------------
+//
+void CContactStoreDomain::LoadFinderUIL()
+    {
+    // Find implementations
+    RImplInfoPtrArray implementations;
+    REComSession::ListImplementationsL(
+            TUid::Uid(KLDAPFinderInterfaceUID),implementations);
+
+    // Push implmentations
+    CleanupStack::PushL(TCleanupItem(CleanupResetAndDestroy,&implementations));
+
+    // Shoud be only one
+    const TInt count = implementations.Count();
+    if (count > 0)
+        {
+        // Implementation
+        CImplementationInformation* infop = implementations[count - 1];
+        CleanupStack::PushL(infop);
+        implementations.Remove(count - 1);
+
+        // Load finder
+        iFinder = CLDAPFinderUI::NewL(infop->ImplementationUid());
+
+        // Pop info
+        CleanupStack::PopAndDestroy(infop);
+        }
+
+     // Implementations
+    CleanupStack::PopAndDestroy();
+    }
+
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::NewLC
+// CContactStoreDomain two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CContactStoreDomain* CContactStoreDomain::NewLC
+(
+    const CVPbkContactStoreUriArray& aURIList, 
+    const TDesC& aURIDomain,
+    const MVPbkFieldTypeList& aMasterFieldTypeList
+)
+    {
+    CContactStoreDomain* self = new (ELeave)CContactStoreDomain(aMasterFieldTypeList);
+    CleanupStack::PushL(self);
+    self->ConstructL(aURIList,aURIDomain);
+    return self;
+    }
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::NewL
+// CContactStoreDomain two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CContactStoreDomain* CContactStoreDomain::NewL(TAny* aParam)
+    {
+    TStoreDomainParam* param = static_cast<TStoreDomainParam*>(aParam);
+    CContactStoreDomain* self = CContactStoreDomain::NewLC(
+        param->iURIList,*param->iURIDomain,*param->iFieldTypeList);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::~CContactStoreDomain
+// CContactStoreDomain Destructor
+// -----------------------------------------------------------------------------
+//
+CContactStoreDomain::~CContactStoreDomain()
+    {
+    // Store domain
+    if (iDomainDescriptor)
+        {
+        delete iDomainDescriptor;
+        iDomainDescriptor = NULL;
+        }
+    // Field type mappings
+    if (iFieldTypeMappings)
+        {
+        delete iFieldTypeMappings;
+        iFieldTypeMappings = NULL;
+        }
+    // Store list
+    if (iContactStoreList)
+        {
+        delete iContactStoreList;
+        iContactStoreList = NULL;
+        }
+    // Finder UI
+    if (iFinder)
+        {
+        delete iFinder;
+        iFinder = NULL;
+        }
+    }
+// -----------------------------------------------------------------------------
+//                  CContactStoreDomain public methods
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::FieldTypeMappings
+// Returns the field type mappings between ldap and phonebook.
+// -----------------------------------------------------------------------------
+//
+CFieldTypeMappings& CContactStoreDomain::FieldTypeMappings()
+    {
+    return *iFieldTypeMappings;
+    }
+
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::MasterFieldTypeList
+// Returns the master field type list.
+// -----------------------------------------------------------------------------
+//
+const MVPbkFieldTypeList& CContactStoreDomain::MasterFieldTypeList() const
+    {
+    return iMasterFieldTypeList;
+    }
+
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::FinderUI
+// Returns the finder ui.
+// -----------------------------------------------------------------------------
+//
+CLDAPFinderUI& CContactStoreDomain::FinderUI()
+    {
+    return *iFinder;
+    }
+
+// -----------------------------------------------------------------------------
+//                  CVPbkContactStoreDomain implmentation
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::UriDomain
+// Returns the URI domain.
+// -----------------------------------------------------------------------------
+//
+const TDesC& CContactStoreDomain::UriDomain() const
+    {
+    return *iDomainDescriptor;
+    }
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::LoadContactStoreL
+// Loads a new contact store implementation to this domain.
+// -----------------------------------------------------------------------------
+//
+void CContactStoreDomain::LoadContactStoreL(const TVPbkContactStoreUriPtr& aUri)
+    {
+    // Already in list
+    if (! iContactStoreList->Find(aUri))
+        {
+        // New store
+        CContactStore* store = CContactStore::NewLC(aUri,*this);
+        // Add to list
+        iContactStoreList->AppendL(store);
+        CleanupStack::Pop(store);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//                      MVPbkContactStoreList implmentation
+// -----------------------------------------------------------------------------
+// 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);
+    }
+
+// -----------------------------------------------------------------------------
+//                  MVPbkContactOperationFactory implementation
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::CreateContactRetrieverL
+// -----------------------------------------------------------------------------
+//
+MVPbkContactOperation* CContactStoreDomain::CreateContactRetrieverL
+( 
+    const MVPbkContactLink& aLink, 
+    MVPbkSingleContactOperationObserver& aObserver
+)
+    {
+    return iContactStoreList->CreateContactRetrieverL(aLink,aObserver);
+    }
+
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::CreateDeleteContactsOperationL
+// -----------------------------------------------------------------------------
+//
+MVPbkContactOperation* CContactStoreDomain::CreateDeleteContactsOperationL
+(
+    const MVPbkContactLinkArray& aContactLinks,
+    MVPbkBatchOperationObserver& aObserver
+)
+    {
+    return iContactStoreList->CreateDeleteContactsOperationL(aContactLinks,aObserver);
+    }
+
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::CreateDeleteContactsOperationL
+// -----------------------------------------------------------------------------
+//
+MVPbkContactOperation* CContactStoreDomain::CreateCommitContactsOperationL
+(
+    const TArray<MVPbkStoreContact*>& aContacts,
+    MVPbkBatchOperationObserver& aObserver
+)
+    {
+    return iContactStoreList->CreateCommitContactsOperationL(aContacts,aObserver);
+    }
+
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::CreateMatchPhoneNumberOperationL
+// -----------------------------------------------------------------------------
+//
+MVPbkContactOperation* CContactStoreDomain::CreateMatchPhoneNumberOperationL
+(
+    const TDesC& aPhoneNumber,
+    TInt aMaxMatchDigits,
+    MVPbkContactFindObserver& aObserver
+)
+    {
+    return iContactStoreList->CreateMatchPhoneNumberOperationL(aPhoneNumber,
+                                                    aMaxMatchDigits,aObserver);
+    }
+
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::CreateFindOperationL
+// -----------------------------------------------------------------------------
+//  
+MVPbkContactOperation* CContactStoreDomain::CreateFindOperationL
+(
+    const TDesC& aSearchString,
+    const MVPbkFieldTypeList& aFieldTypes,
+    MVPbkContactFindObserver& aObserver
+)
+    {
+    return iContactStoreList->CreateFindOperationL(aSearchString,aFieldTypes,
+                                                                    aObserver);
+    }
+    
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::CreateFindOperationL
+// -----------------------------------------------------------------------------
+//  
+MVPbkContactOperation* CContactStoreDomain::CreateFindOperationL(
+                                const MDesC16Array& aSearchStrings, 
+                                const MVPbkFieldTypeList& aFieldTypes, 
+                                MVPbkContactFindFromStoresObserver& aObserver, 
+                                const TCallBack& aWordParserCallBack )
+    {
+    // TODO 
+    //return iContactStoreList->CreateFindOperationL(aSearchString,aFieldTypes, aObserver);
+    return NULL;
+    }
+    
+
+// -----------------------------------------------------------------------------
+// CContactStoreDomain::CreateCompressStoresOperationL
+// -----------------------------------------------------------------------------
+//  
+MVPbkContactOperation* CContactStoreDomain::CreateCompressStoresOperationL
+(
+    MVPbkBatchOperationObserver& /* aObserver */
+)
+    {
+    // LDAP Store is remote
+    return NULL;
+    }
+
+} // End of namespace LDAPStore
+// -----------------------------------------------------------------------------
+//  End of File
+// -----------------------------------------------------------------------------
+