--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpstdetailsviewplugin/inc/cvimpstdetailscontacthandler.h Tue Feb 02 10:12:18 2010 +0200
@@ -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