omads/omadsextensions/adapters/mms/inc/mmsdatastore.h
changeset 0 dab8a81a92de
child 24 8e7494275d3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/adapters/mms/inc/mmsdatastore.h	Mon Nov 23 14:46:41 2009 +0200
@@ -0,0 +1,359 @@
+/*
+* 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:  Part of SyncML Data Synchronization Plug In Adapter
+*
+*/
+
+
+
+#ifndef __MMSDATASTORE_H__
+#define __MMSDATASTORE_H__
+
+// INCLUDES
+#include <SmlDataProvider.h>
+#include "mmsdataproviderdefs.h" 
+#include "changefinder.h"
+
+
+// FORWARD DECLARATIONS
+class CMsvSession; 
+class CNSmlDataItemUidSet;
+class CMmsCodecClient;
+class CMmsAdapterMsvApi;
+class CMsvOperationActiveSchedulerWait;
+class TNSmlSnapshotItem;
+class COMADSFolderObject;
+
+/**
+* @brief This class is derived from ECom Data Store plugin-interface (CSmlDataStore).
+* It performs the actual synchronization commands, which are received from
+* the DS engine.
+*/
+class CMmsDataStore : public CSmlDataStore
+    {
+public:  
+    
+    /**
+    * Constructor
+	*
+	* @return CMmsDataStore*, a new CSmsDataStore instance.
+    */
+    static CMmsDataStore* NewL(CMsvSession &aMsvSession);
+    
+	/**
+    * Destructor
+    */
+    virtual ~CMmsDataStore();
+
+protected:
+   
+   	// Virtual functionality from CSmlDataStore, for comments see the CSmlDataStore header file
+	virtual void DoOpenL(const TDesC& aStoreName, MSmlSyncRelationship& aContext, TRequestStatus& aStatus);
+	virtual void DoCancelRequest();
+	virtual const TDesC& DoStoreName() const;
+	virtual void DoBeginTransactionL();
+	virtual void DoCommitTransactionL(TRequestStatus& aStatus);
+	virtual void DoRevertTransaction(TRequestStatus& aStatus);
+	virtual void DoBeginBatchL();
+	virtual void DoCommitBatchL(RArray<TInt>& aResultArray, TRequestStatus& aStatus);
+	virtual void DoCancelBatch();
+	virtual void DoSetRemoteStoreFormatL(const CSmlDataStoreFormat& aServerDataStoreFormat);
+	virtual void DoSetRemoteMaxObjectSize(TInt aServerMaxObjectSize);
+	virtual TInt DoMaxObjectSize() const;
+	virtual void DoOpenItemL(TSmlDbItemUid aUid, TBool& aFieldChange, TInt& aSize,
+	    TSmlDbItemUid& aParent, TDes8& aMimeType, TDes8& aMimeVer, TRequestStatus& aStatus);
+	virtual void DoCreateItemL(TSmlDbItemUid& aUid, TInt aSize, TSmlDbItemUid aParent,
+	    const TDesC8& aMimeType, const TDesC8& aMimeVer, TRequestStatus& aStatus);
+	virtual void DoReplaceItemL(TSmlDbItemUid aUid, TInt aSize, TSmlDbItemUid aParent,
+	    TBool aFieldChange, TRequestStatus& aStatus);
+	virtual void DoReadItemL(TDes8& aBuffer);
+	virtual void DoWriteItemL(const TDesC8& aData);
+	virtual void DoCommitItemL(TRequestStatus& aStatus);
+	virtual void DoCloseItem();
+	virtual void DoMoveItemL(TSmlDbItemUid aUid, TSmlDbItemUid aNewParent, TRequestStatus& aStatus);
+	virtual void DoDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus);
+	virtual void DoSoftDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus);
+	virtual void DoDeleteAllItemsL(TRequestStatus& aStatus);
+	virtual TBool DoHasSyncHistory() const;
+	virtual const MSmlDataItemUidSet& DoAddedItems() const;
+	virtual const MSmlDataItemUidSet& DoDeletedItems() const;
+	virtual const MSmlDataItemUidSet& DoSoftDeletedItems() const;
+	virtual const MSmlDataItemUidSet& DoModifiedItems() const;
+	virtual const MSmlDataItemUidSet& DoMovedItems() const;
+	virtual void DoResetChangeInfoL(TRequestStatus& aStatus);
+	virtual void DoCommitChangeInfoL(TRequestStatus& aStatus, const MSmlDataItemUidSet& aItems);
+	virtual void DoCommitChangeInfoL(TRequestStatus& aStatus);
+
+private: 
+
+	/**
+    * C++ Constructor.
+    */
+    CMmsDataStore();
+    
+	/**
+    * 2nd-phase Constructor.
+    *
+    * @param aMsvSession	IN: a session handle to message store
+    */    
+    void ConstructL(CMsvSession &aMsvSession);
+	
+	/**
+    * Registers snapshot to ChangeFinder.
+    */
+	void RegisterSnapshotL() const;
+
+	/**
+    * Registers a single folder to snapshot, used by RegisterSnapshotL.
+    * 
+    * @param aSnapshot	IN: a snapshot item array.
+    * @param aId		IN: folder id.
+	* @return TInt, Not used.
+    */
+	TInt RegisterFolderL(CSnapshotArray* aSnapshot, const TMsvId& aId) const;
+	
+	/**
+    * Deletes all messages in a specified folder
+    * 
+    * @param aId	IN: a folder id, which is to be emptied
+	* @return TInt, not used.
+    */	
+	TInt DeleteAllMessagesInFolderL(TMsvId aId);
+	
+	/**
+    * Checks whether the specified MMS message exists in message store.
+    * 
+    * @param aId	IN: message ID
+	* @return TBool, ETrue if the item id exists in the message store. Otherwise EFalse.
+    */
+    TBool MmsItemExists(TMsvId aUid);
+	
+	/**
+    * This function resolves the status bits from the message entry
+    * 
+    * @param aUnread  IN: the status bits are determined from this value
+	* @return TUint8, Status byte.
+    */	
+	TUint8 ResolveStatusBits(TBool aUnread);
+	
+	/**
+    * This function reads data of opened message from MMS engine to client buffer.
+    * Data is retriveved from MMS engine in chunks whose size can be less that 
+    * client buffer size, for effectivity client buffer is allways filled with data.
+    * Recursive algorith is used for that.
+    * 
+    * @param aBuffer	   OUT: client data buffer
+	* @return TInt, KErrNone or KErrOverflow if all MMS message data has been read.
+    */		
+	TInt ReadDataRecursively(TDes8& aBuffer);
+	
+	/**
+    * This function updates MMS message status
+    * 
+    * @param aId  IN: Identifies MMS message in message store
+	* @param aUnread IN:  New status (unread/read)
+    */		
+	void UpdateMmsStatusL(TMsvId aId, TBool aUnread);
+	
+    /**
+    * Registers user folder messages to snapshot, used by RegisterSnapshotL.
+    * 
+    * @param aSnapshot	IN: a snapshot item array.
+	* @return TInt, Not used.
+    */	
+    TInt RegisterUserFoldersL(CSnapshotArray* aSnapshot) const;
+	
+    /**
+    * Cleans all user folders from SMS messages
+    *
+    * @return   KErrNone in case of success
+    */	   
+    TInt CleanUserFoldersL(); 
+	
+private: // Data members
+
+	/**
+	* @brief Data Store states:
+	* EMmsClosed:			Store is closed.
+    * EMmsOpenAndWaiting:	Store is ready to be used.
+    * EMmsItemOpen:			Item is being read.
+    * EMmsItemCreating:		Item is being created.
+    * EMmsItemUpdating:		Item is being updated.
+	*/
+    enum TState
+        {
+        EMmsClosed = 0,
+        EMmsOpenAndWaiting,
+        EMmsItemOpen,
+        EMmsItemOpenFieldUpdate,
+        EMmsItemCreating,
+        EMmsItemUpdating,
+        EFolderOpen,
+        EFolderCreating,
+        EFolderUpdating
+        };  	
+
+    /**
+	* A flag indicating the existence of synchronization history.
+	*/
+    TBool iHasHistory;
+    
+    /**
+	* Flag indicating, whether database is opened.
+	*/
+    TBool iDataBaseOpened;
+
+    /**
+	* The state of the active object.
+	*/
+	TState iCurrentState;	
+	
+    /**
+	* Access to streams, used by ChangeFinder.
+	*/
+    MSmlSyncRelationship* iContext;
+    
+    /**
+	* Key that is used in sorting snapshot.
+	*/
+    const TKeyArrayFix iKey;
+
+    /**
+	* Change finder, used to determine db modifications.
+	*/
+    CChangeFinder* iChangeFinder;
+            
+    /**
+	* Used to access MMS message store
+	*/
+    CMmsCodecClient* iCodecClient;
+    
+    /**
+	* Used to access message folders
+	*/    
+    CMmsAdapterMsvApi* iMsvApi;
+
+    /**
+	* Waiter object for asynchronous operations
+	*/
+    CMsvOperationActiveSchedulerWait* iMsvWait;
+
+    /**
+	* Message server session handle
+	*/
+    CMsvSession* iMsvSession;
+	
+    /**
+	* The location for temporary data
+	*/
+    CBufFlat* iDataBuffer;
+    
+    /**
+	* Counter of partial data reading
+	*/   
+    TInt iReadCounter;
+    
+    /**
+	* To store information whether current MMS message is unread
+	*/     
+    TBool iUnread;
+    
+    /**
+	* Data chunk used in partial data reading from MMS engine
+	*/        
+    TPtrC8 iReadDataChunk;
+    
+    /**
+	* Current read position at the data chunk from MMS engine
+	*/      
+    TInt iReadPosition;
+
+    /**
+	* Indicates wheter this is the last data chunk from MMS engine
+	*/        
+    TBool iLastDataChunk;
+    
+    /**
+	* Indicates whether all data related to current message has been read
+	*/         
+    TBool iReadAllData;
+    
+    /**
+	* Counter of partial data writing
+	*/   
+    TInt iWriteCounter;
+    
+    /**
+	* Indicates wheter this was only status update
+	*/      
+    TInt iWrittenDataLength;
+
+    /**
+	* Stores the currently active message id.
+	*/
+    TMsvId iCurrentId;
+    
+    /**
+	* Pointer to the variable, receiving the created Uid.
+	*/
+	TSmlDbItemUid* iCreatedUid;  
+
+    /**
+	* Stores the parent id of currently active message.
+	*/
+    TMsvId iParentId;
+
+    /**
+	* Used to get asynchronous return values.
+	*/
+    TRequestStatus*  iCallerStatus;
+    
+    /**
+	* Used to store new items.
+	*/
+	CNSmlDataItemUidSet* iNewItems;
+
+    /**
+	* Used to store deleted items.
+	*/
+    CNSmlDataItemUidSet* iDeletedItems;
+
+    /**
+	* Used to store updated items.
+	*/
+    CNSmlDataItemUidSet* iUpdatedItems;
+
+    /**
+	* Used to store moved items.
+	*/
+    CNSmlDataItemUidSet* iMovedItems;
+
+    /**
+	* Used to store soft-deleted items (not supported).
+	*/
+    CNSmlDataItemUidSet* iSoftDeletedItems;
+    
+    /**
+	* Used to parse OMA DS Folder Objects
+	*/    
+    COMADSFolderObject* iFolderObjectParser;   
+
+    /**
+	* Reserved pointer for future extension.
+	*/
+    TAny* iReserved;
+    };
+
+#endif // __MMSDATASTORE_H__  
+