diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/CommandsExtension/inc/CPbk2MergeResolver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/CommandsExtension/inc/CPbk2MergeResolver.h Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2009 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: Phonebook 2 merge contacts resolver. + * + */ + +#ifndef CPBK2MERGERESOLVER_H_ +#define CPBK2MERGERESOLVER_H_ + +// INCLUDES +#include +#include +#include +#include +#include +#include +#include "CPbk2MergeConflict.h" + +// FORWARD DECLARATIONS +class CPbk2PresentationContact; + + +// CLASS DECLARATION +/** + * Phonebook 2 merge contacts resolver. + */ +class CPbk2MergeResolver : public CBase, + public MPbk2MergeResolver + { +public: // Construction and destruction + + /** + * Creates a new instance of this class. + * + * @param aFirstContact First contact to merge. + * @param aSecondContact Second contact to merge. + * + * @return A new instance of this class. + */ + static CPbk2MergeResolver* NewL( + CPbk2PresentationContact* aFirstContact, + CPbk2PresentationContact* aSecondContact ); + + /** + * Destructor. + */ + ~CPbk2MergeResolver(); + +public: // Implementation + /** + * Starts merging. + */ + void MergeL(); + + /** + * Counts conflicts. + * + * @return Number of conflicts. + */ + TInt CountConflicts(); + + /** + * Gets conflict. + * + * @param aConflict Index of conflict in array. + * @return Base class of conflict. + */ + MPbk2MergeConflict& GetConflictAt( TInt aConflict ); + + /** + * Counts merged. + * + * @return Number of merged. + */ + TInt CountMerged(); + + /** + * Gets merged. + * + * @param aMerged Index of merged in array. + * @return Base class of conflict. + */ + MVPbkStoreContactField& GetMergedAt( TInt aMerged ); + +private: // Construction + CPbk2MergeResolver( + CPbk2PresentationContact* aFirstContact, + CPbk2PresentationContact* aSecondContact ); + +private: // Declaration + enum ECompareAddress + { + ECAUndefined, + ECASame, + ECAFirstIncludesSecond, + ECASecondIncludesFirst, + ECADifferent + }; + +private: // Implementation + TBool EqualsValues( + const MVPbkStoreContactField& aFieldFirst, + const MVPbkStoreContactField& aFieldSecond ); + ECompareAddress CompareAddresses( TPbk2FieldGroupId aGroupId ); + CPbk2MergeResolver::ECompareAddress DoCompareAddresses( + TInt aCountEquals, + TInt aCountAddressFieldsFirst, + TInt aCountAddressFieldsSecond ); + TBool AreFieldsTypeSame( + const MVPbkStoreContactField& aFieldFirst, + const MVPbkStoreContactField& aFieldSecond ); + TBool AreAddressesSubTypeSame( + const MVPbkStoreContactField& aFieldFirst, + const MVPbkStoreContactField& aFieldSecond ); + TBool AddressField( const MVPbkStoreContactField& aField ); + void CopyAddressToMergedL( + const CPbk2PresentationContact& aContact, + TPbk2FieldGroupId aAddressGroup ); + TPbk2FieldMultiplicity FieldMultiplicity( const MVPbkStoreContactField& aField ); + void AddConflictL( + const MVPbkStoreContactField& aFieldFirst, + const MVPbkStoreContactField& aFieldSecond ); + void AddAddressConflictL( TPbk2FieldGroupId aGroupId ); + TInt FindConflictByFieldL( const MVPbkStoreContactField& aField ); + void PrintFieldL(const MVPbkStoreContactField & aField); + void MergeAddressesL(); + void CompleteMergeArrL( + RArray& aDuplicatesInFirst, + RArray& aDuplicatesInSecond ); + TBool IsTopContactField( + const MVPbkStoreContactField& aField ); + TInt CompareTopConactFields( + const MVPbkStoreContactField& aFieldFirst, + const MVPbkStoreContactField& aFieldSecond ); + +private: // Data + // Own: Array merged contact fields + RPointerArray iMerged; + + // Own: Array conflicted contact fields + RPointerArray iConflicts; + + // Own: First contact + CPbk2PresentationContact* iFirstContact; + + // Own: Second contact + CPbk2PresentationContact* iSecondContact; + }; + +#endif /* CPBK2MERGERESOLVER_H_ */