phonebookui/Phonebook2/remotecontactlookup/contactactionservice/src/TFscStoreContactAnalyzer.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/remotecontactlookup/contactactionservice/src/TFscStoreContactAnalyzer.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,218 @@
+/*
+* Copyright (c) 2008 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:  Implementation of store contact analyzer.
+*
+*/
+
+
+#include "emailtrace.h"
+#include "TFscStoreContactAnalyzer.h"
+
+// Virtual Phonebook
+#include <CVPbkContactManager.h>
+#include <CVPbkFieldTypeSelector.h>
+#include <MVPbkStoreContactFieldCollection.h>
+#include <MVPbkStoreContact.h>
+#include <MVPbkContactStore.h>
+#include <MVPbkFieldType.h>
+#include <MVPbkContactStoreProperties.h>
+#include <VPbkUtils.h>
+
+// System includes
+#include <barsread.h>
+#include <coemain.h>
+
+// --------------------------------------------------------------------------
+// TFscStoreContactAnalyzer::TFscStoreContactAnalyzer
+// --------------------------------------------------------------------------
+//
+ TFscStoreContactAnalyzer::TFscStoreContactAnalyzer
+        ( const CVPbkContactManager& aContactManager,
+        const MVPbkStoreContact* aContact ) :
+            iContactManager( aContactManager ),
+            iContact( aContact )
+    {
+    FUNC_LOG;
+    }
+
+// --------------------------------------------------------------------------
+// TFscStoreContactAnalyzer::HasFieldL
+// --------------------------------------------------------------------------
+//
+ TInt TFscStoreContactAnalyzer::HasFieldL
+        ( TInt aResId, TInt aStartIndex/* = 0*/,
+        const MVPbkStoreContact* aContact/* = NULL*/ ) const
+    {
+    FUNC_LOG;
+    TInt ret = KErrNotFound;
+    const MVPbkStoreContact* tempContact = iContact;
+
+    if ( aContact )
+        {
+        tempContact = aContact;
+        }
+
+    // Check that there is contact to analyze
+    if ( tempContact )
+        {
+        // Read the contact field selector from resource
+        MVPbkContactFieldSelector* fieldTypeSelector =
+            static_cast<MVPbkContactFieldSelector*>
+                ( CreateFieldTypeSelectorLC( aResId ) );
+
+        // Check if the specified field is included to contact
+        const MVPbkStoreContactFieldCollection& fields =
+            tempContact->Fields();
+        ret = IsFieldIncluded( fields, aStartIndex, *fieldTypeSelector );
+        CleanupStack::PopAndDestroy(); // fieldTypeSelector;
+        }
+
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// TFscStoreContactAnalyzer::IsFieldTypeSupportedL
+// --------------------------------------------------------------------------
+//
+ TBool TFscStoreContactAnalyzer::IsFieldTypeSupportedL
+        ( TInt aResId, const MVPbkStoreContact* aContact /*= NULL*/ ) const
+    {
+    FUNC_LOG;
+    TBool ret = EFalse;
+    const MVPbkStoreContact* tempContact = iContact;
+
+    if (aContact)
+        {
+        tempContact = aContact;
+        }
+
+    // Check that there is contact to analyze
+    if ( tempContact )
+        {
+        // Read the field type selector from resource
+        MVPbkFieldTypeSelector* fieldTypeSelector =
+            static_cast<MVPbkFieldTypeSelector*>
+                ( CreateFieldTypeSelectorLC( aResId ) );
+
+        // Check if the specified field type is supported by contact
+        const MVPbkFieldTypeList& fieldTypes =
+            tempContact->ParentStore().StoreProperties().SupportedFields();
+        ret = IsFieldTypeIncluded( fieldTypes, *fieldTypeSelector );
+        CleanupStack::PopAndDestroy(); // fieldTypeSelector;
+        }
+
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// TFscStoreContactAnalyzer::IsFieldTypeIncludedL
+// --------------------------------------------------------------------------
+//
+ TBool TFscStoreContactAnalyzer::IsFieldTypeIncludedL
+        ( const MVPbkFieldType& aFieldType, TInt aResId ) const
+    {
+    FUNC_LOG;
+    CVPbkFieldTypeSelector* selector = CreateFieldTypeSelectorLC( aResId );
+    TBool ret = selector->IsFieldTypeIncluded( aFieldType );
+    CleanupStack::PopAndDestroy( selector );
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// TFscStoreContactAnalyzer::IsFieldTypeIncludedL
+// --------------------------------------------------------------------------
+//
+ TBool TFscStoreContactAnalyzer::IsFieldTypeIncludedL
+        ( const MVPbkBaseContactField& aField, TInt aResId ) const
+    {
+    FUNC_LOG;
+    // Get the field type
+    const MVPbkFieldType* fieldType =
+        VPbkUtils::MatchFieldType( iContactManager.FieldTypes(), aField );
+    CVPbkFieldTypeSelector* selector = CreateFieldTypeSelectorLC( aResId );
+    TBool ret = selector->IsFieldTypeIncluded( *fieldType );
+    CleanupStack::PopAndDestroy( selector );
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// TFscStoreContactAnalyzer::IsFieldIncluded
+// --------------------------------------------------------------------------
+//
+TInt TFscStoreContactAnalyzer::IsFieldIncluded
+        (const MVPbkBaseContactFieldCollection& aFields,
+        TInt aStartIndex,
+        const MVPbkContactFieldSelector& aFieldTypeSelector) const
+    {
+    FUNC_LOG;
+    TInt ret( KErrNotFound );
+    TInt fieldCount( aFields.FieldCount() );
+
+    for ( TInt i = aStartIndex; i < fieldCount && ret == KErrNotFound; ++i )
+        {
+        const MVPbkBaseContactField& field = aFields.FieldAt( i );
+        if ( aFieldTypeSelector.IsFieldIncluded( field ) )
+            {
+            ret = i;
+            }
+        }
+
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// TFscStoreContactAnalyzer::IsFieldTypeIncluded
+// --------------------------------------------------------------------------
+//
+TBool TFscStoreContactAnalyzer::IsFieldTypeIncluded
+        ( const MVPbkFieldTypeList& aFieldTypes,
+        const MVPbkFieldTypeSelector& aFieldTypeSelector ) const
+    {
+    FUNC_LOG;
+    TBool ret( EFalse );
+    TInt fieldTypeCount( aFieldTypes.FieldTypeCount() );
+
+    for ( TInt i = 0; i < fieldTypeCount && !ret; ++i )
+        {
+        const MVPbkFieldType& fieldType = aFieldTypes.FieldTypeAt( i );
+        if ( aFieldTypeSelector.IsFieldTypeIncluded( fieldType ) )
+            {
+            ret = ETrue;
+            }
+        }
+
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// TFscStoreContactAnalyzer::CreateFieldTypeSelectorLC
+// --------------------------------------------------------------------------
+//
+CVPbkFieldTypeSelector* TFscStoreContactAnalyzer::CreateFieldTypeSelectorLC
+        ( TInt aResId ) const
+    {
+    FUNC_LOG;
+    TResourceReader resReader;
+    CCoeEnv::Static()->CreateResourceReaderLC( resReader, aResId );
+
+    CVPbkFieldTypeSelector* fieldTypeSelector = CVPbkFieldTypeSelector::NewL
+        ( resReader, iContactManager.FieldTypes() );
+
+    CleanupStack::PopAndDestroy(); // resReader
+    CleanupStack::PushL( fieldTypeSelector );
+    return fieldTypeSelector;
+    }
+
+// End of File
+