diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookengines/VirtualPhonebook/VPbkEng/src/TVPbkStoreContactAnalyzer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/VirtualPhonebook/VPbkEng/src/TVPbkStoreContactAnalyzer.cpp Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,369 @@ +/* +* Copyright (c) 2005-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: VPbk store contact analyzer. +* +*/ + + +#include "TVPbkStoreContactAnalyzer.h" + +// Virtual Phonebook +#include +#include +#include +#include +#include +#include +#include +#include + +// System includes +#include +#include + +// non-class function declarations +template TInt t_HasFieldL( T aSelector, + TInt aStartIndex, + const MVPbkStoreContact* aContact, + const MVPbkStoreContact* aClassContact, + const CVPbkContactManager& aClassContactManager ); + +template TBool t_IsFieldTypeSupportedL( T aSelector, + const MVPbkStoreContact* aContact, + const MVPbkStoreContact* aClassContact, + const CVPbkContactManager& aClassContactManager ); + +template TBool t_IsFieldTypeIncludedL( + const MVPbkFieldType& aFieldType, + T aSelector, + const CVPbkContactManager& aClassContactManager ); + +template TBool t_IsFieldTypeIncludedL( + const MVPbkBaseContactField& aField, + T aSelector, + const CVPbkContactManager& aClassContactManager ); + +CVPbkFieldTypeSelector* CreateSelectorLC( + VPbkFieldTypeSelectorFactory::TVPbkFieldTypeSelector aType, + const CVPbkContactManager& aContactManager ); + +CVPbkFieldTypeSelector* CreateSelectorLC( + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aType, + const CVPbkContactManager& aContactManager ); + +TBool IsFieldTypeIncluded + ( const MVPbkFieldTypeList& aFieldTypes, + const MVPbkFieldTypeSelector& aFieldTypeSelector ); + +TInt IsFieldIncluded + (const MVPbkBaseContactFieldCollection& aFields, + TInt aStartIndex, + const MVPbkContactFieldSelector& aFieldTypeSelector); + + +// -------------------------------------------------------------------------- +// TVPbkStoreContactAnalyzer::TVPbkStoreContactAnalyzer +// -------------------------------------------------------------------------- +// +EXPORT_C TVPbkStoreContactAnalyzer::TVPbkStoreContactAnalyzer + ( const CVPbkContactManager& aContactManager, + const MVPbkStoreContact* aContact ) : + iContactManager( aContactManager ), + iContact( aContact ) + { + } + +// -------------------------------------------------------------------------- +// TVPbkStoreContactAnalyzer::HasFieldL +// -------------------------------------------------------------------------- +// +EXPORT_C TInt TVPbkStoreContactAnalyzer::HasFieldL + ( VPbkFieldTypeSelectorFactory::TVPbkFieldTypeSelector aFieldTypeSelector, + TInt aStartIndex/* = 0*/, + const MVPbkStoreContact* aContact/* = NULL*/ ) const + { + return t_HasFieldL + (aFieldTypeSelector,aStartIndex,aContact, + iContact, iContactManager); + } + +// -------------------------------------------------------------------------- +// TVPbkStoreContactAnalyzer::HasFieldL +// -------------------------------------------------------------------------- +// +EXPORT_C TInt TVPbkStoreContactAnalyzer::HasFieldL + ( VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aActionTypeSelector, + TInt aStartIndex/* = 0*/, + const MVPbkStoreContact* aContact/* = NULL*/ ) const + { + return t_HasFieldL + (aActionTypeSelector,aStartIndex,aContact, + iContact, iContactManager); + } + +// -------------------------------------------------------------------------- +// TVPbkStoreContactAnalyzer::IsFieldTypeSupportedL +// -------------------------------------------------------------------------- +// +EXPORT_C TBool TVPbkStoreContactAnalyzer::IsFieldTypeSupportedL + ( VPbkFieldTypeSelectorFactory::TVPbkFieldTypeSelector aFieldTypeSelector, + const MVPbkStoreContact* aContact /*= NULL*/ ) const + { + return t_IsFieldTypeSupportedL + ( aFieldTypeSelector, aContact, iContact, iContactManager); + } + +// -------------------------------------------------------------------------- +// TVPbkStoreContactAnalyzer::IsFieldTypeSupportedL +// -------------------------------------------------------------------------- +// +EXPORT_C TBool TVPbkStoreContactAnalyzer::IsFieldTypeSupportedL + ( VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aActionTypeSelector, + const MVPbkStoreContact* aContact /*= NULL*/ ) const + { + return t_IsFieldTypeSupportedL + ( aActionTypeSelector, aContact, iContact, iContactManager); + } + +// -------------------------------------------------------------------------- +// TVPbkStoreContactAnalyzer::IsFieldTypeIncludedL +// -------------------------------------------------------------------------- +// +EXPORT_C TBool TVPbkStoreContactAnalyzer::IsFieldTypeIncludedL + ( const MVPbkFieldType& aFieldType, + VPbkFieldTypeSelectorFactory::TVPbkFieldTypeSelector aFieldTypeSelector ) const + { + return t_IsFieldTypeIncludedL + ( aFieldType, aFieldTypeSelector, iContactManager ); + } + +// -------------------------------------------------------------------------- +// TVPbkStoreContactAnalyzer::IsFieldTypeIncludedL +// -------------------------------------------------------------------------- +// +EXPORT_C TBool TVPbkStoreContactAnalyzer::IsFieldTypeIncludedL + ( const MVPbkFieldType& aFieldType, + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aActionTypeSelector ) const + { + return t_IsFieldTypeIncludedL + ( aFieldType, aActionTypeSelector, iContactManager ); + } + +// -------------------------------------------------------------------------- +// TVPbkStoreContactAnalyzer::IsFieldTypeIncludedL +// -------------------------------------------------------------------------- +// +EXPORT_C TBool TVPbkStoreContactAnalyzer::IsFieldTypeIncludedL + ( const MVPbkBaseContactField& aField, + VPbkFieldTypeSelectorFactory::TVPbkFieldTypeSelector aFieldTypeSelector ) const + { + return t_IsFieldTypeIncludedL + ( aField, aFieldTypeSelector, iContactManager ); + } + +// -------------------------------------------------------------------------- +// TVPbkStoreContactAnalyzer::IsFieldTypeIncludedL +// -------------------------------------------------------------------------- +// +EXPORT_C TBool TVPbkStoreContactAnalyzer::IsFieldTypeIncludedL + ( const MVPbkBaseContactField& aField, + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aActionTypeSelector ) const + { + return t_IsFieldTypeIncludedL + ( aField, aActionTypeSelector, iContactManager ); + } + +// -------------------------------------------------------------------------- +// t_HasFieldL +// -------------------------------------------------------------------------- +// +template TInt t_HasFieldL( T aSelector, TInt aStartIndex, + const MVPbkStoreContact* aContact, + const MVPbkStoreContact* aClassContact, + const CVPbkContactManager& aClassContactManager ) + { + TInt ret = KErrNotFound; + const MVPbkStoreContact* tempContact = aClassContact; + + if ( aContact ) + { + tempContact = aContact; + } + + // Check that there is contact to analyze + if ( tempContact ) + { + // Read the contact field selector from resource + MVPbkContactFieldSelector* fieldTypeSelector = + static_cast + ( CreateSelectorLC( aSelector, aClassContactManager ) ); + + // Check if the specified field is included to contact + const MVPbkStoreContactFieldCollection& fields = + tempContact->Fields(); + ret = IsFieldIncluded( fields, aStartIndex, *fieldTypeSelector ); + CleanupStack::PopAndDestroy( ); // fieldTypeSelector; + } + + return ret; + } + +// -------------------------------------------------------------------------- +// t_IsFieldTypeSupportedL +// -------------------------------------------------------------------------- +// +template TBool t_IsFieldTypeSupportedL( T aSelector, + const MVPbkStoreContact* aContact, + const MVPbkStoreContact* aClassContact, + const CVPbkContactManager& aClassContactManager ) + { + TBool ret = EFalse; + const MVPbkStoreContact* tempContact = aClassContact; + + if (aContact) + { + tempContact = aContact; + } + + // Check that there is contact to analyze + if ( tempContact ) + { + // Read the field type selector from resource + MVPbkFieldTypeSelector* fieldTypeSelector = + static_cast + ( CreateSelectorLC( aSelector, aClassContactManager ) ); + + // 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; + } + +// -------------------------------------------------------------------------- +// t_IsFieldTypeIncludedL +// -------------------------------------------------------------------------- +// +template TBool t_IsFieldTypeIncludedL( + const MVPbkFieldType& aFieldType, + T aSelector, + const CVPbkContactManager& aClassContactManager ) + { + CVPbkFieldTypeSelector* selector = CreateSelectorLC( aSelector, aClassContactManager ); + TBool ret = selector->IsFieldTypeIncluded( aFieldType ); + CleanupStack::PopAndDestroy( selector ); + return ret; + } + +template TBool t_IsFieldTypeIncludedL( + const MVPbkBaseContactField& aField, + T aSelector, + const CVPbkContactManager& aClassContactManager ) + { + TBool ret = EFalse; + // Get the field type + const MVPbkFieldType* fieldType = + VPbkUtils::MatchFieldType( aClassContactManager.FieldTypes(), aField ); + + if ( fieldType ) + { + CVPbkFieldTypeSelector* selector = CreateSelectorLC( aSelector, + aClassContactManager ); + ret = selector->IsFieldTypeIncluded( *fieldType ); + CleanupStack::PopAndDestroy(); + } + return ret; + } + +// -------------------------------------------------------------------------- +// CreateSelectorLC +// -------------------------------------------------------------------------- +// +CVPbkFieldTypeSelector* CreateSelectorLC( + VPbkFieldTypeSelectorFactory::TVPbkFieldTypeSelector aType, + const CVPbkContactManager& aContactManager ) + { + CVPbkFieldTypeSelector* fieldTypeSelector = VPbkFieldTypeSelectorFactory::BuildFieldTypeSelectorL( + aType, aContactManager.FieldTypes() ); + + CleanupStack::PushL( fieldTypeSelector ); + return fieldTypeSelector; + } + +// -------------------------------------------------------------------------- +// CreateSelectorLC +// -------------------------------------------------------------------------- +// +CVPbkFieldTypeSelector* CreateSelectorLC( + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aType, + const CVPbkContactManager& aContactManager ) + { + CVPbkFieldTypeSelector* fieldTypeSelector = VPbkFieldTypeSelectorFactory::BuildContactActionTypeSelectorL( + aType, aContactManager.FieldTypes() ); + + CleanupStack::PushL( fieldTypeSelector ); + return fieldTypeSelector; + } + +// -------------------------------------------------------------------------- +// IsFieldTypeIncluded +// -------------------------------------------------------------------------- +// +TBool IsFieldTypeIncluded + ( const MVPbkFieldTypeList& aFieldTypes, + const MVPbkFieldTypeSelector& aFieldTypeSelector ) + { + 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; + } + +// -------------------------------------------------------------------------- +// IsFieldTypeIncluded +// -------------------------------------------------------------------------- +// +TInt IsFieldIncluded + (const MVPbkBaseContactFieldCollection& aFields, + TInt aStartIndex, + const MVPbkContactFieldSelector& aFieldTypeSelector) + { + 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; + } + +// End of File