phonebookui/Phonebook2/CommandsExtension/inc/CPbk2MergeResolver.h
branchRCL_3
changeset 20 f4a778e096c2
--- /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_ */