--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/metadataengine/client/inc/mdeenginesession.h Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,528 @@
+/*
+* Copyright (c) 2005-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: This is Metadata engine client session file
+*
+*/
+
+
+#ifndef __MDEENGINESESSION_H__
+#define __MDEENGINESESSION_H__
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <e32base.h>
+#include <badesca.h>
+
+#include "mdscommoninternal.h"
+#include "mdequery.h"
+#include "mdeharvestersession.h"
+
+// CONSTANTS
+// Number of message slots to reserve for this client server session.
+// 27 = 1 asynchronous find + max.25 pending notifier hooks + 1 extra
+const TUint KMetadataMessageSlots = 27;
+
+const TUid KServerUid3 = { 0x0765EEC3 }; // Server UID
+
+_LIT( KMdSServerFilename, "MdSServer" );
+
+#ifdef __WINS__
+static const TUint KServerMinHeapSize = 0x10000;
+static const TUint KServerMaxHeapSize = 0x400000; // ~4 megs
+#endif
+
+// FORWARD DECLARATIONS
+class CMdESessionImpl;
+class CMdESchemaItem;
+class CMdEInstanceItem;
+class CMdEQuery;
+class CMdEQueryCriteriaSerialization;
+class CMdCSerializationBuffer;
+class TMdEObject;
+
+// CLASS DECLARATION
+/**
+* RMdEEngineSession
+* This class provides the client-side interface to the server session
+*/
+class RMdEEngineSession : public RSessionBase
+ {
+ public: // Constructors and destructors
+
+ /**
+ * RMdEEngineSession.
+ * Constructs the object.
+ */
+ RMdEEngineSession(CMdESessionImpl& aSession);
+
+ public: // New functions
+
+ /**
+ * Open server.
+ * Connects to the server.
+ * @return Error code.
+ */
+ void OpenL(TRequestStatus& aStatus);
+
+ /**
+ * Cancel server opening.
+ * Cancels server opening.
+ * @return Error code.
+ */
+ void OpenCancel(TRequestStatus& aStatus);
+
+ /**
+ * Connect session to server.
+ * Create a session.
+ * @return Error code.
+ */
+ void ConnectL();
+
+ /**
+ * Shut down session
+ * Performs session shutdown activities in server end
+ * @return Error code.
+ */
+ TInt Shutdown();
+
+ /**
+ * Version.
+ * Gets the version number.
+ * @return The version.
+ */
+ TVersion Version() const;
+
+ /**
+ * Adds an event definition to the database.
+ * @param aNameSpaceId id of the namespace to add the definition into
+ * @param aName name of the event
+ */
+ void DoAddEventDefL(const TDefId aNameSpaceId, const TDesC &aName );
+
+ /**
+ * Adds a relation definition to the database.
+ * @param aNameSpaceId id of the namespace to add the definition into
+ * @param aName name of the relation
+ */
+ void DoAddRelationDefL(const TDefId aNameSpaceId, const TDesC &aName );
+
+ /**
+ * Adds items to the database.
+ * @param aSerializedBuffer items serialized in a buffer
+ * @param aResultBuffer on return contains serialized results
+ */
+ void DoAddItemsL( const CMdCSerializationBuffer& aSerializedBuffer, CMdCSerializationBuffer& aResultBuffer );
+
+ /**
+ * Adds items to the database asynchronously.
+ * @param aSerializedBuffer items serialized in a buffer
+ * @param aResultBuffer on return contains serialized results
+ * @param aStatus the asynchronous response status
+ */
+ void DoAddItemsAsync( const CMdCSerializationBuffer& aSerializedBuffer, CMdCSerializationBuffer& aResultBuffer, TRequestStatus& aStatus );
+
+ /**
+ * Removes items from the database.
+ * @param aRemoveId item ids serialized in a buffer
+ * @param aSuccessfulId on return contains ids of successfully remove items in a serialization buffer.
+ */
+ void DoRemoveItemsL( const CMdCSerializationBuffer& aRemoveId, CMdCSerializationBuffer& aSuccessfulId );
+
+ /**
+ * Removes items from the database asynchronously.
+ * @param aRemoveId item ids serialized in a buffer
+ * @param aSuccessfulId on return contains ids of successfully remove items in a serialization buffer.
+ * @param aStatus the asynchronous response status
+ */
+ void DoRemoveItemsAsync( const CMdCSerializationBuffer& aRemoveId, CMdCSerializationBuffer& aSuccessfulId, TRequestStatus& aStatus );
+
+ /**
+ * Updates items in the database.
+ * @param aSerializedBuffer serialized buffer of updated items
+ * @param aResultBuffer on return contains serialized results
+ */
+ void DoUpdateItemsL( const CMdCSerializationBuffer& aSerializedBuffer, CMdCSerializationBuffer& aResultBuffer );
+
+ /**
+ * Updates items in the database asynchronously.
+ * @param aSerializedBuffer serialized buffer of updated items
+ * @param aResultBuffer on return contains serialized results
+ * @param aStatus the asynchronous response status
+ */
+ void DoUpdateItemsAsync( const CMdCSerializationBuffer& aSerializedBuffer, CMdCSerializationBuffer& aResultBuffer, TRequestStatus& aStatus );
+
+ /**
+ * Finds objects synchronously.
+ * @param aQuery the query
+ * @param aSerializationBuffer query criterias serialiazed in a buffer
+ * @param aLocktype how the object should be locked during the query
+ * @param aNotifyCount count indicating how often the client should be notified
+ */
+ CMdCSerializationBuffer* DoFindSyncLC(
+ const CMdEQuery* aQuery,
+ const CMdEQueryCriteriaSerialization& aSerializationBuffer,
+ TMdCQueryLockType aLocktype,TUint32 aNotifyCount);
+
+ /**
+ * Finds objects asynchronously
+ * @param
+ * @param
+ * @param
+ * @param aAsyncStatus the asynchronous response status
+ */
+ void DoFindAsync(
+ TUint32 aQueryId,
+ const CMdEQueryCriteriaSerialization& aSerializationBuffer,
+ TPckgBuf<TInt>* aSizeBuf,
+ TRequestStatus& aAsyncStatus,
+ TUint32 aNotifyCount = KMdEQueryDefaultMaxCount);
+
+ /**
+ * Continues a step in an existing asynchronous find
+ * @param
+ * @param
+ * @param aAsyncStatus the asynchronous response status
+ */
+ void DoFindContinue(
+ const CMdEQuery* aQuery,
+ TPckgBuf<TInt>* aSizeBuf,
+ TRequestStatus& aAsyncStatus );
+
+ /**
+ * Cancels ongoing find
+ */
+ void DoFindCancelL( const CMdEQuery* aQuery );
+
+ /**
+ * Registers for notifications
+ */
+ void DoRegisterL( TInt aId,
+ TUint32 aType,
+ CMdCSerializationBuffer& aBuffer,
+ TDefId aNamespaceDefId );
+
+ /**
+ * Continues registration for more notifications
+ */
+ void DoListen( TInt aId,
+ TPckgBuf<TInt>* aSizeBuf,
+ TRequestStatus& aAsyncStatus );
+
+ /**
+ * Unregisters observer for no more notifications
+ */
+ void DoUnregisterL( TInt aId );
+
+ /**
+ * DoLoadSchemaL.
+ * Gets find results to client
+ * @param aHandle handle to shared memory chunk
+ */
+ void DoLoadSchemaL( TInt& aHandle );
+
+ /**
+ * DoGetDataL.
+ * Gets data to client.
+ * @param aQuery the query ID
+ * @param aSize number of bytes to reserve for hierarchy
+ * @param aRelatedCommand command related to which the data is obtained.
+ * @param aExtraData an optional id specifying the identity of the data to obtain.
+ */
+ void DoGetDataL( const CMdEQuery* aQuery,
+ CMdCSerializationBuffer* aResultBuffer,
+ TUint32 aRelatedCommand, TUint32 aExtraData = 0 );
+ /**
+ * DoGetDataL.
+ * Gets data from the server for a notifier AO
+ * @param aBuffer The data buffer to read to from the server
+ * @param aId The id of the observer requesting the data
+ */
+ void DoGetDataL( CMdCSerializationBuffer& aBuffer, TUint32 aId );
+
+ void DoCheckObjectL( CMdCSerializationBuffer& aObjectBuffer,
+ const TDesC& aUri, TDefId aNamespaceDefId );
+
+ void DoCheckObjectL( CMdCSerializationBuffer& aObjectBuffer,
+ TItemId aId, TDefId aNamespaceDefId );
+
+ void DoCheckObjectL( CMdCSerializationBuffer& aObjectsBuffer,
+ const CMdCSerializationBuffer& aObjectIdsBuffer,
+ TDefId aNamespaceDefId );
+
+ /**
+ * Commits changes to objects to database
+ * @param aCodedObjects objects in coded form
+ */
+ void DoCommitObjectsL( const CMdCSerializationBuffer& aCodedObjects );
+
+ /**
+ * Cancels changes to object to database
+ * @param aCodedId id of locked object in coded form
+ */
+ void DoCancelObjectL( CMdCSerializationBuffer& aRemoveId );
+
+ /**
+ * Imports schema from a file.
+ * @param aFilename schema file name
+ */
+ void DoImportSchemaL( const TDesC& aFileName );
+
+ /**
+ * Imports metadata from a file.
+ * @param aFilename metadata file name
+ */
+ TInt DoImportMetadataL( const TDesC& aFileName );
+
+ /**
+ * Imports metadata from a file asynchronously.
+ * @param aFilename metadata file name
+ * @param aResult packaged error code
+ * @param aStatus asynchronous request status
+ */
+ void DoImportMetadata( const TDesC& aFileName, TPckgBuf<TInt>& aResult, TRequestStatus& aStatus );
+
+ /**
+ * Exports metadata into a file.
+ * @param aFilename metadata file name
+ * @param aItems items to export in a serialized buffer
+ */
+ void DoExportMetadataL( const TDesC& aFileName, const CMdCSerializationBuffer& aItems );
+
+ /**
+ * Exports metadata into a file asynchronously.
+ * @param aFilename metadata file name
+ * @param aItems items to export in a serialized buffer
+ * @param aStatus asynchronous request status
+ */
+ void DoExportMetadataL( const TDesC& aFileName, const CMdCSerializationBuffer& aItems,
+ TRequestStatus& aStatus);
+
+ /**
+ * Add memory card with given media ID and current time. If memory card
+ * already exist only time is updated to current time.
+ * @param memory card's media ID
+ */
+ void DoAddMemoryCard(TUint32 aMediaId);
+
+ /**
+ * Get latest memory card's media ID.
+ * @param returned memory card's media ID
+ * @return EFalse if there is no any memory cards added
+ */
+ TBool DoGetMemoryCard(TUint32& aMediaId);
+
+ /**
+ * Check if there is memory card with given media ID.
+ * @param memory card's media ID
+ * @param returned boolean if memory card exists or not
+ * @return EFalse if there was error
+ */
+ TBool DoCheckMemoryCard(TUint32 aMediaId, TBool& aExist);
+
+ /**
+ * Set media's media ID, drive and present state.
+ *
+ * @param media's media ID
+ * @param media's drive
+ * @param media's present state
+ */
+ void DoSetMediaL(TUint32 aMediaId, TChar aDrive, TBool aPresentState);
+
+ /**
+ * Get media's drive and present state by media ID.
+ *
+ * @param aMediaId media's media ID
+ * @param aDrive returned media's drive
+ * @param aPresent returned media's present state
+ * @return EFalse if there is no media with matching media ID in DB
+ */
+ TBool DoGetMediaL(TUint32 aMediaId, TChar& aDrive,
+ TBool& aPresentState);
+
+ /**
+ * Get present medias' media IDs and drives.
+ *
+ * @param aMedias returned present medias' media IDs and drives
+ */
+ void DoGetPresentMediasL(RArray<TMdEMediaInfo>& aMedias);
+
+ /**
+ * Set file to present state.
+ *
+ * @param aMediaId file's media ID
+ * @param aUri file's URI
+ * @param aFileInfo file's modified date and byte size
+ *
+ * @return ETrue if file existed and changing to present state was
+ * successful
+ */
+ TBool DoSetFileToPresent(TUint32 aMediaId, const TDesC& aUri,
+ TMdSFileInfo& aFileInfo);
+
+ /**
+ * Set files to present state.
+ *
+ * @param aMediaIdAndCount files' media ID and file count
+ * @param aUris serialized files' URIs
+ * @param aFileInfos serialized files' modified dates and byte sizes
+ * @param aResults serialized values from TFilePresentStates
+ *
+ * @return Error code
+ */
+ TInt DoSetFilesToPresent(TMdSMediaIdAndCount aMediaIdAndCount,
+ const TDes8& aUris, const TDes8& aFileInfos, TDes8& aResults);
+
+
+ /**
+ * Set all files, which media ID is given, to not present state.
+ *
+ * @param aMediaId media ID
+ * @param aStartUp is start up or normal unmount
+ */
+ void DoSetFilesToNotPresent(TUint32 aMediaId, TBool aStartUp);
+
+ /**
+ * Remove all objects, which are in not present state, with given media ID
+ *
+ * @param aMediaId media ID
+ * @param aStartUp is start up or normal mount
+ */
+ void DoRemoveFilesNotPresent(TUint32 aMediaId, TBool aStartUp);
+
+ /**
+ * Get schema version's major and minor version.
+ *
+ * @param aMajorVersion returned major version
+ * @param aMinorVersion returned minor version
+ */
+ void DoGetSchemaVersionL(TInt& aMajorVersion, TInt& aMinorVersion);
+
+ /**
+ * Set object to "present" state by GUID.
+ *
+ * @param aGuidHigh Guid's high part
+ * @param aGuidLow Guid's low part
+ *
+ * @leave KErrNotFound MdE can't find object in "not present" state
+ * with matching GUID
+ *
+ */
+ void DoSetObjectToPresentByGuidL(
+ const TInt64& aGuidHigh, const TInt64& aGuidLow );
+
+ /**
+ * Set global harvester prioritization chunk to MdE Server. There can
+ * be only one chunk and observer at once. If MdE Server already
+ * contains active observer, old observer completes with KErrAbort,
+ * chunk is always changed to this new one. Observer is added using
+ * DoAddHarvestingPrioritizationObserver.
+ * @param aHandle the handle of global chunk that will receive object
+ * URIs which need to be prioritize
+ */
+ void DoSetHarvestingPrioritizationChunkL( RHandleBase aHandle );
+
+ /**
+ * Add harvester prioritization observer to MdE Server. There can be
+ * only one chunk and observer at once. If MdE Server already contains
+ * active observer, aStatus completes with KErrAlreadyExists. When MdE
+ * Server needs prioritize object, aStatus completes with KErrNone.
+ * @param aStatus the asynchronous response status which is changed
+ * when there is object URIs to be prioritize
+ */
+ void DoAddHarvestingPrioritizationObserver( TRequestStatus& aStatus );
+
+ /**
+ * Cancel harvester prioritization observer from MdE Server.
+ * @return If MdE Server doesn't have outstanding observer method
+ * returns KErrNotFound, otherwise KErrNone is returned.
+ */
+ TInt DoCancelHarvestingPrioritizationObserver();
+
+ /**
+ * Change path of objects.
+ *
+ * @param aOldPath old path
+ * @param aNewPath new path
+ * @param aStatus the asynchronous response status which is changed when
+ * URIs are changed
+ */
+ void DoChangePath( const TDesC& aOldPath, const TDesC& aNewPath,
+ TRequestStatus& aStatus );
+
+ /**
+ * Change C-drive media id to MdS_Medias table and update it to all objects.
+ */
+ void DoChangeCDriveMediaId();
+
+ /**
+ * Set "binary composing to file" pending flag to objects
+ *
+ * @param aObjectId object IDs
+ */
+ void DoSetPendingL( const RArray<TItemId>& aObjectIds );
+
+ /**
+ * Reset "binary composing to file" pending flag from objects
+ *
+ * @param aObjectId object IDs
+ */
+ void DoResetPendingL( const RArray<TItemId>& aObjectIds );
+
+ /**
+ * Get count of objects with "binary composing to file" pending flag
+ *
+ * @param aObjectDef object definition which limits what objects are
+ * returned or NULL when all objects are returned
+ *
+ * @return count of objects
+ */
+ TInt DoGetPendingCount( const CMdEObjectDef* aObjectDef );
+
+ /**
+ * Get IDs from objects with "binary composing to file" pending flag
+ *
+ * @param aObjectDef object definition which limits what objects are
+ * returned or NULL when all objects are returned
+ * @param aObjectIdCount count of returned object IDs
+ * @param aObjectIdBuffer serialized buffer of returned object IDs
+ *
+ * @return If returned value is > 0, buffer is not large enough for
+ * objects ID from DB, otherwise error code is returned.
+ */
+ TInt DoGetPending( const CMdEObjectDef* aObjectDef,
+ TInt& aObjectIdCount,
+ CMdCSerializationBuffer& aObjectIdBuffer );
+
+ /**
+ * Resets DB
+ * only for internal purpose and DEBUG ONLY!!
+ */
+ void DoResetDBL();
+
+ /**
+ * Check if there was error in client-server communication and notify
+ * session if needed.
+ */
+ void NotifySessionError( TInt aError );
+
+ private: // Data
+ CMdESessionImpl& iSession;
+
+ RProcess iServerProcess;
+
+ TBool iIsSessionOpen;
+ TBool iIsSessionProcessOpen;
+ };
+
+#endif // __MDEENGINESESSION_H__