messagingfw/msgsrvnstore/server/inc/MSVENTRY.H
changeset 0 8e480a14352b
child 58 6c34d0baa0b1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/server/inc/MSVENTRY.H	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,182 @@
+// 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:
+//
+
+#ifndef __MSVENTRY_H__
+#define __MSVENTRY_H__
+
+
+
+#if !defined(__E32BASE_H__)
+#include <e32base.h>
+#endif
+
+#if !defined(__MSVSTORE_H__)
+#include <msvstore.h>
+#endif
+
+//
+// Forward declarations
+class CMsvStore;
+class CMsvCopyMoveEntriesBase;
+class CMsvServer;
+
+//**********************************
+// CMsvServerEntry
+//**********************************
+//
+//
+//
+
+class CMsvServerEntry : public CActive, public MMsvStoreObserver
+/** Accesses and acts upon a particular Message Server entry. 
+
+It provides similar 
+functionality to that which CMsvEntry gives to client-side programs. The current 
+entry that a CMsvServerEntry object relates is similarly referred to as its 
+context. 
+
+A difference to note is that CMsvEntry functions, when used on a remote context, 
+can result in requests to Server-side MTMs to change data on a remote server, 
+as well as the local Message Server index. Naturally, as CMsvServerEntry is 
+designed to be used by Server-side MTMs themselves, its comparable functions 
+only alter the Message Server index.
+
+A CBaseServerMTM-derived object gets an initial CMsvServerEntry on construction. 
+It can get further CMsvServerEntry objects by calling NewEntryL(). The context 
+can be changed by SetEntry().
+
+The context is locked, preventing it being accessed by other MTMs. The lock 
+is released when the object is deleted, or the context changes.
+
+As with CMsvEntry, CBaseServerMTM functions can be divided into two broad 
+groups. The first provides means to access the various types of storage associated 
+with an entry. The second provides a means to discover and access other entries 
+that the entry owns (its children).  
+@publishedAll
+@released
+*/
+	{
+public:
+	IMPORT_C static CMsvServerEntry* NewL(CMsvServer& aServer, TMsvId aId);
+	~CMsvServerEntry();
+	//
+	// Set and get the current context
+	IMPORT_C TInt SetEntry(TMsvId aId);
+	inline const TMsvEntry& Entry() const;
+	IMPORT_C TMsvId OwningService() const;
+	//
+	// current entry only functions
+	IMPORT_C TInt ChangeEntry(const TMsvEntry& aEntry, TSecureId aOwnerId);
+	IMPORT_C TInt ChangeEntry(const TMsvEntry& aEntry);
+	
+
+	//
+	// child entry only functions
+	IMPORT_C TInt CreateEntry(TMsvEntry& aEntry);
+	IMPORT_C TInt CreateEntry(TMsvEntry& aEntry, TSecureId aOwnerId);
+	IMPORT_C TInt CreateEntry(TMsvEntry& aEntry, TSecureId aOwnerId, TBool aBulk);
+	IMPORT_C TInt DeleteEntry(TMsvId aId);
+	IMPORT_C TInt DeleteEntries(CMsvEntrySelection& aSelection);
+	IMPORT_C TInt MoveEntryWithinService(TMsvId aId, TMsvId aDestination);
+	IMPORT_C TInt MoveEntriesWithinService(CMsvEntrySelection& aSelection, TMsvId aDestination);
+	IMPORT_C TInt ChangeAttributes(const CMsvEntrySelection& aSelection, TUint aSetAttributes, TUint aClearAttributes);
+	IMPORT_C void MoveEntryL(TMsvId aId, TMsvId aDestination, TRequestStatus& aObserverStatus);
+	IMPORT_C void MoveEntriesL(const CMsvEntrySelection& aSelection, TMsvId aDestination, TRequestStatus& aObserverStatus);
+	IMPORT_C void CopyEntryL(TMsvId aId, TMsvId aDestination, TRequestStatus& aObserverStatus);
+	IMPORT_C void CopyEntryL(TMsvId aId, TMsvId aDestination, TMsvId& aCompletedEntry, TRequestStatus& aObserverStatus);
+	IMPORT_C void CopyEntriesL(const CMsvEntrySelection& aSelection, TMsvId aDestination, TRequestStatus& aObserverStatus);
+	IMPORT_C void CopyEntriesL(const CMsvEntrySelection& aSelection, TMsvId aDestination, CMsvEntrySelection& aCompletedSelection, TRequestStatus& aObserverStatus);
+	IMPORT_C TInt GetEntryFromId(TMsvId aId,TMsvEntry*& aEntry);
+	//
+	// read and write the store associated with the context
+	IMPORT_C CMsvStore* ReadStoreL();
+	IMPORT_C CMsvStore* EditStoreL();
+	//
+	// List the children of the context 
+	inline const TMsvSelectionOrdering& Sort();
+	inline void SetSort(TMsvSelectionOrdering& aOrdering);
+	inline void SetMtm(TUid aMtm);
+	IMPORT_C TInt GetChildren(CMsvEntrySelection& aSelection);
+	//
+	IMPORT_C TInt GetChildrenWithService(TMsvId aServiceId, CMsvEntrySelection& aSelection);
+	IMPORT_C TInt GetChildrenWithMtm(TUid aMtm, CMsvEntrySelection& aSelection);
+	IMPORT_C TInt GetChildrenWithType(TUid aType, CMsvEntrySelection& aSelection);
+	//
+	// Spawns a new CMsvServerEntry object
+	IMPORT_C CMsvServerEntry* NewEntryL(TMsvId aId);
+	// 
+	// from MMsvStoreObserver
+	void HandleStoreEvent(MMsvStoreObserver::TMsvStoreEvent aEvent, TMsvId aId);
+	//
+	//
+
+	IMPORT_C TBool HasStoreL() const;
+	//
+	IMPORT_C RFs& FileSession();
+	//
+	// Methods for creating and changing entries in bulk
+	// (e.g. during email header downloading)
+	IMPORT_C TInt CreateEntryBulk(TMsvEntry& aEntry, TSecureId aOwnerId);
+
+	IMPORT_C TInt CreateEntryBulk(TMsvEntry& aEntry);
+
+	IMPORT_C TInt ChangeEntryBulk(const TMsvEntry& aEntry, TSecureId aOwnerId);
+	IMPORT_C TInt ChangeEntryBulk(const TMsvEntry& aEntry);
+	
+	IMPORT_C void CompleteBulk();
+
+protected:
+	CMsvServerEntry(CMsvServer& aIndex);
+	void ConstructL(TMsvId aId);
+	//
+	void RunL();
+	void DoCancel();
+	//
+private:
+	TInt IncreaseBufferSizes(TInt aNewDescriptionSize, TInt aNewDetailsSize);
+	TBool AreChildren(const CMsvEntrySelection& aSelection) const;
+	TBool IsAChild(TMsvId aId) const;
+	void DoMoveEntryL(TMsvId aId, TMsvId aDestination);
+	void DoDeleteEntryL(TMsvId aId, CMsvEntrySelection*& aDeleted, CMsvEntrySelection*& aMoved);
+	void DoDeleteEntriesL(CMsvEntrySelection& aSelection, CMsvEntrySelection*& aDeleted, CMsvEntrySelection*& aMoved);
+	void DoMoveEntriesL(CMsvEntrySelection& aSelection, TMsvId aDestination, CMsvEntrySelection*& aMoved);
+	TInt DoGetChildren(TMsvId aServiceId, TUid aMtm, TUid aType, CMsvEntrySelection& aSelection);
+	void DoGetChildrenL(TMsvId aServiceId, TUid aMtm, TUid aType, CMsvEntrySelection& aSelection);
+	void DoCopyEntriesL(const CMsvEntrySelection& aSelection, TMsvId aDestination, TRequestStatus& aObserverStatus);
+	TInt DoChangeEntry(const TMsvEntry& aEntry, TSecureId aOwnerId, TBool aForcedUpdate, TBool aBulk);
+
+	//
+private:
+	TBool iLockedStore;
+	TMsvSelectionOrdering iOrdering;
+	TMsvEntry iEntry;
+	HBufC* iDescription;
+	HBufC* iDetails;
+	CMsvServer& iServer;
+	CMsvStore* iStore;
+	TUid iMtm;
+	CMsvCopyMoveEntriesBase* iCopyMove;
+	TMsvId iSource;
+	enum { EMsvIdle, EMsvMoving, EMsvCopying } iEntryState;
+	TRequestStatus* iObserverStatus;
+	CMsvEntrySelection* iCompletedSelection;
+	TMsvId* iCompletedEntryId;
+	TSecureId	iContextOwnerId;
+	};
+
+
+#include <msventry.inl>
+
+#endif // __MSVENTRY_H__