applicationmanagement/omascomoadapter/inc/omascomoadapter.h
changeset 0 3ce708148e4d
child 23 c4687ff85147
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applicationmanagement/omascomoadapter/inc/omascomoadapter.h	Thu Dec 17 08:40:12 2009 +0200
@@ -0,0 +1,851 @@
+/*
+* Copyright (c) 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:  Implementation of applicationmanagement components
+ *
+*/
+
+
+#ifndef __OMASCOMOADAPTER_H__
+#define __OMASCOMOADAPTER_H__
+
+// ------------------------------------------------------------------------------------------------
+// Includes
+// ------------------------------------------------------------------------------------------------
+#include <e32base.h>
+#include <smldmadapter.h>
+#include "omascomoadapterdb.h"
+
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+#include <dmtree.h>
+#else
+#include "nsmldmtreedbclient.h"
+#endif
+
+#include "ApplicationManagementClient.h"
+
+namespace NApplicationManagement
+    {
+
+    const TUint KAMAdapterImplUid = 0x20021336;
+    
+    const TInt KMaxSizeString = 256;
+
+    // the DDF version must be changed if any changes in DDF structure ( built in DDFStructureL() function )
+    _LIT8( KAMDDFVersion, "1.0" );
+
+    _LIT8( KAMTextPlain, "text/plain" );
+
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+    _LIT8( KAMNodeName, "./SCOMO" );
+#else
+    _LIT8( KAMNodeName, "SCOMO" );
+#endif
+    _LIT8( KAMNodeDescription, "This node is the root node for all application management functionality" );
+
+    _LIT8( KAMInventoryNodeName, "Inventory" );
+    _LIT8( KAMInventoryNodeDescription, "This node is start node of application inventory" );
+
+    _LIT8( KAMDeliveredNodeName, "Delivered" );
+    _LIT8( KAMDeliveredNodeDescription, "This is node under which applications that are delivered but not installed are found." );
+
+    _LIT8( KAMDeployedNodeName, "Deployed" );
+    _LIT8( KAMDeployedNodeDescription, "This is a node under which deployed applications are found" );
+
+    _LIT8( KAMDeliveredDynaNodeDescription, "This dynamic node is placeholder applications that are in Delivered state" );
+
+    _LIT8( KAMPkgIDNodeName, "PkgID" );
+    _LIT8( KAMPkgIDNodeDescription, "This leaf node holds an package identifier for an application" );
+
+
+    _LIT8( KAMIDNodeName, "ID" );
+    _LIT8( KAMIDNodeDescription, "This leaf node holds an identifier for an deployment component" );
+    
+    _LIT8( KAMPkgIDRefNodeName, "PkgIDRef" );
+    _LIT8( KAMPkgIDRefNodeDescription, "This leaf node holds an identifier for an deployment component" );
+
+    _LIT8( KAMNameNodeName, "Name" );
+    _LIT8( KAMNameNodeDescription, "This leaf node holds name of an application" );
+
+    _LIT8( KAMVersionNodeName, "Version" );
+    _LIT8( KAMVersionNodeDescription, "This leaf node holds the version of an application" );
+
+    _LIT8( KAMStateValueNodeName, "State" );
+    _LIT8( KAMStateValueNodeDescription, "This leaf node holds the state value of an application (active/inactive)" );
+
+    _LIT8( KAMDataNodeName, "Data" );
+    _LIT8( KAMDataNodeDescription, "This leaf node holds the data of an application" );
+
+    _LIT8( KAMDescriptorNodeName, "Descriptor" );
+    _LIT8( KAMDescriptorNodeDescription, "This leaf node holds the possible metadata of an application" );
+
+    _LIT8( KAMOperationsNodeName, "Operations" );
+    _LIT8( KAMOperationsNodeDescription, "This is a node under which operations are found" );
+
+    _LIT8( KAMInstallOptsNodeName, "InstallOpts" );
+    _LIT8( KAMInstallOptsNodeDescription, "This is a node that holds the installation options of an application" );
+
+    _LIT8( KAMDeployedDynaNodeDescription, "This dynamic node is placeholder applications that are in Inactive state" );
+
+    _LIT8( KAMDownloadOperationNodeName, "Download" );
+    _LIT8( KAMDownloadOperationNodeDescription, "Starts the download" );
+
+    _LIT8( KAMConRefNodeName, "ConRef" );
+    _LIT8( KAMConRefNodeDescription, "Holds reference to IAP" );
+
+    _LIT8( KAMLocalOperationsNodeDescription, "This is the root node for local operations" );
+
+    _LIT8( KAMActivateNodeName, "Activate" );
+    _LIT8( KAMActivateNodeDescription, "Exec command causes device to activate an inactive application" );
+
+    _LIT8( KAMDeActivateNodeName, "Deactivate" );
+    _LIT8( KAMDeActivateNodeDescription, "Exec command causes device to stop and deactivate an active application" );
+
+    _LIT8( KAMInstallNodeName, "Install" );
+    _LIT8( KAMInstallNodeDescription, "Exec command causes device to install a delivered application" );
+
+    _LIT8( KAMInstallInactiveNodeName, "InstallInactive" );
+    _LIT8( KAMInstallInactivateNodeDescription, "Exec command causes device to install a delivered application and activate it" );
+
+    _LIT8( KAMUpdateNodeName, "Update" );
+    _LIT8( KAMUpdateNodeDescription, "Exec command causes device to update an application" );
+
+    _LIT8( KAMUpdateAndActivateNodeName, "UpdateAndActivate" );
+    _LIT8( KAMUpdateAndActivateNodeDescription, "Exec command causes device to update an application and activate it" );
+
+    _LIT8( KAMRemoveNodeName, "Remove" );
+    _LIT8( KAMRemoveNodeDescription, "Exec command causes device to remove an application" );
+
+    _LIT8( KAMDownloadNodeName, "Download" );
+    _LIT8( KAMDownloadNodeDescription, "This node is a root node for application download functionality" );
+
+    _LIT8( KAMDownloadAndInstallNodeName, "DownloadInstall" );
+    _LIT8( KAMDownloadAndInstallOperationNodeDescription, "Starts the download and installs component when complete" );
+
+    _LIT8( KAMDownloadAndInstallAndInActivateNodeName, "DownloadInstallInactive" );
+    _LIT8( KAMDownloadAndInstallAndInActivateNodeDescription, "Starts the download and installs and activates component when complete" );
+
+    _LIT8( KAMDownloadAndUpdateNodeName, "DownloadAndUpdate" );
+    _LIT8( KAMDownloadAndUpdateNodeDescription, "Starts the download and installs component when complete" );
+
+    _LIT8( KAMDownloadAndUpdateAndActivateNodeName, "DownloadAndUpdateAndActivate" );
+    _LIT8( KAMDownloadAndUpdateAndActivateNodeDescription, "Starts the download and updates and activates component when complete" );
+
+    _LIT8( KAMDownloadDynaNodeDescription, "This node is a placeholder for identifier of an application that is to be downloaded" );
+
+    _LIT8( KAMURINodeName, "PkgURL" );
+    _LIT8( KAMURINodeDescription, "This leaf node holds the URL from which the application should be downloaded" );
+
+    _LIT8( KAMStatusNodeName, "Status" );
+    _LIT8( KAMStatusNodeDescription, "This leaf node holds the status of the download" );
+
+    _LIT8( KAMDescriptionNodeName, "Description" );
+    _LIT8( KAMDescriptionNodeDescription, "This leaf node holds the description of the download" );
+    
+    _LIT8( KAMPkgTypeNodeName, "PkgType" );
+    _LIT8( KAMPkgTypeNodeDescription, "This leaf node holds the PkgType of the download or delivered" );
+
+#ifdef __AM_LASTERROR_NODE
+    _LIT8( KAMExtNodeName, "Ext" );
+    _LIT8( KAMExtNodeDescription, "Non std extentions are found under this leaf" );
+    _LIT8( KAMLastErrorNodeName, "LastError" );
+    _LIT8( KAMLastErrorDescription, "This leaf node may hold the error" );
+#endif
+
+    _LIT8( KAMDynamicNodeName, "" );
+    _LIT( KAMSeparator16, "/" );
+
+    _LIT8( KAMSeparator8, "/" );
+
+    _LIT8( KAMRootChilds, "Inventory/Download" );
+    _LIT8( KAMInventoryChilds, "Delivered/Deployed" );
+    //_LIT8( KAMLocalOperationsChilds, "Activate/DeActivate/Install/Update/Remove" );
+
+    _LIT8( KAMDownloadDynaChilds, "PkgID/Name/PkgURL/Description/Status/PkgType/Operations" );
+_LIT8( KAMInventoryDynaChilds, "ID/PkgIDRef/Name/Description/Version/State/Operations" );
+_LIT8( KAMDownloadOperationChilds, "Download/DownloadInstall/DownloadInstallInactivate" );
+_LIT8( KAMDeployedOperationChilds, "Activate/Deactivate/Remove" );
+_LIT8( KAMDeliveredOperationChilds, "Install/InstallInactive/Remove" );
+_LIT8( KAMInventoryDeliveredDynaChilds, "PkgID/Data/Name/Description/Status/State/PkgType/Operations" );
+
+    _LIT8( KNSmlDMSCOMOMetaType,"org.openmobilealliance.dm.softwarecomponent.OperationComplete" );
+    _LIT8( KNSmlDMSCOMOMetaFormat, "text/plain" );
+    
+    _LIT8(KDataStart, "<![CDATA[");
+            _LIT8(KDataEnd, "]]>");
+            _LIT8(KResultCodeStart, "<ResultCode>");
+            _LIT8(KResultCodeEnd, "</ResultCode>");
+            _LIT8(KIdentifierStart, "<Identifier>");
+            _LIT8(KIdentifierEnd, "</Identifier>");
+                    
+            
+            _LIT8(KMark, "warning");
+
+    struct TAMCommandBufferElement
+        {
+        TInt iStatusRef;
+        TBuf8<256> iURI;
+        TAMCommandBufferElement(TInt aRef, const TDesC8 &aURI) :
+            iStatusRef(aRef), iURI(aURI)
+            {
+            }
+        };
+
+    typedef RArray<TAMCommandBufferElement> TAMCommandBuffer;
+
+    // ------------------------------------------------------------------------------------------------
+    // CSCOMOAdapter 
+    // ------------------------------------------------------------------------------------------------
+    class CSCOMOAdapter : public CSmlDmAdapter
+        {
+public:
+        static CSCOMOAdapter* NewL(MSmlDmCallback* aDmCallback);
+        static CSCOMOAdapter* NewLC(MSmlDmCallback* aDmCallback);
+
+        virtual ~CSCOMOAdapter();
+
+        /**
+         The function returns current version of the DDF.
+         By asking current DDF versions from adapters DM Module can control
+         possible changes in the data structure and send the changed DDF
+         description to a management server.
+         This function is always called after DDFStructureL.
+         @param aVersion DDF version of the adapter. (filled by the adapter)
+         @publishedPartner
+         @prototype
+         */
+        virtual void DDFVersionL(CBufBase& aVersion);
+
+        /**
+         The function for filling the DDF structure of the adapter
+         This function is only called once, immediately after the adapter is created.
+         @param aDDFObject	Reference to root object. A DM adapter starts filling
+         the data structure by calling AddChildObjectL to the root object and
+         so describes the DDF of the adapter. 
+         @publishedPartner
+         @prototype
+         */
+        virtual void DDFStructureL(MSmlDmDDFObject& aDDF);
+
+        /**
+         The function creates new leaf objects, or replaces data in existing leaf
+         objects. The information about the success of the command should be
+         returned by calling SetStatusL function of MSmlDmCallback callback
+         interface. This makes it possible to buffer the commands.  However, all
+         the status codes for buffered commands must be returned at the latest when
+         the adapter's CompleteOutstandingCmdsL() is called.
+         @param aURI			URI of the object
+         @param aLUID		LUID of the object (if the adapter has earlier returned a
+         LUID to the DM Module). For new objects, this is the LUID
+         inherited through the parent node.
+         @param aObject		Data of the object.
+         @param aType		MIME type of the object
+         @param aStatusRef	Reference to correct command, i.e. this reference
+         must be used when calling the SetStatusL of this command
+         @publishedPartner
+         @prototype
+         */
+        virtual void UpdateLeafObjectL(const TDesC8& aURI,
+                const TDesC8& aLUID, const TDesC8& aObject,
+                const TDesC8& aType, TInt aStatusRef);
+
+        /**
+         The function creates new leaf objects, or replaces data in existing leaf
+         objects, in the case where data is large enough to be streamed. The
+         information about the success of the command should be returned by calling
+         SetStatusL function of MSmlDmCallback callback interface. This makes it
+         possible to buffer the commands.  However, all the status codes for buffered
+         commands must be returned at the latest when the CompleteOutstandingCmdsL()
+         of adapter is called.
+         @param aURI		URI of the object
+         @param aLUID		LUID of the object (if the adapter has earlier returned a
+         LUID to the DM Module). For new objects, this is the LUID
+         inherited through the parent node.
+         @param aStream	Data of the object. Adapter should create write stream
+         and return, when data is written to stream by DM agent,
+         StreamCommittedL() is called by DM engine
+         @param aType		MIME type of the object
+         @param aStatusRef	Reference to correct command, i.e. this reference
+         must be used when calling the SetStatusL of this
+         command.
+         @publishedPartner
+         @prototype
+         */
+        virtual void UpdateLeafObjectL(const TDesC8& aURI,
+                const TDesC8& aLUID, RWriteStream*& aStream,
+                const TDesC8& aType, TInt aStatusRef);
+
+        /**
+         The function deletes an object and its child objects. The SetStatusL
+         should be used as described in UpdateLeafObjectL()
+         @param aURI		URI of the object
+         @param aLUID		LUID of the object (if the adapter have earlier returned
+         LUID to the DM Module).
+         @param aStatusRef	Reference to correct command, i.e. this reference must
+         be used when calling the SetStatusL of this command.
+         @publishedPartner
+         @prototype
+         */
+        virtual void DeleteObjectL(const TDesC8& aURI, const TDesC8& aLUID,
+                TInt aStatusRef);
+
+        /**
+         The function fetches data of a leaf object. The SetStatusL should be used
+         as described in UpdateLeafObjectL(). The data is returned by using the
+         SetResultsL function of MSmlCallback callback interface, and may be streamed.
+         @param aURI			URI of the object
+         @param aLUID			LUID of the object (if the adapter have earlier
+         returned LUID to the DM Module).   
+         @param aType 			MIME type of the object
+         @param aResultsRef	Reference to correct results, i.e. this reference
+         must be used when returning the result by calling
+         the SetResultsL.
+         @param aStatusRef		Reference to correct command, i.e. this reference
+         must be used when calling the SetStatusL of this
+         command.
+         @publishedPartner
+         @prototype
+         */
+        virtual void FetchLeafObjectL(const TDesC8& aURI,
+                const TDesC8& aLUID, const TDesC8& aType, TInt aResultsRef,
+                TInt aStatusRef);
+
+        /**
+         The function fetches the size of the data of a leaf object. The size is
+         in bytes, and must reflect the number of bytes that will be transferred
+         when the framework calls FetchLeafObjectL. The SetStatusL should be used
+         as described in FetchLeafObjectL(). The size value is returned by using
+         the SetResultsL function of MSmlCallback callback interface, and must be
+         a decimal integer expressed as a string, eg. "1234".
+         Results from this call MUST NOT be streamed.
+         @param aURI			URI of the object
+         @param aLUID			LUID of the object (if the adapter have earlier
+         returned LUID to the DM Module).   
+         @param aType 			MIME type of the object
+         @param aResultsRef	Reference to correct results, i.e. this reference
+         must be used when returning the result by calling
+         the SetResultsL.
+         @param aStatusRef		Reference to correct command, i.e. this reference
+         must be used when calling the SetStatusL of this
+         command.
+         @publishedPartner
+         @prototype
+         */
+        virtual void FetchLeafObjectSizeL(const TDesC8& aURI,
+                const TDesC8& aLUID, const TDesC8& aType, TInt aResultsRef,
+                TInt aStatusRef);
+        /**
+         The function fetches URI list. An adapter returns the list of URI segments
+         under the given URI be separated by slash ("/"). The URI segment names for
+         new objects must be given by the adapter.
+         The list is returned by calling the SetResultsL function of MSmlCallback
+         callback interface.	Results from this call MUST NOT be streamed.
+         @param aParentURI					URI of the parent object
+         @param aParentLUID				LUID of the parent object (if the
+         adapter have earlier returned LUID to
+         the DM Module).   
+         @param aPreviousURISegmentList	URI list with mapping LUID information,
+         which is known by DM engine. An adapter
+         can use this information when verifying
+         if old objects still exists. An adapter
+         also knows what objects are new to DM
+         engine and can provide LUID mapping for
+         them. aPreviousURISegmentList parameter
+         (see above) helps to recognise new
+         objects.
+         @param aResultsRef				Reference to correct results, i.e. this
+         reference must be used when returning
+         the result by calling the SetResultsL.
+         @param aStatusRef					Reference to correct command, i.e. this
+         reference must be used when calling the
+         SetStatusL of this command.
+         @publishedPartner
+         @prototype
+         */
+        virtual void ChildURIListL(const TDesC8& aURI, const TDesC8& aLUID,
+                const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                TInt aResultsRef, TInt aStatusRef);
+
+        /**
+         The function adds node object. In some cases an implementation of the
+         function may be empty function, if the node object does not need concrete
+         database update. Still this function may be helpful to an adapter, i.e. in
+         passing mapping LUID of the node to DM Module. The SetStatusL should be
+         used as described in UpdateLeafObjectL()
+         @param aURI			URI of the object
+         @param aParentLUID	LUID of the parent object (if the adapter have
+         earlier returned LUID to the DM Module).   
+         @param aStatusRef		Reference to correct command, i.e. this reference
+         must be used when calling the SetStatusL of this
+         command.
+         @publishedPartner
+         @prototype
+         */
+        virtual void AddNodeObjectL(const TDesC8& aURI,
+                const TDesC8& aParentLUID, TInt aStatusRef);
+
+        /**
+         The function implements execute command. The information about the success
+         of the command should be returned by calling SetStatusL function of
+         MSmlDmCallback callback interface. This makes it possible to buffer the
+         commands.
+         However, all the status codes for buffered commands must be returned at
+         the latest when the CompleteOutstandingCmdsL() of adapter is called.
+         @param aURI			URI of the command
+         @param aLUID			LUID of the object (if the adapter have earlier
+         returned LUID to the DM Module).   
+         @param aArgument		Argument for the command
+         @param aType			MIME type of the object 
+         @param aStatusRef		Reference to correct command, i.e. this reference
+         must be used when calling the SetStatusL of this
+         command.
+         @publishedPartner
+         @prototype
+         */
+        virtual void
+                ExecuteCommandL(const TDesC8& aURI, const TDesC8& aLUID,
+                        const TDesC8& aArgument, const TDesC8& aType,
+                        TInt aStatusRef);
+
+        /**
+         The function implements execute command. The information about the
+         success of the command should be returned by calling SetStatusL function
+         of MSmlDmCallback callback interface. This makes it possible to buffer the
+         commands.
+         However, all the status codes for buffered commands must be returned at
+         the latest when the CompleteOutstandingCmdsL() of adapter is called.
+         @param aURI			URI of the command
+         @param aLUID			LUID of the object (if the adapter have earlier
+         returned LUID to the DM Module).   
+         @param aStream		Argument for the command. Adapter should create
+         write stream and return, when data is written to
+         stream by DM agent, StreamCommittedL() is called by
+         DM engine
+         @param aType			MIME type of the object 
+         @param aStatusRef		Reference to correct command, i.e. this reference
+         must be used when calling the SetStatusL of this
+         command.
+         @publishedPartner
+         @prototype
+         */
+        virtual void ExecuteCommandL(const TDesC8& aURI, const TDesC8& aLUID,
+                RWriteStream*& aStream, const TDesC8& aType, TInt aStatusRef);
+
+        /**
+         The function implements copy command. The information about the success of
+         the command should be returned by calling SetStatusL function of
+         MSmlDmCallback callback interface. This makes it possible to buffer the
+         commands.
+         However, all the status codes for buffered commands must be returned at
+         the latest when the CompleteOutstandingCmdsL() of adapter is called.
+         @param aTargetURI		Target URI for the command
+         @param aSourceLUID	LUID of the target object (if one exists, and if the adapter
+         has	earlier returned a LUID to the DM Module).   
+         @param aSourceURI		Source URI for the command
+         @param aSourceLUID	LUID of the source object (if the adapter has
+         earlier returned a LUID to the DM Module).   
+         @param aType			MIME type of the objects
+         @param aStatusRef		Reference to correct command, i.e. this reference
+         must be used when calling the SetStatusL of this
+         command.
+         @publishedPartner
+         @prototype
+         */
+        virtual void CopyCommandL(const TDesC8& aTargetURI,
+                const TDesC8& aTargetLUID, const TDesC8& aSourceURI,
+                const TDesC8& aSourceLUID, const TDesC8& aType,
+                TInt aStatusRef);
+
+        /**
+         The function indicates start of Atomic command.
+         @publishedPartner
+         @prototype
+         */
+        virtual void StartAtomicL();
+
+        /**
+         The function indicates successful end of Atomic command. The adapter
+         should commit all changes issued between StartAtomicL() and
+         CommitAtomicL()
+         @publishedPartner
+         @prototype
+         */
+        virtual void CommitAtomicL();
+
+        /**
+         The function indicates unsuccessful end of Atomic command. The adapter
+         should rollback all changes issued between StartAtomicL() and
+         RollbackAtomicL(). If rollback fails for a command, adapter should use
+         SetStatusL() to indicate it.
+         @publishedPartner
+         @prototype
+         */
+        virtual void RollbackAtomicL();
+
+        /**
+         Returns ETrue if adapter supports streaming otherwise EFalse.
+         @param aItemSize size limit for stream usage
+         @return TBool ETrue for streaming support
+         @publishedPartner
+         @prototype
+         */
+        virtual TBool StreamingSupport(TInt& aItemSize);
+
+        /**
+         Called when stream returned from UpdateLeafObjectL or ExecuteCommandL has
+         been written to and committed. Not called when fetching item.
+         @publishedPartner
+         @prototype
+         */
+#ifdef __TARM_SYMBIAN_CONVERGENCY	
+        virtual void StreamCommittedL( RWriteStream& aStream );
+#else
+        virtual void StreamCommittedL();
+#endif	
+        /**
+         The function tells the adapter that all the commands of the message that
+         can be passed to the adapter have now been passed.  This indciates that
+         the adapter must supply status codes and results to any buffered commands.
+         This must be done at latest by the time this function returns.
+         This function is used at the end of SyncML messages, and during processing
+         of Atomic.   In the case of Atomic processing, the function will be
+         followed by a call to CommitAtomicL or RollbackAtomicL.
+         @publishedPartner
+         @prototype
+         */
+        virtual void CompleteOutstandingCmdsL();
+
+private:
+        CSCOMOAdapter(TAny* aDmCallback);
+        void ConstructL();
+        TInt DesToIntL(const TDesC8& aLuid);
+        HBufC8* IntToDes8LC(const TInt aLuid);
+
+        TBool CheckStateL(const TDeploymentComponent &aComp,
+                const TDesC8& aURI);
+        TBool CheckStateL(const TDesC8& aURI, const TDesC8& aLUID);
+        /**
+         * UpdateFlagFromMapping Maps a node name to internal attribute flag that
+         * 	is used by server to identify to data 
+         * @param aMapping	The SyncML node name
+         * @return  TDeplCompAttrType the attribute type
+         */
+        TDeplCompAttrType UpdateFlagFromMapping(const TDesC8& aMapping);
+
+        /**
+         * IdListL Looks up the given state user ids of deployment components,
+         * 	and places them to currentList in the format specified by SyncML spec 
+         * @param aState	The deployment component state in which we are interested
+         * @param aCurrentList The buffer where the results are placed
+         * @param aAppend Does the list possibly contain some items already
+         * @return  TError EOk if successful
+         */
+        TError IdListL(TDeploymentComponentState aState,
+                CBufBase &aCurrentList, TBool aAppend = EFalse);
+
+        /**
+         * DeliverOrDownloadL Depending on aURI, creates new delivery or download component
+         *
+         * @param aUserId	The name of dynamic node.
+         * @param aURI		The full URI
+         * @param aCnt		Count of URI segments
+         * @param aParentMapping	The parent data
+         * @param aStatus A reference to the error which will be set the status of the operation
+         * @return  TError EOk if successful
+         */
+        void DeliverOrDownloadL(const TDesC8 &aUserId, const TDesC8 &aURI,
+                TInt aCnt, const TDesC8 &aParentMapping,
+                MSmlDmAdapter::TError &aStatus);
+
+        /**
+         * Fills the node info in ddf structure
+         */
+        void
+                FillNodeInfoL(MSmlDmDDFObject& aNode,
+                        TSmlDmAccessTypes aAccTypes,
+                        MSmlDmDDFObject::TOccurence aOccurrence,
+                        MSmlDmDDFObject::TScope aScope,
+                        MSmlDmDDFObject::TDFFormat aFormat,
+                        const TDesC8& aDescription);
+
+        /**
+         * Fills the node info in ddf structure, without default mime type
+         */
+        void
+                FillNodeInfoNoDefaultMimeL(MSmlDmDDFObject& aNode,
+                        TSmlDmAccessTypes aAccTypes,
+                        MSmlDmDDFObject::TOccurence aOccurrence,
+                        MSmlDmDDFObject::TScope aScope,
+                        MSmlDmDDFObject::TDFFormat aFormat,
+                        const TDesC8& aDescription);
+
+        TBool IsImage(const TDesC8& aMime);
+        /**
+         Calls Callback().SetResultsL()
+         */
+        void SetResultsL(TInt aResultsRef, CBufBase& aObject,
+                const TDesC8& aType);
+        /**
+         Calls Callback().SetStatusL()
+         */
+        void SetStatusL(TInt aStatusRef, MSmlDmAdapter::TError aErrorCode);
+        //	TInt FindBuffered( const TDesC8 &aURI ) ;
+        RApplicationManagement &SessionL();
+        TDeploymentComponentState StateL(const TDesC8& aURI);
+
+        void CheckStateChangesL();
+        void CheckStateChangesInternalL();
+
+        TPtrC8 URISegsUpTo(const TDesC8& aURI, TInt aUpTo,
+                TBool aInclKeno=EFalse);
+
+        /**
+         * Helper method to move acl. Copies acl of node aFrom to acl of aTo,
+         * and removes acl from aFrom.
+         *
+         * @param aFrom The source uri
+         * @param aTo	The target uri
+         */
+        void MoveAclL(const TDesC8 &aFrom, const TDesC8 &aTo);
+
+        /**
+         * Helper method to move nodes in SCOMO tree
+         *
+         * 1. Sets mapping of aOriginal to null.
+         * 2. If aNewURI is null, constructs new uri depending on aTargetstate.
+         * 3. Sets mapping of aNewURI to aLUID
+         * 4. Moves acls of aOriginal to aNewURI (using MoveAclL)
+         *
+         * @param aOriginal The uri of original node to be moved
+         * @param aTargetstate The target state the node is moving to
+         * @param aLUID The luid of the original node
+         * @param aNewUri The new uri of the node (will be constructed and left to stack if null)
+         */
+        void SetMappingLC(const TDesC8 &aOriginal,
+                const TDeploymentComponentState aTargetstate,
+                const TDesC8 &aLUID, HBufC8 *&aNewUri);
+
+        /**
+         * Helper method to move nodes in SCOMO tree
+         *
+         * 1. Sets mapping of aOriginal to null.
+         * 2. Sets mapping of a uri constructed using aTargetState to aLUID
+         * 2. Moves acls of aOriginal to a uri constructed using aTargetState (using MoveAclL)
+         *
+         * @param aTargetstate The target state the node is moving to
+         * @param aLUID The luid of the original node
+         */
+        void SetMappingL(const TDesC8 &aOriginalURI,
+                const TDeploymentComponentState aTargetState,
+                const TDesC8 &aLUID);
+
+        /**
+         * Helper method to set DM LUID mappings directly database.
+         *
+         * @param aURI The uri of node whose mapping is to be set
+         * @param aLUID The new mapping value
+         * @return Possible database error - KErrNone if successful
+         */
+        TInt DirectSetMappingL(const TDesC8 &aURI, const TDesC8 &aLUID);
+
+	TInt DirectRemoveMappingL(const TDesC8 &aURI);
+
+        /**
+         * Helper method to get DM LUID mappings directly from database.
+         *
+         * @param aURI The uri of node whose mapping is to be found
+         * @return The luid mapping - Empty string if not found.
+         */
+        HBufC8 *DirectGetLuidAllocLC(const TDesC8 &aURI);
+
+        /**
+         * Helper method to perform install
+         *
+         * @param aLuidi The mapping value of component as integer
+         * @param aURI The uri of node that is to be installed
+         * @param aLUID The mapping value of component as text
+         * @param aTargetstate The target state the node is moving to (EDCSActive or EDCSInactive)
+         * @param aRet	The SyncML Error code - value will be updated according to success
+         */
+        void InstallL(const TUint aLuidi, const TDesC8& aURI,
+                const TDesC8& aLUID,
+                const TDeploymentComponentState aTargetState, TError &aRet);
+
+        /**
+         * Helper method to perform update
+         *
+         * @param aLuidi The mapping value of component as integer
+         * @param aURI The uri of node that is to be installed
+         * @param aLUID The mapping value of component as text
+         * @param aTargetstate The target state the node is moving to (EDCSActive or EDCSInactive)
+         * @param aRet	The SyncML Error code - value will be updated according to success
+         */
+        void UpdateL(const TUint aLuidi, const TDesC8& aURI,
+                const TDesC8& aSourceLUID,
+                const TDeploymentComponentState aTargetState, TError &aRet);
+        /**
+         maps symbian error code to DM error code as follows:
+         Kerrnone-> EOk
+         Kerrnotfound ->Enotfound
+         all oether -> EError
+         */
+        void DefaultMapError(const TInt aErr, TError &aRet,
+                const TDesC8& aDes = KNullDesC8);
+
+        /**
+         * Deactivates given component if given state is inactive
+         */
+        void DeactivateIfInactive(const TUint aLuidi,
+                const TDeploymentComponentState aTargetState);
+
+        /**
+         * Finds luid from app mgmt server to given userid
+         */
+        TUint32 GetLuidForUserIdL(const TDesC8 &aUserId,
+                const TDeploymentComponentState aState);
+
+        TUint32 GetLuidL(const TDesC8 &aDMLuid, const TDesC8 &aUserId,
+                const TDeploymentComponentState aState);
+
+        /**
+         * places result in current
+         * @param aParent The deployment component identifying uri 
+         * @param aMapping The user id part of the deployment component uri
+         * @param aLuid Internal id of the deployment compoennt
+         * @param aCurrentList The list that will get the data
+         * @param aStatus The syncml status
+         */
+        void GetComponentDataL(const TDesC8& aParent, const TDesC8& aMapping,
+                const TUint32 aLuid, CBufBase &aCurrentList,
+                CBufBase &currentMime, TError &aStatus);
+        /**
+         * returns luid of leaf node, or 0
+         */
+        TInt GetLeafLuidL(const TDesC8 &aURI, const TDesC8 & aParentMapping);
+        /**
+         * returns length of result
+         */
+        TInt GetSizeL(const TDeplCompAttrType aDataType, const TInt aLuid,
+                TError &aRet);
+
+        /**
+         * places installoptions of given aLuid to aBuf
+         */
+        void InstallOptionsDataL(const TUint32 aLuid,
+                const TDeplCompAttrType& aDataType, CBufBase &aBuf,
+                CBufBase *aRaw = NULL);
+
+        /**
+         * Gets the luid using GetLuidL, and updates aStatus to ENotFound if not found...
+         */
+        TUint32 GetLuid2L(const TDesC8 &aDMLuid, const TDesC8 &aUserId,
+                const TDeploymentComponentState aState, TError &aStatus);
+
+        /**
+         * Finds out correct download target based on download operation 
+         */
+        TDownloadTarget DownloadTargetL(const TDesC8& aOperation);
+
+        TPtrC8 LastURISeg(const TDesC8& aURI);
+        TInt DesToInt(const TDesC8& aLuid);
+
+#ifdef __AM_LASTERROR_NODE
+        void SetLastErrorL(const TDesC8& aLastError, const TInt aErr);
+        const TDesC8& LastError();
+        void SetErrorL(const TDesC8& aDes, const TInt aErr);
+#endif
+
+        /**
+         The function creates new leaf objects, or replaces data in existing leaf
+         objects. The information about the success of the command should be
+         returned by calling SetStatusL function of MSmlDmCallback callback
+         interface. This makes it possible to buffer the commands.  However, all
+         the status codes for buffered commands must be returned at the latest when
+         the adapter's CompleteOutstandingCmdsL() is called.
+         @param aURI			URI of the object
+         @param aLUID		LUID of the object (if the adapter has earlier returned a
+         LUID to the DM Module). For new objects, this is the LUID
+         inherited through the parent node.
+         @param aObject		Data of the object.
+         @param aType		MIME type of the object
+         @param aStatusRef	Reference to correct command, i.e. this reference
+         must be used when calling the SetStatusL of this command
+         @publishedPartner
+         @prototype
+         */
+        void _UpdateLeafObjectL(const TDesC8& aURI, const TDesC8& aLUID,
+                const TDesC8& aObject, const TDesC8& aType, TInt aStatusRef,
+                MSmlDmAdapter::TError& aStatus);
+        /**
+         * The function creates new leaf objects, or replaces data in existing leaf
+         */
+        void CloseStreaming();
+
+        void GetServerInfoL(TSmlProfileId& aProfId, HBufC8*& aServerId) const;
+
+        void SendPendingGenericAlertL();
+
+        void ASyncReportL(TUint32 aLuid, const TDesC8& aArgument,
+                const TDownloadTarget aTarget, const TDesC8& aURI);
+
+        void SyncReportL(TUint32 aLuid, const TDesC8& aArgument,
+                const TDownloadTarget aTarget, const TDesC8& aURI, TError &aRet);
+	/**
+	 Checks if predefined node for Download object is in tree if not add to the tree 
+	*/
+	void CheckAndAddPredefinedNodeL();
+	/**
+	 Gets  predefined node for Download object from cenrep 
+	 */
+	void GetPredefinedNodeL(TDes8& aNode);
+	TInt GetAdapterValue();
+	void SetAdapterValue(TInt aAdapterValue);
+	TBool RecognizeMimeType(const TDesC8& aMimeType);
+
+private:
+
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+        RDmTree iDbSession;
+#else
+        RNSmlDMCallbackSession iDbSession; // to change acl location
+#endif
+
+        RApplicationManagement iManagement;
+        TBool iSessionOpened;
+        TAMCommandBuffer iBuffer;
+        TBool iInAtomic;
+        TBool iUpdated; // have we checked changed state DCs?
+        // Streaming API support
+        TBool iStreamOpen;
+        RFileWriteStream iStream;
+        TInt iStatusRef;
+        RFs iStreamRFs;
+        RFile iStreamFile;
+        TBool iIsStreamedContent;
+        HBufC8* iStreamedURI;
+        HBufC8* iStreamedLuid;
+        HBufC8* iStreamedType;
+        TBool iCertRequired;
+        TBool iTrustAdded;
+        CSCOMOAdapterDb* iAMdb;
+        TUint iInternalId;
+#ifdef __AM_LASTERROR_NODE
+        HBufC8 *iLastError;
+#endif
+
+        HBufC8 *iUriDel;
+        };
+
+    } // namespace
+#endif // __AMDMADAPTER_H__
+// End of File