--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/dm/treemodule/inc/nsmldmcommandbuffer.h Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,302 @@
+/*
+* Copyright (c) 2005 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: DM tree etc.
+*
+*/
+
+
+#ifndef __NSMLDMCOMMANDBUFFER_H
+#define __NSMLDMCOMMANDBUFFER_H
+
+#include <e32std.h>
+#include <e32base.h>
+#include <smldmadapter.h>
+#include <nsmldmtreedbclient.h>
+#include "nsmldmtreedtd.h"
+
+class MNSmlDmModuleCallBack;
+class CNSmlDmModule;
+class CNSmlDmLinkCallback;
+class CNSmlDmDDF;
+
+_LIT8(KNSmlDmProperty, "?prop=" );
+
+// ===========================================================================
+// Commands
+// ===========================================================================
+/**
+* Container class for a DM command buffering.
+* This class is instantiated for each command
+* inside the atomic. The elements are in linked list
+*
+* @since
+*/
+class CNSmlDmCommands : public CBase
+ {
+
+ public:
+ /**
+ * Pointer to next elelmnt
+ */
+ CNSmlDmCommands *iNext;
+
+ /**
+ * URI of the command
+ */
+ HBufC8* iURI;
+
+ /**
+ * Target URI of the command in case of copy
+ */
+ HBufC8* iTargetURI;
+
+ /**
+ * Mime type of the item
+ */
+ HBufC8* iType;
+
+ /**
+ * Data of the item in case of add, replace or execute
+ */
+ HBufC8* iObject;
+
+ /**
+ * Type of command (Add,Get,...)
+ */
+ TNSmlDmCmdType iCmdType;
+
+ /**
+ * Reference to status element
+ */
+ TInt iStatusRef;
+
+ /**
+ * Reference to result element
+ */
+ TInt iResultsRef;
+
+ /**
+ * Status code
+ */
+ TInt iStatusCode;
+
+ /**
+ * Result
+ */
+ CBufBase* iResult;
+
+ /**
+ * Format
+ */
+ HBufC8* iFormat;
+
+ /**
+ * Indicates that the status is got to current command
+ */
+ TBool iGotStatus;
+
+ /**
+ * Pointer to callback
+ */
+ CNSmlDmLinkCallback *iCallback;
+
+ public:
+
+ /**
+ * Constructor
+ */
+ CNSmlDmCommands();
+
+ /**
+ * Destructor
+ */
+ virtual ~CNSmlDmCommands();
+ };
+
+
+// ===========================================================================
+// CNSmlDmCommandBuffer
+// ===========================================================================
+/**
+* Class for handling bufered commands inside the atomic
+*
+* @since
+*/
+class CNSmlDmCommandBuffer : public CBase
+ {
+ public:
+
+ /**
+ * Two-phased constructor.
+ * @return Pointer to newly created module instance
+ */
+ static CNSmlDmCommandBuffer* NewL(CNSmlDmModule& aDmModule);
+
+ /**
+ * Destructor
+ */
+ virtual ~CNSmlDmCommandBuffer();
+
+
+ /**
+ * Add operation in DM protocoll for buffering
+ * @param aURI Target URI in command
+ * @param aObject Data
+ * @param aType Mime type
+ * @param aStatusRef Reference to status element
+ */
+ void AddObjectL(const TDesC8& aURI, const TDesC8& aObject,
+ const TDesC8& aType, TInt aStatusRef );
+
+ /**
+ * Replace operation in DM protocoll for buffering
+ * @param aURI Target URI in command
+ * @param aObject Data
+ * @param aType Mime type
+ * @param aStatusRef Reference to status element
+ * or not
+ */
+ void UpdateObjectL( const TDesC8& aURI, const TDesC8& aObject,
+ const TDesC8& aType, TInt aStatusRef);
+
+ /**
+ * Delete operation in DM protocoll for buffering
+ * @param aURI Target URI in command
+ * @param aStatusRef Reference to status element
+ */
+ void DeleteObjectL(const TDesC8& aURI, TInt aStatusRef );
+
+ /**
+ * Get operation in DM protocoll for buffering
+ * @param aURI Target URI in command
+ * @param aType Mime type
+ * @param aResultsRef Reference to result element
+ * @param aStatusRef Reference to status element
+ */
+ void FetchObjectL(const TDesC8& aURI, const TDesC8& aType,
+ TInt aResultsRef, TInt aStatusRef );
+
+ /**
+ * Execute operation in DM protocoll for buffering
+ * @param aURI Target URI in command
+ * @param aObject Data
+ * @param aType Mime type
+ * @param aStatusRef Reference to status element
+ */
+ void ExecuteObjectL( const TDesC8& aURI, const TDesC8& aObject,
+ const TDesC8& aType, TInt aStatusRef);
+
+ /**
+ * Copy operation in DM protocoll for buffering
+ * @param aTargetURI Target URI in command
+ * @param aSourceURI Source URI in command
+ * @param aType Mime type
+ * @param aStatusRef Reference to status element
+ */
+ void CopyObjectL( const TDesC8& aTargetURI,const TDesC8& aSourceURI,
+ const TDesC8& aType, TInt aStatusRef);
+
+
+ /**
+ * Commits the atomic, i.e. executed the commands in the buffer
+ * @param aDDF Reference to DDF module
+ */
+ void CommitL( CNSmlDmDDF& aDDF);
+
+ /**
+ * Rollbacks the atomic, i.e. rollbacks the commands in the buffer
+ * @param aDDF Reference to DDF module
+ */
+ void RollBackL(CNSmlDmDDF& aDDF);
+
+ /**
+ * Check if this command has came inside atomic
+ * @param aStatusRef Reference to status element
+ * @return ETrue if status ref is found from buffer
+ */
+ TBool CheckStatusRef(TInt aStatusRef);
+
+ /**
+ * Check if this command has came inside atomic
+ * @param aResultRef Reference to result element
+ * @return ETrue if resultref is found from buffer
+ */
+ TBool CheckResultsRef(TInt aResultsRef);
+
+ /**
+ * Sets the status of command pointed by aStatusRef
+ * @param aStatusRef Reference to status element
+ * @param aStatusCode Status code to be set
+ */
+ void SetStatus(TInt aStatusRef, TInt aStatusCode);
+
+ /**
+ * Sets the result of command pointed by aResultRef
+ * @param aResultRef Reference to result element
+ * @param aObject Result data to be set
+ * @param aType Mime type of the object
+ * @param aFormat Format of the node
+ */
+ void SetResultsL(TInt aResultsRef, const CBufBase& aObject,
+ const TDesC8& aType, const TDesC8& aFormat );
+
+ /**
+ * check whether the atomic command is with Get
+ * @param None
+ * @return ETrue if the atomic command is with Get or else EFalse
+ */
+ TBool IsGetWithAtomic();
+
+ private:
+
+ /**
+ * Sends the statuses and results to caller from the command buffer.
+ */
+ void SendStatusAndResultCodesL();
+
+ /**
+ * Check if parent node is deleted because of failure in atomic
+ * @param aURI URI of the node
+ * @return ETrue if parent of node is deleted
+ */
+ TBool ParentNodeDeletedL(const TDesC8& aURI);
+
+ /**
+ * Constructor
+ * @param aDmModule Reference to caller
+ */
+ CNSmlDmCommandBuffer(CNSmlDmModule& aDmModule);
+
+ /**
+ * Atomic failure checking
+ * @return ETrue if some command failed or status missing
+ */
+ TBool AtomicFailed();
+
+ /**
+ * Change statuses to correct atomic statuses.
+ */
+ void ChangeAtomicStatuses();
+
+ private:
+ CNSmlDmModule& iDmModule;
+ CNSmlDmCommands* iCommandBuffer;
+ TBool iAtomicFailed;
+ };
+
+
+
+
+
+#endif // __NSMLDMCOMMANDCUFFER_H
\ No newline at end of file