--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/inc/CPbk2DuplicateContactFinder.h Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,191 @@
+/*
+* 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: Utility class for finding duplicate contacts
+* from the stores.
+*
+*/
+
+
+#ifndef CPBK2DUPLICATECONTACTFINDER_H
+#define CPBK2DUPLICATECONTACTFINDER_H
+
+#include <e32base.h>
+#include <MVPbkContactFindObserver.h>
+#include <MVPbkSingleContactOperationObserver.h>
+
+class CVPbkContactManager;
+class MVPbkContactStore;
+class MVPbkBaseContact;
+class MVPbkContactLinkArray;
+class MVPbkContactOperationBase;
+class MVPbkFieldTypeList;
+class MPbk2ContactNameFormatter;
+class MPbk2DuplicateContactObserver;
+class MVPbkBaseContactField;
+
+/**
+ * Utility class for finding duplicate contacts from the stores.
+ * Finds duplicates from stores by using the name formatter.
+ */
+class CPbk2DuplicateContactFinder : public CActive,
+ private MVPbkContactFindObserver,
+ private MVPbkSingleContactOperationObserver
+ {
+ public: // Construction and destruction
+
+ /**
+ * Constructs a duplicate finder that finds duplicate contacts
+ * from all the stores.
+ *
+ * @param aContactManager Virtual Phonebook contact manager
+ * that owns the field types and can
+ * be used for finding the stores.
+ * @param aNameFormatter Name formatter for recognizing
+ * duplicate contacts.
+ * @param aFieldTypesForFind These are the field types that are
+ * usedfor the find. Most probably the
+ * same field types as are in the sort
+ * order. These define also the order
+ * for getting the find text.
+ * E.g if last name is the first in
+ * the list and first name is the second
+ * one then the last name is taken from
+ * the given contact and that text is
+ * used for the find. If there was no
+ * last name in the contact then the
+ * first name text is taken.
+ * @param aDuplicateContacts The result array for
+ * duplicate contacts.
+ * @return A new instance of this class.
+ */
+ IMPORT_C static CPbk2DuplicateContactFinder* NewL(
+ CVPbkContactManager& aContactManager,
+ MPbk2ContactNameFormatter& aNameFormatter,
+ const MVPbkFieldTypeList& aFieldTypesForFind,
+ RPointerArray<MVPbkStoreContact>& aDuplicateContacts );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPbk2DuplicateContactFinder();
+
+ public: // Interface
+
+ /**
+ * Starts asynchronous duplicate find from the given store.
+ *
+ * @param aContact The source contact whose duplicates
+ * are searched for.
+ * @param aStore A store for creating find operation.
+ * @param aObserver An observer to notify after the
+ * checking has been done.
+ * @param aMaxDuplicatesToFind Finder stops if the it finds more
+ * than max amount of duplicates.
+ */
+ IMPORT_C void StartL(
+ const MVPbkBaseContact& aContact,
+ MVPbkContactStore& aStore,
+ MPbk2DuplicateContactObserver& aObserver,
+ TInt aMaxDuplicatesToFind );
+ /**
+ * Starts asynchronous duplicate find from all the stores.
+ *
+ * @param aContact The source contact whose duplicates
+ * are searched for.
+ * @param aObserver An observer to notify after the
+ * checking has been done.
+ * @param aMaxDuplicatesToFind Finder stops if the it finds more
+ * than max amount of duplicates.
+ */
+ IMPORT_C void StartL(
+ const MVPbkBaseContact& aContact,
+ MPbk2DuplicateContactObserver& aObserver,
+ TInt aMaxDuplicatesToFind );
+
+ private: // From CActive
+ void RunL();
+ void DoCancel();
+ TInt RunError(
+ TInt aError );
+
+ private: // From MVPbkContactFindObserver
+ void FindCompleteL(
+ MVPbkContactLinkArray* aResults );
+ void FindFailed(
+ TInt aError );
+
+ private: // From MVPbkSingleContactOperationObserver
+ void VPbkSingleContactOperationComplete(
+ MVPbkContactOperationBase& aOperation,
+ MVPbkStoreContact* aContact );
+ void VPbkSingleContactOperationFailed(
+ MVPbkContactOperationBase& aOperation,
+ TInt aError );
+
+ private: // Implementation
+ CPbk2DuplicateContactFinder(
+ CVPbkContactManager& aContactManager,
+ MPbk2ContactNameFormatter& aNameFormatter,
+ const MVPbkFieldTypeList& aFieldTypesForFind,
+ RPointerArray<MVPbkStoreContact>& aDuplicateContacts );
+ void ConstructL();
+ void IssueRequest();
+ TPtrC FindText();
+ MVPbkContactOperationBase* FindOperationL(
+ const TDesC& aFindText );
+ void StartFindL();
+ void RetrieveContactL();
+ void CompleteL();
+ TBool LastContactRetrieved();
+ void DestroyOperation();
+ void CheckDuplicateL(
+ MVPbkStoreContact* aContact );
+ TBool IsFieldMatched( const MVPbkBaseContact* aContact, TInt aFieldId );
+ const MVPbkBaseContactField* FindFieldById( const MVPbkBaseContact* aContact,
+ TInt aFieldId );
+
+ private: // Data
+ /// Ref: Virtual Phonebook contact manager
+ CVPbkContactManager& iContactManager;
+ /// ReF: Name formatter
+ MPbk2ContactNameFormatter& iNameFormatter;
+ /// Ref: These are the field types that are used for find
+ const MVPbkFieldTypeList& iFieldTypesForFind;
+ /// Own: A pointer to find text
+ TPtrC iFindText;
+ /// Ref: A store for single store check
+ MVPbkContactStore* iStore;
+ /// Ref: Observer
+ MPbk2DuplicateContactObserver* iObserver;
+ /// Ref:: A contact whose duplicates are searched for
+ const MVPbkBaseContact* iContactToCompare;
+ /// Own: a title of iContactToCompare
+ HBufC* iContactTitle;
+ /// Own: Find operation
+ MVPbkContactOperationBase* iContactOperation;
+ /// Own: Results of the find
+ MVPbkContactLinkArray* iFindResults;
+ /// Ref: Duplicate contacts
+ RPointerArray<MVPbkStoreContact>& iDuplicates;
+ /// An index in iFindResults for retrieving.
+ TInt iContactIndex;
+ /// Internal state of the finder
+ TInt iState;
+ /// The maximum amount of duplicates to find
+ TInt iMaxDuplicatesToFind;
+ };
+
+#endif // CPBK2DUPLICATECONTACTFINDER_H
+
+// End of File