uiservicetab/vimpstdetailsviewplugin/inc/cvimpstdetailscontacthandler.h
branchRCL_3
changeset 29 9a48e301e94b
parent 0 5e5d6b214f4f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpstdetailsviewplugin/inc/cvimpstdetailscontacthandler.h	Wed Sep 01 12:33:36 2010 +0100
@@ -0,0 +1,414 @@
+/*
+* 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:  contact handler class implementaion to virtual phonebook observers
+ *
+*/
+
+
+#ifndef CVIMPSTCONTACTHANDLER_H
+#define CVIMPSTCONTACTHANDLER_H
+
+#include <e32base.h>
+#include <badesca.h>
+#include <s32file.h>
+#include <d32dbms.h> 
+
+#include <MVPbkSingleContactOperationObserver.h>
+#include <MVPbkContactFindObserver.h>
+#include <MVPbkContactStoreListObserver.h>
+#include <CVPbkContactIdConverter.h>
+
+// forward declaration
+class CVPbkContactManager;
+class MVPbkContactLinkArray;
+class MVPbkContactLink;
+class MVPbkStoreContact;
+class MVPbkContactOperationBase;
+class MVPbkContactStoreList;
+class MVIMPSTDetailsViewContactObserver;
+class MCCAParameter;
+
+enum TStoreType
+    {
+    EStoreUnkwon = -1,
+    EStoreLocal,
+    EStoreServer
+    };
+/**
+ *  contact handler class implementaion to virtual phoneboo observers
+ *  @lib vimpstdetailsviewplugin.dll
+ *  @since S60 v5.0
+ */
+class CVIMPSTDetailsContactHandler :  public CActive,
+							   public MVPbkSingleContactOperationObserver,
+							   public MVPbkContactFindObserver,
+							   public MVPbkContactStoreListObserver
+	{
+
+	public:
+
+	    /**
+	     * Two-phased constructor.
+	     * @param aParameter , reference to plugin parameter
+	     * @param aObserver , reference to contact view class
+	     * @param aServiceStoreUri , service store name
+	     * @return instance of same class 
+	     * @since S60 v5.0
+	     * 
+	     */
+	    static CVIMPSTDetailsContactHandler* NewL( MCCAParameter& aParameter,
+	    									MVIMPSTDetailsViewContactObserver& aObserver,
+	    									const TDesC& aServiceStoreUri,
+	    									const TDesC& aServiceName,
+	    									TUint aserviceId);
+
+	    /**
+	     * Destructor.
+	     * @since S60 v5.0
+	     */
+	    ~CVIMPSTDetailsContactHandler();
+	    
+	    /**
+	     * set the specified link ,it take the ownership of links.
+	     * @param aLinks , links to set
+	     * @param aReadXspId , need to read xsp id from contacts.cdb or not
+	     * @since S60 v5.0
+	     */
+	    void SetLinks( MVPbkContactLinkArray* aLinks,TBool aReadXspId );
+	    
+	    /**
+	     * @return XSPuserId.
+	     * @since S60 v5.0
+	     */
+	    const TDesC& GetXSPUserId();
+	    
+	    /**
+	     * @return List of all open store.
+	     * @since S60 v5.0
+	     */
+	    MVPbkContactStoreList& ContactStoresL();
+
+	    /**
+        * @return store type
+        * @since S60 v5.0
+        */
+	    TStoreType StoreType();
+	    
+	    /**
+	     * @return current iCurrentLink.
+	     * @since S60 v5.0
+	     */
+	    MVPbkContactLinkArray* Links() const;
+	    
+	     /**
+	     * cancel the ongoing request.
+	     * @since S60 v5.0
+	     */
+	    void CancelOngoingRequest();
+
+	public: // From CActive
+		/**
+	     * from CActive.
+	     * @since S60 v5.0
+	     */
+	    void RunL();
+
+		/**
+	     * from CActive.
+	     * @since S60 v5.0
+	     */
+	    TInt RunError(TInt aError);
+
+		/**
+	     * from CActive.
+	     * @since S60 v5.0
+	     */
+	    void DoCancel();
+
+	public: // From MVPbkSingleContactOperationObserver
+
+		/**
+	     * from MVPbkSingleContactOperationObserver.
+	     * Called when the operation is completed.
+         *
+         * A client has the operation as a member and it can delete the operation
+         * instance in this function call. If the implementation of the store
+         * calls the function from the operation instance it must not handle
+         * any member data after calling it.
+         *
+         * @param aOperation The completed operation.
+         * @param aContact The contact returned by the operation.
+         *                 A client must take the ownership immediately.
+         *
+         *                  NOTE:
+         *                  If you use CleanupStack for MVPbkStoreContact
+         *                  Use MVPbkStoreContact::PushL or
+         *                  CleanupDeletePushL from e32base.h.
+         *                  (Do Not Use CleanupStack::PushL(TAny*) because
+         *                  then the virtual destructor of the M-class
+         *                  won't be called when the object is deleted).
+         * @since S60 v5.0
+	     */
+	    void VPbkSingleContactOperationComplete(
+						        MVPbkContactOperationBase& aOperation,
+						        MVPbkStoreContact* aContact);
+
+		/**
+	     * from MVPbkSingleContactOperationObserver.
+	     * Called if the operation fails.
+         *
+         * A client has the operation as a member and it can delete the operation
+         * instance in this function call. If the implementation of the store
+         * calls the function from the operation instance it must not handle
+         * any member data after calling it.
+         *
+         * @param aOperation The failed operation.
+         * @param aError An error code of the failure.
+         * @since S60 v5.0
+	     */
+	    void VPbkSingleContactOperationFailed(
+						        MVPbkContactOperationBase& aOperation,
+						        TInt aError);
+	
+	public: // From MVPbkContactFindObserver
+		/**
+         * Called when find is complete. Caller takes ownership of the results
+         * In case of an error during find, the aResults may contain only 
+         * partial results of the find
+         *
+         * @param aResults Array of contact links that matched the find
+         *                 Callee must take ownership of this object in
+         *                 the start of the function, ie. in case the 
+         *                 function leaves the results must be destroyed. 
+         *                 The find operation can be destroyed at the end 
+         *                  of this callback.
+         */
+        void FindCompleteL( MVPbkContactLinkArray* aResults ) ;
+
+        /**
+         * Called in case the find fails for some reason. The find operation
+         * can be destroyed at the end of this callback.
+         * 
+         * @param aError One of the system wide error codes.
+         *        KErrNotReady if store is not ready (not open or unavailable)
+         */
+        void FindFailed( TInt aError ) ;
+		
+		/* 
+		* get the display name of the contact to show in the status pane
+		*/
+        
+        HBufC* GetDisplayNameLC();
+  
+  private: // From MVPbkContactStoreListObserver
+
+		/**
+		 * from MVPbkContactStoreListObserver
+	     * Called when the opening process is complete. 
+         *
+         * Before this all stores have sent StoreReady or StoreUnavailable 
+         * event. The client can not trust that all stores are available
+         * for use when this is called.
+         * @since S60 v5.0
+	     */
+	    void OpenComplete();
+
+		/**
+		 * from MVPbkContactStoreListObserver
+	     * Called when a contact store is ready to use.
+         *
+         * @param aContactStore The store that is ready.
+	     * @since S60 v5.0
+	     */
+	    void StoreReady(MVPbkContactStore& aContactStore );
+
+		/**
+		 * from MVPbkContactStoreListObserver
+	     * Called when a contact store becomes unavailable.
+         *
+         * Client may inspect the reason of the unavailability and decide
+         * whether or not it will keep the store opened (ie. listen to 
+         * the store events).
+         *
+         * @param aContactStore The store that became unavailable.
+         * @param aReason The reason why the store is unavailable.
+         *                This is one of the system wide error codes.
+	     * @since S60 v5.0
+	     */
+	    void StoreUnavailable(MVPbkContactStore& aContactStore, TInt aReason );
+
+		/**
+		 * from MVPbkContactStoreListObserver
+	     * Called when changes occur in the contact store.
+         *
+         * @see TVPbkContactStoreEvent
+         * @param aContactStore A store whose event it is.
+         * @param aStoreEvent The event that has occurred.
+	     * @since S60 v5.0
+	     */
+	    void HandleStoreEventL(MVPbkContactStore& aContactStore, TVPbkContactStoreEvent aStoreEvent );
+
+     
+	private:
+
+		/**
+	     * default constructor
+	     * @param aObserver , contact observer
+	     * @since S60 v5.0
+	     */
+	    CVIMPSTDetailsContactHandler( MVIMPSTDetailsViewContactObserver& aObserver, TUint aserviceId );
+
+		/**
+	     * provides two phase constrcution.
+	     * @param aPluginParameter , plugin parameter
+	     * @param aServiceStoreUri , service store name
+	     * @since S60 v5.0
+	     */
+	    void ConstructL( MCCAParameter& aParameter, const TDesC& aServiceStoreUri, const TDesC& aServiceName );
+	    
+	   	/**
+	     * helper method for issue pending request.
+	     * @param aError , error if any 
+	     * @since S60 v5.0
+	     */
+	    void IssueRequest(TInt aError = KErrNone);
+	    
+	    /* API to be used for local store only
+	     * to check whether the phonebook contact is a buddy the service installed
+	     * @ param aCurrentLink of the phonebook contact
+	     * return ETrue if the link is a buddy of that service
+	     * @since S60 v5.0
+	     */
+	    TBool CheckWhetherValidLocalLinkL(
+	            const MVPbkContactLink& aCurrentLink );
+	    
+	    /* API to be used for local store service only
+	     * to check whether the local %service_name%.db (which has contact identifiers) 
+	     * exsists already
+	     */
+	    TBool DbExists();
+	    /* API to be used for local store only
+	     * open's the local %service_name%.db file
+	     */
+	    void OpenDbL();
+	    
+	     /* API to be used for local store only
+	     * close's the local %service_name%.db file
+	     */
+	    void CloseDb();
+	    
+	    /* API to be used for local store only
+	     * search the identifier aIdentifier passed in the ColNo aColNo of the db file
+	     * return ETrue if the identifier is found in the db col
+	     * @since S60 v5.0
+	     */
+	    TBool SeekRowL( TDbColNo aColNo, TInt32& aIdentifier );
+	    
+	    /* API to be used for local store only
+	     * open db table
+	     * @since S60 v5.0
+	     */	     
+	    void OpenTableL();
+
+	   
+	private:    // data
+	    
+		/**
+		* Not own : Reference to details view plugin
+		*/
+		MVIMPSTDetailsViewContactObserver& iObserver;
+
+		/**
+		* own :Reference to contact manager.
+		*/
+		CVPbkContactManager* iContactManager;
+
+		/**
+		* owns : reference to link array
+		*/ 
+		MVPbkContactLinkArray* iLinks;
+
+		/**
+		* not owns : reference to contact link which is owned by iLinks
+		*/
+		const MVPbkContactLink* iCurrentLink;
+
+		/**
+		* owns : reference to operation base contact
+		*/
+		MVPbkContactOperationBase* iRetrieveOperation;
+
+		/**
+		* owns : extracted user id from pbk xsp id 
+		*/
+		HBufC* iXSPUserId;
+
+		/**
+		* owns : if ETrue , xsp id need to read
+		*/
+		TBool iReadXspId;
+
+		/**
+		* owns : list of open store
+		*/
+		MVPbkContactStoreList* iStoreList;
+
+		/**
+		*  owns : reference to active chedular
+		*/
+		CActiveSchedulerWait iWait;
+
+		/**
+		* owns : service store uri
+		*/
+		HBufC* iServiceStoreUri;
+		
+				
+		/**
+		 * Owned : Pointer to MVPbkStoreContact
+		 */
+		MVPbkStoreContact* iStoreContact; 
+	 
+		// owns : store type
+		TStoreType iStoreType;
+		
+		//  owns, service name 
+		HBufC* iServiceName;
+		
+
+        //Ownns - DB Store
+        CPermanentFileStore*    iFileStore;
+
+        //File Stream 
+        RFs     iFs;
+        
+        //DataBase Object for Creating/Opening/Closing DB
+        RDbStoreDatabase        iDb;
+        
+        // current column set
+        CDbColSet*          iColset;        // owned
+
+        
+        RDbTable            iTable;         // current table
+        
+        // own , contact id converter to and from link
+        CVPbkContactIdConverter* iIdConverter;
+        
+        TUint iServiceId;
+      
+	  	};
+
+#endif // CVIMPSTCONTACTHANDLER_H
+
+// End of File