diff -r b9b00b134b0d -r d316aecb87fd applicationmanagement/amadapter2/inc/amadapter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applicationmanagement/amadapter2/inc/amadapter.h Tue Jul 13 04:01:20 2010 +0530 @@ -0,0 +1,797 @@ +/* +* 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: Application Management DM Adapter +* +*/ + + + +#ifndef __AMADAPTER_H__ +#define __AMADAPTER_H__ + +// ------------------------------------------------------------------------------------------------ +// Includes +// ------------------------------------------------------------------------------------------------ +#include +#include + +#ifdef __TARM_SYMBIAN_CONVERGENCY +#include +#else +#include "nsmldmtreedbclient.h" +#endif + +#include "ApplicationManagementClient.h" + +namespace NApplicationManagement + { + +const TUint KAMAdapterImplUid = 0x10207845; + +// 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, "./SCM" ); +#else +_LIT8( KAMNodeName, "SCM" ); +#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( KAMIDNodeName, "ID" ); +_LIT8( KAMIDNodeDescription, "This leaf node holds an identifier for an application" ); + +_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, "StateValue" ); +_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( KAMInstallAndActivateNodeName, "InstallAndActivate" ); +_LIT8( KAMInstallAndActivateNodeDescription, "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, "DownloadAndInstall" ); +_LIT8( KAMDownloadAndInstallOperationNodeDescription, "Starts the download and installs component when complete" ); + +_LIT8( KAMDownloadAndInstallAndActivateNodeName, "DownloadAndInstallAndActivate" ); +_LIT8( KAMDownloadAndInstallAndActivateNodeDescription, "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, "URI" ); +_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" ); + +#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, "ID/Name/Version/URI/Status/Operations" ); +_LIT8( KAMInventoryDynaChilds, "ID/Name/Version/StateValue/Operations" ); +_LIT8( KAMDownloadOperationChilds, "Download/DownloadAndInstall/DownloadAndInstallAndActivate/DownloadAndUpdate/DownloadAndUpdateAndActivate" ); +_LIT8( KAMDeployedOperationChilds, "Activate/Deactivate/Remove" ); +_LIT8( KAMDeliveredOperationChilds, "Install/Update/InstallAndActivate/UpdateAndActivate/Remove" ); +_LIT8( KAMInventoryDeliveredDynaChilds, "ID/Name/Version/Descriptor/Data/InstallOpts/Operations" ); + + +struct TAMCommandBufferElement + { + TInt iStatusRef; + TBuf8<256> iURI; + TAMCommandBufferElement( TInt aRef, const TDesC8 &aURI ) + : iStatusRef( aRef ), iURI( aURI ) + { + } + }; + +typedef RArray TAMCommandBuffer; + +// ------------------------------------------------------------------------------------------------ +// CAmAdapter +// ------------------------------------------------------------------------------------------------ +class CAmAdapter : public CSmlDmAdapter + { +public: + static CAmAdapter* NewL( MSmlDmCallback* aDmCallback ); + static CAmAdapter* NewLC( MSmlDmCallback* aDmCallback ); + + virtual ~CAmAdapter(); + + +/** + 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& 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: + CAmAdapter( 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 SCM 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 SCM 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 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 + */ + 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 ¤tMime, 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(); + TInt GetAdapterValue(); + void SetAdapterValue(TInt aAdapterValue); + +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; + +#ifdef __AM_LASTERROR_NODE + HBufC8 *iLastError; +#endif + + HBufC8 *iUriDel; +}; + + } // namespace +#endif // __AMDMADAPTER_H__ + +// End of File