--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/CommandsExtension/inc/CPbk2MergeResolver.h Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,164 @@
+/*
+ * 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 <e32base.h>
+#include <MVPbkStoreContactField.h>
+#include <TVPbkFieldVersitProperty.h>
+#include <MVPbkFieldType.h>
+#include <Pbk2FieldProperty.hrh>
+#include <MPbk2MergeResolver.h>
+#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 );
+ HBufC* SyncDisplayFieldLC(
+ const MVPbkStoreContactField& aField );
+ HBufC* LocaliseSyncDisplayFieldLC( const TDesC& aContent );
+ void AddAddressConflictL( TPbk2FieldGroupId aGroupId );
+ TInt FindConflictByFieldL( const MVPbkStoreContactField& aField );
+ void PrintFieldL(const MVPbkStoreContactField & aField);
+ void MergeAddressesL();
+ void CompleteMergeArrL(
+ RArray<TInt>& aDuplicatesInFirst,
+ RArray<TInt>& aDuplicatesInSecond );
+ TBool IsTopContactField(
+ const MVPbkStoreContactField& aField );
+ TInt CompareTopConactFields(
+ const MVPbkStoreContactField& aFieldFirst,
+ const MVPbkStoreContactField& aFieldSecond );
+
+private: // Data
+ // Own: Array merged contact fields
+ RPointerArray<MVPbkStoreContactField> iMerged;
+
+ // Own: Array conflicted contact fields
+ RPointerArray<MPbk2MergeConflict> iConflicts;
+
+ // Own: First contact
+ CPbk2PresentationContact* iFirstContact;
+
+ // Own: Second contact
+ CPbk2PresentationContact* iSecondContact;
+ };
+
+#endif /* CPBK2MERGERESOLVER_H_ */