messagingfw/msgsrvnstore/server/inc/MSVSTORE.H
changeset 62 db3f5fa34ec7
parent 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/server/inc/MSVSTORE.H	Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,298 @@
+// Copyright (c) 1998-2009 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:
+// MSVSTORE.H
+//
+/**
+ * @file 
+ * @publishedAll
+ * @released
+ */
+#if !defined(__MSVSTORE_H__)
+#define __MSVSTORE_H__
+
+#include <e32base.h>
+#include <s32file.h>
+#include <msvstd.h>
+
+class CMsvCachedStore;
+class CMsvBodyText;
+class CMsvAttachment;
+
+//**********************************
+// MMsvStoreObserver
+//**********************************
+//
+// 
+//
+
+class MMsvStoreObserver
+/** Observer interface to get events relating to a message store.
+
+This is used in the derivation of CMsvServerEntry and CMsvEntry.
+
+@publishedAll
+@released
+*/
+	{
+public:
+/**
+Defines message store event types.
+
+@publishedAll
+@released
+*/
+	enum TMsvStoreEvent {	/** A read-only message store was closed. */
+							EMsvReadStoreClosed,	// read only CMsvStore closed
+							/** An editable message store was closed. */
+							EMsvEditStoreClosed		// edit only CMsvStore closed
+							};	
+public:
+	/** Receives a message store event.
+
+	@param aEvent Event type
+	@param aId ID of the message to which the event relates
+	*/
+	virtual void HandleStoreEvent(TMsvStoreEvent aEvent, TMsvId aId)=0;
+	};
+
+
+//**********************************
+// CMsvStore
+//**********************************
+//
+// The entry structure that the client uses
+//
+
+/*
+Uid which are not needed to be known outside CMsvStore
+@publishedAll
+@released
+*/
+const TUid KMsvEntryRichTextBody={0x10000F70};
+
+class MMsvAttachmentManager;
+class MMsvAttachmentManagerSync;
+class CMsvAttachmentManager;
+class MMsvStoreManager;
+class CMsvPlainBodyText;
+
+
+class CMsvStore : public CBase
+/** Provides an interface over the message store that is associated with a message 
+entry. It is similar to the dictionary store in supporting the concept of 
+streams referenced by UID. 
+
+This class is intended for use by MTM implementations. Message client applications 
+access the store through the higher-level functions provided by Client-side 
+and User Interface MTMs.
+
+A CMsvStore object is created by a CMsvEntry object and passed to a client 
+process. The client process then becomes responsible for deleting the CMsvStore 
+object. The store can be opened in two modes, read or edit, and only one CMsvStore 
+object can have edit access to a store. 
+
+CMsvStore provides functions for general manipulation of the store, and for 
+accessing the standard body text stream. RMsvReadStream and RMsvWriteStream 
+must be used to access other streams. 
+@publishedAll
+@released
+*/
+	{
+public:
+	IMPORT_C ~CMsvStore();
+	//
+	IMPORT_C void StoreBodyTextL(const CRichText& aRichTextBody);
+	
+	IMPORT_C void RestoreBodyTextL(CRichText& aRichTextBody);
+	IMPORT_C void RestoreBodyTextL(CRichText& aRichTextBody, TUint aCharsetOverride);
+	
+	IMPORT_C void DeleteBodyTextL();
+	IMPORT_C TBool HasBodyTextL() const;
+	//
+	IMPORT_C void DeleteL(); // deletes the message store
+	IMPORT_C TInt SizeL(); // the size of the store
+	//
+	// The following give the Dictionary store interface
+	IMPORT_C TBool IsNullL() const;
+	IMPORT_C TBool IsPresentL(TUid aUid) const;
+	IMPORT_C void Remove(TUid aUid);
+	IMPORT_C void RemoveL(TUid aUid);
+	IMPORT_C void Revert();
+	IMPORT_C void RevertL();
+	IMPORT_C TInt Commit(); 
+	IMPORT_C void CommitL();
+
+#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB)
+	IMPORT_C TBool IsDbStore();
+	void CommitHeaderL();
+#endif
+
+	// Attachment Management
+	IMPORT_C MMsvAttachmentManager& AttachmentManagerL();
+	IMPORT_C MMsvAttachmentManagerSync& AttachmentManagerExtensionsL();
+	
+	// APIs to get the CMsvPlainBodyText interface.
+	IMPORT_C CMsvPlainBodyText* InitialisePlainBodyTextForWriteL(TBool aIs8Bit, TUint aCharsetId, TUint aDefaultCharsetId);
+	IMPORT_C CMsvPlainBodyText* InitialisePlainBodyTextForReadL(TInt aChunkLength);
+
+	IMPORT_C void CreateShareProtectedAttachmentL(const TDesC& aFileName, RFile& aAttachmentFile, CMsvAttachment* aAttachmentInfo);
+	void Restore8BitBodyTextL(RFileReadStream& aInputStream);
+protected:
+#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB)
+	IMPORT_C static CMsvStore* OpenForReadL(MMsvStoreObserver& aObserver, RFs& aFs, MMsvStoreManager& aStoreManager, TMsvId aId, TUid aMtmId);
+	IMPORT_C static CMsvStore* OpenForWriteL(MMsvStoreObserver& aObserver, RFs& aFs, MMsvStoreManager& aStoreManager, TMsvId aId, TUid aMtmId);
+#endif
+	IMPORT_C CMsvStore(MMsvStoreObserver& aObserver, RFs& aFs, TMsvId aId, MMsvStoreManager& aStoreManager);
+	IMPORT_C static CMsvStore* OpenForReadL(MMsvStoreObserver& aObserver, RFs& aFs, MMsvStoreManager& aStoreManager, TMsvId aId);
+	IMPORT_C static CMsvStore* OpenForWriteL(MMsvStoreObserver& aObserver, RFs& aFs, MMsvStoreManager& aStoreManager, TMsvId aId);
+	
+private:
+	
+	void ConstructL(TBool aReadOnly);
+#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB)
+	void ConstructDbL(TUid aMtmId,TBool aReadOnly);
+	void RestoreL();
+	void LoadHeaderEntryL(const TUid aMtmId, TBool aUid);
+#endif
+
+	//Methods to handle plain bodytext.
+	void RestorePlainBodyTextL(CRichText& aRichText, TUint aCharsetOverride);
+	void GetRichTextFrom8BitL(RFile& aBodyTextFile, CRichText& aRichText, TUint aCharSet, TUint aDefaultCharSet);
+	void GetRichTextFrom16BitL(RFile& aBodyTextFile, CRichText& aRichText);
+	void Convert8BitToRichTextL(RFile& aBodyTextFile, CRichText& aRichText, TUint aCharSet, TUint aDefaultCharSet);
+
+	void Lock();
+	inline const CMsvCachedStore& Store() const;
+	inline CMsvCachedStore& Store();
+private:
+	enum {EMsvStoreUnlocked, EMsvStoreLocked} iLockStatus;
+
+	RFs& iFs;
+	MMsvStoreObserver& iObserver;
+	
+
+	const TMsvId iId;
+	CMsvCachedStore* iStore;
+	TBool iConstructed;
+	CMsvBodyText* iBodyText;
+	
+	MMsvStoreManager& iStoreManager;
+	CMsvAttachmentManager* iAttachmentManager;
+
+friend class CMsvEntry;
+friend class CMsvServerEntry;
+friend class RMsvReadStream;
+friend class RMsvWriteStream;
+#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB)
+friend class TMsvWriteStore;
+friend class TMsvReadStore;
+#endif
+	};
+
+
+class RMsvReadStream : public RReadStream
+/** Accesses the streams in a message store with read access. 
+
+Before it is used, 
+a CMsvStore must have been opened on the message store with read or read/write 
+access.
+
+This class is intended for use by MTM implementations to store MTM-specific 
+information. Message client applications access the store through the higher-level 
+functions provided by Client-side and User Interface MTMs.
+
+Most of its functionality is provided by the base class RReadStream. 
+@publishedAll
+@released
+*/
+	{
+public:
+	IMPORT_C void OpenL(const CMsvStore& aMsvStore, TUid aUid);
+	IMPORT_C void OpenLC(const CMsvStore& aMsvStore,TUid aUid);
+	void OpenLC(CMsvCachedStore& aStore,TUid aUid);
+	};
+
+
+class RMsvWriteStream : public RWriteStream
+/** Accesses the streams in a message store with write access, or creates new streams. 
+Before it is used, a CMsvStore must have been opened on the message store 
+with write access.
+
+This class is intended for use by MTM implementations to store MTM-specific 
+information. Message client applications access the store through the higher-level 
+functions provided by Client-side and User Interface MTMs.
+
+Most of its functionality is provided by the base class RWriteStream. 
+@publishedAll
+@released
+*/
+	{
+public:
+	IMPORT_C void AssignLC(CMsvStore &aMsvStore, TUid aUid);
+	IMPORT_C void AssignL(CMsvStore &aMsvStore, TUid aUid);
+	void AssignLC(CMsvCachedStore &aStore, TUid aUid);
+	};
+
+
+
+#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB)
+
+/** Accesses the message store with write access, or creates new header entry. 
+Before it is used, a CMsvStore must have been opened on the message store 
+with write access.
+
+This class is intended for use by MTM implementations to store MTM-specific 
+information. Message client applications access the store through the higher-level 
+functions provided by Client-side and User Interface MTMs.
+
+@publishedAll
+@released
+*/
+class TMsvWriteStore
+	{
+public:	
+	IMPORT_C TMsvWriteStore(CMsvStore& aMsvStore);
+	IMPORT_C void AssignL(CHeaderFields* aHeaderFields);
+	IMPORT_C void CommitL();	
+public:
+	CMsvStore& iMsvStore;
+	};
+	
+/** Accesses the a message store with read access. 
+
+Before it is used, 
+a CMsvStore must have been opened on the message store with read or read/write 
+access.
+
+This class is intended for use by MTM implementations to store MTM-specific 
+information. Message client applications access the store through the higher-level 
+functions provided by Client-side and User Interface MTMs.
+
+@publishedAll
+@released
+*/
+	
+class TMsvReadStore
+	{
+public:	
+	IMPORT_C TMsvReadStore(CMsvStore& aMsvStore, TUid aUid);
+	IMPORT_C void LoadL(CHeaderFields*& aHeaderFields);
+	IMPORT_C void ReadL(CHeaderFields*& aHeaderFields);
+public:
+	CMsvStore& iMsvStore;
+	TUid iUid;
+	};
+#endif
+
+#endif