diff -r 000000000000 -r 8466d47a6819 emailcontacts/contactactionservice/src/TFscStoreContactAnalyzer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailcontacts/contactactionservice/src/TFscStoreContactAnalyzer.cpp Thu Dec 17 08:39:21 2009 +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 +#include +#include +#include +#include +#include +#include +#include + +// System includes +#include +#include + +// -------------------------------------------------------------------------- +// 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 + ( 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 + ( 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 +