uiservicetab/vimpststorage/inc/cvimpststoragevpbklocalstore.h
changeset 0 5e5d6b214f4f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpststorage/inc/cvimpststoragevpbklocalstore.h	Tue Feb 02 10:12:18 2010 +0200
@@ -0,0 +1,329 @@
+/*
+* 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:  Class that provides handling of vpbk local store
+*
+*/
+
+
+#ifndef C_CVIMPSTSTORAGELOCALSTORE_H
+#define C_CVIMPSTSTORAGELOCALSTORE_H
+
+#include <e32base.h>
+#include <d32dbms.h>
+#include <s32file.h>
+
+#include "mvimpststoragevpbkcontactstore.h"
+#include "mvimpststoragevpbkstorehandler.h"
+
+//forward declaration
+class CVIMPSTStorageVPbkStoreHandler;
+class MVPbkViewContact;
+class CVPbkContactIdConverter;
+class MVIMPSTStorageVPbkStoreHandler;
+class MVIMPSTStorageServiceCacheWriter;
+class MVPbkContactLink;
+class MVPbkStoreContact;
+class CVPbkContactLinkArray;
+class MVIMPSTStorageContact;
+
+// CLASS DECLARATION
+/**
+ *  vpbk local store 
+ *  This class implements the use of Virtual Phonebook for Local Store(Contacts.cdb)
+ *
+ *  @lib vimpststorage.lib
+ *  @since S60 5.0
+ */
+NONSHARABLE_CLASS( CVIMPSTStorageVPbkLocalStore ) : public CActive,                     
+							                    	public MVIMPSTStorageVPbkContactStore,
+							                    	public MVIMPSTStorageVPbkStoreHandler
+							                    
+                     
+    {
+        
+    public:
+
+        /**
+         * Two-phased constructor.
+         *
+         * @param aContactDb, contact database
+         * @param aListId, Default List ID 
+         * @param aServiceId - Service Id
+         * @param aServiceName - Service Name
+         * @param aStorageView, Ref to Storage (CVIMPSTStorageViewId)
+         */
+        static CVIMPSTStorageVPbkLocalStore* NewL(const TDesC& aContactDb, const TDesC& aServiceName,
+        										 MVIMPSTStorageServiceCacheWriter& aServiceCacheWriter );
+
+        /**
+         * Two-phased constructor.
+         *
+         * @param aContactDb, contact database
+         * @param aListId, Default List ID 
+         * @param aServiceId - Service Id
+         * @param aServiceName - Service Name
+         * @param aStorageView, Ref to Storage (CVIMPSTStorageViewId)
+         */
+        static CVIMPSTStorageVPbkLocalStore* NewLC( const TDesC& aContactDb, const TDesC& aServiceName,
+        											MVIMPSTStorageServiceCacheWriter& aServiceCacheWriter );
+
+        /**
+         * Standard C++ destructor
+         */    
+        ~CVIMPSTStorageVPbkLocalStore();
+
+	public: // from MVIMPSTStorageVPbkContactStore
+	
+		/**
+	     * See @MVIMPSTStorageVPbkContactStore
+	     * @ return ETrue
+	     **/
+		TBool LocalStore() const ;
+		
+		TInt CreateVPbkContactL( const TDesC& aUserId, 
+        						 const TDesC& aDisplayName,
+        						 TBool aInvitationAutoAccept = EFalse)  ;
+		
+		TInt RemoveVPbkContactL(const MVPbkContactLink& aContactLink) ;
+		
+		TInt RemoveVPbkContactsL(const MVPbkContactLink& aContactLink) ;
+		
+		TInt RetrieveVPbkXSPIdL(const TDesC8& aPackedLinks )  ;
+		
+		TInt CreateRetriveVPbkContactL(TInt aIndexToUse ) ;
+		
+		TInt deleteRetriveVPbkContactL(TInt aIndexToUse ) ;
+		
+		TInt UpdateAvatarFieldDataL(const MVPbkContactLink& aContactLink,
+								    const TDesC8& aAvatartData );
+		
+		TInt RemoveAvatarFieldL(MVPbkStoreContact& aStoreContact);
+		
+		
+		void AddVPbkFetchContactsL( RArray <TPtrC> &aFirstNameList, 
+		                            RArray <TPtrC> &aServiceField )  ;
+		
+		TInt RemoveAllVPbkContactsL() ;
+		
+	    const TDesC& GetRetrieveVPbkXSPIdL(TInt aIndex )  ;
+		
+		void DeleteDatabaseL()  ;
+				
+    public : // MVIMPSTStorageVPbkStoreHandler
+        /**
+         * From MVPbkContactStoreObserver
+         * Callback: Store event occured
+         *
+         * @since S60 5.0
+         * @param aContactStore, contact store
+         * @param aStoreEvent, event
+         */
+        void HandleVPbkStoreEventL(TVIMPSTVPbkStoreEvent aVPbkStoreEvent) ; 
+        
+    private: // From CActive
+               void RunL();
+               void DoCancel();
+               TInt RunError(TInt aError );
+                       
+     private: 
+                  
+               /**
+                * Issues Request
+                *                  
+                */
+               void IssueRequest();    
+
+        
+    private:
+		
+		/**
+         * Check if database exists         
+         * @return	ETrue, if database exists.
+         */
+		TBool DbExists();
+		
+		/**
+         * Creates new CPermanentFileStore stream and creates database on it.         
+         */
+		void CreateDbL();
+
+		/**
+         * Open existing database.         
+         */
+		
+        void OpenDbL();
+		
+		
+		/**
+         * Close database.         
+         */
+		void CloseDb();		
+		
+		/*
+         * Create tables to database         
+         */	
+		void CreateTablesL();
+		
+		
+		/**
+         * Add a column to colset         
+         * @param	aName Name of column
+         * @param	aType Type of column
+         * @param	aColset Colset, where column is added.
+         * @param   aMaxLength Maximum column length
+         *          0 = use columns default value
+         */
+		void AddColumnL( const TDesC& aName, TDbColType aType, 
+		                             CDbColSet* aColset );
+		
+		
+		/*
+         * Leaves if free diskspace is low.         
+         * @param	aSize amount of free diskspace needed.
+         */
+		void DoFreespaceLevelCheckL( TInt aSize );
+
+
+		/**
+         * Opens database table         
+         */
+		void OpenTableL();
+		
+		/**
+         * Closes database table         
+         */
+		void CloseTable();
+		
+		
+		/** 
+         * Seek a specific row with given contactlink in the database file.         
+         * @param aColNo The column number (KContactLink)
+         * @param aContactLink - Packed Contact Link
+         * @return ETrue if seek successful, otherwise EFalse 
+         */
+        TBool SeekRowL( TDbColNo aColNo, TDesC8& aContactLink );
+        
+        
+        /** 
+         * Seek a specific row with given contact identifier in the database file.         
+         * @param aColNo The column number (KContactId)
+         * @param aContactId - Contact identifier
+         * @return ETrue if seek successful, otherwise EFalse 
+         */
+        TBool SeekRowL( TDbColNo aColNo, TInt32& aContactId );
+        
+        
+        /**
+         * Write the given data to the database file         
+         * @param aContactLink - Packed Contact Link
+         * @param aIdentifier - Contact identifier
+         */
+        void  WriteToStoreDbL(  TInt32& aIdentifier );
+        
+        
+        /**
+         * Reads first contact from storage         
+         * @param aContactLink - Packed Contact Link
+         * @return	KErrNone,	if successful.
+         */
+        void  ReadCurrentL( TInt32& aContactLink);
+        
+        
+        /**
+         * Reads next contact from storage         
+         * @param aContactLink - Packed Contact Link
+         * @return	KErrNone,	if successful.
+         */
+        TInt ReadNextL( TInt32& aContactId );
+        
+        /**
+         * Reads first contact from storage         
+         * @param aContactLink - Packed Contact Link
+         * @return	KErrNone,	if successful.
+         */
+        TInt ReadFirstL(  TInt32& aContactLink );
+        
+               
+        /*
+         * Deletes contact from storage         
+         * @param aContactId - Contact Identifier of the Contact to Delete
+         */
+        void DeleteContactFromInternalStoreL( TInt32& aContactId );
+        
+        void DeleteAllContactFromInternalStoreL();
+        
+           
+    private: // Implementation
+
+        /**
+         * Standard C++ constructor
+         */    
+        CVIMPSTStorageVPbkLocalStore(MVIMPSTStorageServiceCacheWriter& aServiceCacheWriter);
+        
+        /**
+         * Performs the 2nd phase of construction.
+         *
+         * @param aContactDb, contact database address
+         * @param aServiceName, service name         
+         */        
+        void ConstructL(const TDesC& aContactDb, const TDesC& aServiceName );
+        
+        /*
+        * helper method for deleting entry from iFetchContactsToBeAdded
+        */ 
+        void ResetAndDestroyLocalArrayL();
+        
+        /*
+         * compare both string without colon part
+         *  return ETrue if both contact are same
+         */
+        TBool IsSameContactIdL(const TDesC& aFirstId, const TDesC& aSecondId );
+      
+    private: // Data
+        
+        MVIMPSTStorageServiceCacheWriter& iServiceCacheWriter;
+        // Own: pointer to a class which interact with Virtual phonebook   
+        CVIMPSTStorageVPbkStoreHandler* iVPbkStoreHandler;
+        
+        // own , contact id converter to and from link
+        CVPbkContactIdConverter* iIdConverter;
+        
+      	//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
+        
+        HBufC* iLocalDBName;
+       
+        RArray<TVIMPSTContactInfo> iFetchContactsToBeAdded;
+        
+        TVIMPSTFetchingSteps iFetchStep;
+        
+        RPointerArray<MVIMPSTStorageContact> iRetrivedContactArray;
+        // owns : id of invitation geting accepted
+        HBufC* iInviteId;
+    };
+
+#endif // C_CVIMPSTSTORAGELOCALSTORE_H
+
+// End of file