homescreensrv_plat/sapi_homescreenplugin/src/hspsconfigurationif.cpp
changeset 0 79c6a41cd166
child 4 1a2a00e78665
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/sapi_homescreenplugin/src/hspsconfigurationif.cpp	Thu Dec 17 08:54:17 2009 +0200
@@ -0,0 +1,1165 @@
+/*
+* Copyright (c) 2008 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 CHSPSConfigurationIf class
+*
+*/
+
+
+#include <e32base.h>
+#include <e32def.h>
+
+#include "hspsconfigurationif.h"
+#include "hspsliwutilities.h"
+#include "hspsliwvocabulary.hrh"
+#include "hspsxmlelements.h"
+#include "hspscallback.h"
+
+#ifdef HSPS_LOG_ACTIVE
+#include <hspslogbusfile.h>
+#include <hspsliwdump.h>
+#endif
+
+using namespace LIW;
+
+
+// ======== LOCAL FUNCTIONS ====================================================
+
+// -----------------------------------------------------------------------------
+// Cleanup function for CArrayPtrFlat arrays
+// -----------------------------------------------------------------------------
+//
+static void DeleteArrayItems( TAny* aObject )
+    {
+    CArrayPtrFlat<ChspsODT>* array = reinterpret_cast<CArrayPtrFlat<ChspsODT>*>( aObject );
+    array->ResetAndDestroy();
+    delete array;
+    }
+
+// ======== MEMBER FUNCTIONS ===================================================
+
+// -----------------------------------------------------------------------------
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CHSPSConfigurationIf* CHSPSConfigurationIf::NewL( TDesC8& aAppUid )
+    {
+    CHSPSConfigurationIf* self = new (ELeave) CHSPSConfigurationIf();
+    CleanupStack::PushL( self );
+    self->ConstructL( aAppUid );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor.
+// -----------------------------------------------------------------------------
+//    
+CHSPSConfigurationIf::~CHSPSConfigurationIf()
+    {
+    delete iHspsConfigurationService;
+    delete iHspsPersonalisationService;
+    delete iHspsLiwUtilities;
+    
+#ifdef HSPS_LOG_ACTIVE    
+    // Delete liw dump object before logbus
+    // since liw dump is dependant from ilogbus.
+    delete iLiwDump;
+    iLiwDump = NULL;
+    delete iLogBus;
+    iLogBus = NULL;
+#endif    
+    }
+
+// -----------------------------------------------------------------------------
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CHSPSConfigurationIf::CHSPSConfigurationIf()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// Symbian Constructor
+// -----------------------------------------------------------------------------
+//    
+void CHSPSConfigurationIf::ConstructL( TDesC8& aAppUid )
+    {       
+#ifdef HSPS_LOG_ACTIVE    
+    iLogBus = ChspsLogBusFile::NewL( ChspsLogBusFile::CreateLogFilename( _L("sapi_configurationIf") ) );
+    iLiwDump = ChspsLiwDump::NewL( *iLogBus );    
+#endif
+        
+    iHspsConfigurationService = CHspsConfigurationService::NewL();
+
+#ifdef HSPS_LOG_ACTIVE    
+    iHspsConfigurationService->SetLogBus( iLogBus );
+#endif
+    
+    //create ODT.
+    //Convert appUid.
+    TInt appIdInt = -1;  	
+	//convert appId to a number.
+	TLex8 input( aAppUid );
+	TInt convErr = input.Val( appIdInt );
+	if( convErr != KErrNone ) 
+		{
+		User::Leave( KErrArgument );
+		}
+    iHspsConfigurationService->GetODTL( appIdInt ); 
+
+    iHspsPersonalisationService = CHspsPersonalisationService::NewL();
+    
+    iHspsLiwUtilities = CHspsLiwUtilities::NewL();
+    }
+
+// -----------------------------------------------------------------------------
+//  Executes the SAPI command
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::ExecuteCmdL( 
+    const TDesC8& aCmdName,
+    const CLiwGenericParamList& aInParamList,
+    CLiwGenericParamList& aOutParamList,
+    TUint aCmdOptions,
+    MLiwNotifyCallback* aCallback )
+    {
+#ifdef HSPS_LOG_ACTIVE
+    iLogBus->LogText( _L( "CHSPSConfigurationIf::ExecuteCmdL" ) );
+    iLiwDump->LogLiwListAsText( const_cast<CLiwGenericParamList&>( aInParamList ) );   
+    iLiwDump->LogLiwListAsBinary( const_cast<CLiwGenericParamList&>( aInParamList ) );
+#endif
+
+    if ( aCallback )
+        {
+        AsyncMethodCallL( 
+            aCmdName,
+            aInParamList,
+            aOutParamList,
+            aCmdOptions,
+            aCallback );
+        }
+    else
+        {
+        SyncMethodCallL(
+            aCmdName,
+            aInParamList,
+            aOutParamList );
+        }
+
+#ifdef HSPS_LOG_ACTIVE    
+    iLiwDump->LogLiwListAsText( aOutParamList );      
+    iLiwDump->LogLiwListAsBinary( aOutParamList );
+#endif    
+    }
+
+// -----------------------------------------------------------------------------
+// Synchronous method calls
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::SyncMethodCallL( 
+    const TDesC8& aCmdName,
+    const CLiwGenericParamList& aInParamList,
+    CLiwGenericParamList& aOutParamList )
+    {
+    TInt err;
+    //GETACTIVEAPPCONF
+    if ( aCmdName.CompareF( KGetActiveAppConf ) == 0 )
+        {
+        TRAP( err, GetActiveAppConfL( aOutParamList ) );
+        }
+    //GETPLUGINCONF
+    else if( aCmdName.CompareF( KGetPluginConf ) == 0 )
+        {
+        TRAP( err, GetPluginConfL( aInParamList, aOutParamList ) );
+        }
+    //GETPLUGINS
+    else if( aCmdName.CompareF( KGetPlugins ) == 0 )
+        {
+        TRAP( err, GetPluginsL( aInParamList, aOutParamList ) );
+        }
+    //GETPLUGINLIST
+    else if( aCmdName.CompareF( KGetPluginList ) == 0 )
+        {
+        TRAP( err, GetPluginListL( aInParamList, aOutParamList ) );
+        }
+    //ADDPLUGIN
+    else if( aCmdName.CompareF( KAddPlugin ) == 0 )
+        {
+        TRAP( err, AddPluginL( aInParamList, aOutParamList ) );
+        }
+    //REMOVEPLUGIN
+    else if( aCmdName.CompareF( KRemovePlugin ) == 0 )
+        {
+        TRAP( err, RemovePluginL( aInParamList, aOutParamList ) );
+        }
+    //REPLACEPLUGIN
+    else if( aCmdName.CompareF( KReplacePlugin ) == 0 )
+        {
+        TRAP( err, ReplacePluginL( aInParamList, aOutParamList ) );
+        }    
+    //SETPLUGINSETTINGSL
+    else if( aCmdName.CompareF( KSetPluginSettings ) == 0 )
+        {
+        TRAP( err, SetPluginSettingsL( aInParamList, aOutParamList ) );
+        }
+    //GETPLUGINSETTINGSL
+    else if( aCmdName.CompareF( KGetPluginSettings ) == 0 )
+        {
+        TRAP( err, GetPluginSettingsL( aInParamList, aOutParamList ) );
+        }
+    //MOVEPLUGINSL
+    else if( aCmdName.CompareF( KMovePlugins ) == 0 )
+        {
+        TRAP( err, MovePluginsL( aInParamList, aOutParamList ) );
+        }
+    //GETAPPCONFSL
+    else if( aCmdName.CompareF( KGetAppConfs ) == 0 )
+        {
+        TRAP( err, GetAppConfsL( aInParamList, aOutParamList ) );
+        }
+    //SETACTIVEAPPCONFL
+    else if( aCmdName.CompareF( KSetActiveAppConf ) == 0 )
+        {
+        TRAP( err, SetActiveAppConfL( aInParamList, aOutParamList ) );
+        }
+    //SETCONFSTATEL
+    else if( aCmdName.CompareF( KSetConfState ) == 0 )
+        {
+        TRAP( err, SetConfStateL( aInParamList, aOutParamList ) );
+        }
+    //SETACTIVEPLUGIN
+    else if( aCmdName.CompareF( KSetActivePlugin ) == 0 )
+        {
+        TRAP( err, SetActivePluginL( aInParamList, aOutParamList ) );
+        }
+    //UNKNOWN COMMAND
+    else
+        {
+        // Invalid command
+        err = KErrArgument;
+        }
+    if ( err != KErrNone )
+        {
+        SetErrorL( aOutParamList, err );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Asynchronous method calls
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::AsyncMethodCallL( 
+    const TDesC8& aCmdName,
+    const CLiwGenericParamList& aInParamList,
+    CLiwGenericParamList& aOutParamList,
+    TUint aCmdOptions,
+    MLiwNotifyCallback* aCallback )
+    {
+    TInt err = KErrNotSupported;
+    TInt32 transactionId = -1;
+    //REQUEST NOTIFICATION
+    if(aCmdName.CompareF( KRequestNotification ) == 0)
+        {
+        if( aCallback && !(aCmdOptions & KLiwOptCancel) )
+            {
+            TRAP( err, RequestNotificationL( aInParamList, aCallback, transactionId ) );
+            }
+        else
+            {
+            if ( aCmdOptions & KLiwOptCancel )
+                {
+                TRAP(err, iHspsConfigurationService->UnRegisterObserverL());
+                }
+            }
+        }
+    //UNKNOWN COMMAND
+    else
+        {
+        // Invalid command
+        err = KErrArgument;
+        }
+    // Append transaction id in case of asynchronous requests
+    if( aCallback && ( KLiwOptASyncronous & aCmdOptions ) && 
+                            ( err == KErrNone ) && ( transactionId != -1 ) )
+        {
+        
+        SetErrorL( aOutParamList, err );
+        aOutParamList.AppendL(TLiwGenericParam( KTransactionID, 
+                                    TLiwVariant( TInt32( transactionId ))));        
+        }
+                
+       
+    if ( err != KErrNone )
+        {
+        SetErrorL( aOutParamList, err );
+        }      
+    }
+
+// -----------------------------------------------------------------------------
+// Error in the parameter.
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::SetErrorL( CLiwGenericParamList& aOutParamList,
+									 TInt32 err )
+    {
+    aOutParamList.Reset();
+    CHspsLiwUtilities::AppendStatusL( err, aOutParamList );
+    }
+
+// -----------------------------------------------------------------------------
+// Closes the interface
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::Close()
+    {
+    delete this;
+    }
+
+// -----------------------------------------------------------------------------
+// Gets root plugin of active configuration.
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::GetActiveAppConfL( 
+    CLiwGenericParamList& aOutParamList )
+	{
+	//InParamList not needed,
+	TPtrC8 pluginId;
+	pluginId.Set( KHspsLiwEmptyValue );	 
+	
+   	// Get configuration node of application configuration
+   	ChspsDomNode* node = &( iHspsLiwUtilities->FindRootNodeByTagL( 
+   	    KConfigurationElement, 
+   	    *( iHspsConfigurationService->GetDOML().RootNode() ) ) );
+   	
+   	if ( !node )
+   	    {
+   	    User::Leave( KErrNotFound );
+   	    }
+   	
+    // Get configuration state
+   	TPtrC8 state;
+   	CHspsLiwUtilities::GetAttributeValueL( 
+   	    *node, 
+   	    KConfigurationAttrState, 
+   	    state );
+
+    if ( state.Compare( KConfStateError ) == 0 )
+        {
+        // Restore active application configuration
+        TPtrC8 confUid;
+        CHspsLiwUtilities::GetAttributeValueL( 
+            *node, 
+            KConfigurationAttrUid, 
+            confUid );        
+        TInt appUid;
+        iHspsConfigurationService->GetAppUidL( appUid );
+        iHspsPersonalisationService->RestoreActiveAppConfL( 
+            appUid, 
+            confUid );
+        
+        // Invalidate ODT.
+        iHspsConfigurationService->InvalidateODT();
+        }
+   	
+	iHspsLiwUtilities->GetConfigurationL( 
+	    KHspsLiwAppConf,
+        pluginId,
+        iHspsConfigurationService->GetDOML(),
+        aOutParamList );
+	
+    }
+
+// -----------------------------------------------------------------------------
+// Gets plugin of active configuration.
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::GetPluginConfL( 
+    const CLiwGenericParamList& aInParamList, 
+    CLiwGenericParamList& aOutParamList )
+    {
+    TInt pos = 0;    
+    const TLiwGenericParam* inParam = aInParamList.FindFirst( pos, KPluginId );
+    
+    if( inParam )
+        {
+        TPtrC8 pluginId;
+        TLiwVariant inParamVariant = inParam->Value();
+        pluginId.Set( inParamVariant.AsData() );       
+
+        iHspsLiwUtilities->GetConfigurationL( 
+            KHspsLiwPluginConf,
+            pluginId,
+            iHspsConfigurationService->GetDOML(),
+            aOutParamList );
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Gets list of plugins with defined interface
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::GetPluginsL( 
+        const CLiwGenericParamList& aInParamList, 
+        CLiwGenericParamList& aOutParamList )
+    {
+    TInt pos;
+    TPtrC8 interface;
+    TPtrC8 type;
+    const TLiwGenericParam* inParam;
+    TLiwVariant inParamVariant;
+    
+    // Get interface parameter (mandatory)
+    pos = 0;
+    inParam = aInParamList.FindFirst( 
+        pos, 
+        KHspsLiwInterface );
+    
+    if( inParam )
+        {
+        inParamVariant = inParam->Value();
+        interface.Set( inParamVariant.AsData() );    
+
+        // Get type parameter (optional)
+        pos = 0;
+        inParam = aInParamList.FindFirst( 
+            pos, 
+            KHspsLiwType );
+        if ( inParam )
+            {
+            inParamVariant = inParam->Value();
+            type.Set( inParamVariant.AsData() );
+            }
+        
+        // Get headers list of defined interface
+        TUint32 family;
+        iHspsConfigurationService->GetFamilyL( family );
+        CArrayPtrFlat<ChspsODT>* list = 
+            new ( ELeave )CArrayPtrFlat<ChspsODT>( KHeaderListGranularity );
+        CleanupStack::PushL( TCleanupItem( DeleteArrayItems, list ) );
+        iHspsPersonalisationService->GetPluginListL( 
+            interface, 
+            type,
+            family,
+            *list );
+        
+        // Create GetPlugins output parameters
+        CHspsLiwUtilities::GetPluginsOutputL( *list, aOutParamList );
+        CleanupStack::PopAndDestroy( list );
+        }
+    else
+        {
+        // Invalid method call
+        User::Leave( KErrArgument );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Gets list of plugins with defined interface
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::GetPluginListL( 
+    const CLiwGenericParamList& aInParamList, 
+    CLiwGenericParamList& aOutParamList )
+    {
+    
+    TInt pos;
+    TPtrC8 pluginId;
+    TPtrC8 type;
+    const TLiwGenericParam* inParam;
+    TLiwVariant inParamVariant;
+
+    // Get type parameter
+    pos = 0;
+    inParam = aInParamList.FindFirst( 
+        pos, 
+        KHspsLiwType );
+    
+    if( inParam )
+        {
+        inParamVariant = inParam->Value();
+        type.Set( inParamVariant.AsData() );
+        // Validate plugin type
+        if ( type.Compare( KHspsLiwViewConf ) != 0 &&
+             type.Compare( KHspsLiwWidgetConf ) != 0 &&
+             type.Compare( KHspsLiwTemplateConf ) != 0 )
+            {
+            User::Leave( KErrArgument );
+            }
+        }
+    
+    // Get plugin id parameter
+    pos = 0;
+    inParam = aInParamList.FindFirst( 
+        pos, 
+        KPluginId );
+    
+    if ( inParam )
+        {
+        inParamVariant = inParam->Value();
+        pluginId.Set( inParamVariant.AsData() );
+        // Check that plugin node exists
+        ChspsDomNode* node = &( CHspsLiwUtilities::FindRootNodeByIdentifierL( 
+            KPluginElement,
+            pluginId,
+            *( iHspsConfigurationService->GetDOML().RootNode() ) ) );
+        if ( !node )
+            {
+            User::Leave( KErrNotFound );
+            }
+        }
+        
+    // Create GetPluginList output parameters
+    CHspsLiwUtilities::GetPluginListOutputL( 
+        *iHspsConfigurationService->GetDOML().RootNode(),
+        type,
+        pluginId,
+        aOutParamList );
+    
+    }
+
+// -----------------------------------------------------------------------------
+// Add a new plugin to the defined configuration
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::AddPluginL( 
+    const CLiwGenericParamList& aInParamList, 
+    CLiwGenericParamList& aOutParamList )
+    {
+    TInt pos;
+    TPtrC8 confId;
+    TPtrC8 pluginUid;
+    TPtrC8 position;
+    const TLiwGenericParam* inParam;
+    TLiwVariant inParamVariant;
+    TInt pluginId;
+    TInt err( KErrNone );
+    
+    // Get confId parameter (mandatory)
+    pos = 0;
+    inParam = aInParamList.FindFirst( 
+        pos, 
+        KHspsLiwConfId );
+    
+    if( inParam )
+        {
+        inParamVariant = inParam->Value();
+        confId.Set( inParamVariant.AsData() );    
+        }
+    else
+        {
+        // Mandatory element missing
+        err = KErrArgument;
+        }
+    if ( err == KErrNone )
+        {
+        // Get pluginUid parameter (mandatory)
+        pos = 0;
+        inParam = aInParamList.FindFirst( 
+            pos, 
+            KHspsLiwPluginUid );
+        if ( inParam )
+            {
+            inParamVariant = inParam->Value();
+            pluginUid.Set( inParamVariant.AsData() );    
+            }
+        else
+            {
+            // Mandatory element missing
+            err = KErrArgument;
+            }
+        }
+    if ( err == KErrNone )
+        {
+        // Get position parameter (optional)
+        pos = 0;
+        inParam = aInParamList.FindFirst( 
+            pos, 
+            KHspsLiwPosition );
+        if ( inParam )
+            {
+            inParamVariant = inParam->Value();
+            position.Set( inParamVariant.AsData() );    
+            }
+        }
+    
+    User::LeaveIfError( err );
+    
+    // Add plugin
+    TInt appUid;
+    iHspsConfigurationService->GetAppUidL( appUid );
+    
+    iHspsPersonalisationService->AddPluginL(
+        appUid,
+        confId,
+        pluginUid,
+        position,
+        pluginId
+        );
+
+    // Invalidate ODT.
+    iHspsConfigurationService->InvalidateODT();
+    
+    // Create output parameters
+    CHspsLiwUtilities::AddPluginOutputL( pluginId, aOutParamList );
+
+    }
+
+// -----------------------------------------------------------------------------
+// Removes a plugin from the active configuration
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::RemovePluginL( 
+    const CLiwGenericParamList& aInParamList, 
+    CLiwGenericParamList& aOutParamList )
+    {
+    TInt err( KErrNone );
+    const TLiwGenericParam* inParam;
+    TLiwVariant inParamVariant;
+    TPtrC8 pluginId;
+    TInt pos;
+
+    // Get pluginId parameter (mandatory)
+    pos = 0;
+    inParam = aInParamList.FindFirst( 
+        pos, 
+        KPluginId );
+    
+    if( inParam )
+        {
+        inParamVariant = inParam->Value();
+        pluginId.Set( inParamVariant.AsData() );    
+        }
+    else
+        {
+        // Mandatory element missing
+        err = KErrArgument;
+        }
+
+    User::LeaveIfError( err );
+
+    // Remove plugin
+    TInt appUid;
+    iHspsConfigurationService->GetAppUidL( appUid );
+    
+    iHspsPersonalisationService->RemovePluginL(
+        appUid,
+        pluginId );
+
+    // Invalidate ODT.
+    iHspsConfigurationService->InvalidateODT();
+
+    // Create output parameters
+    CHspsLiwUtilities::RemovePluginOutputL( aOutParamList );
+
+    }
+
+// -----------------------------------------------------------------------------
+// Replaces a plugin from the active configuration
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::ReplacePluginL( 
+    const CLiwGenericParamList& aInParamList, 
+    CLiwGenericParamList& aOutParamList )
+    {
+    TInt err( KErrNone );
+    const TLiwGenericParam* inParam;
+    TLiwVariant inParamVariant;
+    TPtrC8 pluginId;
+    TPtrC8 confUid;
+    TInt pos;
+
+    // Get pluginId parameter (mandatory)
+    pos = 0;
+    inParam = aInParamList.FindFirst( 
+        pos, 
+        KPluginId );
+    
+    if( inParam )
+        {
+        inParamVariant = inParam->Value();
+        pluginId.Set( inParamVariant.AsData() );    
+        }
+    else
+        {
+        // Mandatory element missing
+        err = KErrArgument;
+        }
+
+    if ( err == KErrNone )
+        {
+        // Get pluginUid parameter (mandatory)
+        pos = 0;
+        inParam = aInParamList.FindFirst( 
+            pos, 
+            KHspsLiwConfUid );
+        if ( inParam )
+            {
+            inParamVariant = inParam->Value();
+            confUid.Set( inParamVariant.AsData() );    
+            }
+        else
+            {
+            // Mandatory element missing
+            err = KErrArgument;
+            }
+        }
+    
+    
+    User::LeaveIfError( err );
+
+    // Get active application uid
+    TInt appUid;
+    iHspsConfigurationService->GetAppUidL( appUid );
+    
+    // Replace plugin in the application configuration
+    iHspsPersonalisationService->ReplacePluginL(
+        appUid,
+        pluginId,
+        confUid );
+
+    // Invalidate ODT.
+    iHspsConfigurationService->InvalidateODT();
+
+    // Create output parameters
+    CHspsLiwUtilities::ReplacePluginOutputL( aOutParamList );
+    }
+
+
+// -----------------------------------------------------------------------------
+// Sets plugin settings
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::SetPluginSettingsL( 
+    const CLiwGenericParamList& aInParamList, 
+    CLiwGenericParamList& aOutParamList )
+    {
+    TInt error = KErrNone;
+    TPtrC8 pluginId;
+    TInt pos = 0;
+    TPtrC8 storingParams;
+    TBool pluginStoringStatus(EFalse); // EFalse only rootconfiguration is stored.
+    
+    const CLiwList* settingsList;
+    
+    const TLiwGenericParam* inParam = aInParamList.FindFirst( pos, KPluginId );
+        
+    if( inParam )
+        {
+        TLiwVariant inParamVariant = inParam->Value();
+        pluginId.Set( inParamVariant.AsData() );  
+        }
+    else
+        {
+        // Mandatory element missing
+        error = KErrArgument;
+        }
+    
+    if( error == KErrNone )
+        {
+        pos=0;
+        const TLiwGenericParam* settingsParam = aInParamList.FindFirst( pos, KHspsLiwSettings );
+        TLiwVariant settingsParamVariant;
+        if( settingsParam )
+            {
+            settingsParamVariant = settingsParam->Value();
+            settingsList = settingsParamVariant.AsList();
+            }
+        else
+            {
+            // Mandatory element missing
+            error = KErrArgument;
+            }
+        }
+    if( error == KErrNone )
+        {
+       
+        ChspsDomDocument& domDocument = iHspsConfigurationService->GetDOML( );
+            
+        ChspsDomDocument* settingsDom = ChspsDomDocument::NewL();
+        CleanupStack::PushL( settingsDom );
+        
+        error = iHspsLiwUtilities->SetPluginSettingsNodeL(
+                        *settingsList,    
+                        pluginId,
+                        domDocument,
+                        *settingsDom
+                        );
+        
+        if( error == KErrNone )
+            {
+            
+            // Get position parameter (optional)
+            pos = 0;
+            inParam = aInParamList.FindFirst( 
+                        pos, 
+                        KHspsLiwStoringParams );
+            
+                    
+            if ( inParam )       
+                {
+                TLiwVariant inParamVariant  = inParam->Value();
+                storingParams.Set( inParamVariant.AsData() );
+                if( storingParams.Compare( KHspsLiwStorePluginRefence ) == 0)
+                    {
+                    pluginStoringStatus = ETrue;
+                    }
+                }
+            TInt appUid;
+            iHspsConfigurationService->GetAppUidL( appUid );
+            iHspsPersonalisationService->SetPluginSettingsL(
+                                         appUid,
+                                         pluginId,
+                                         *settingsDom,
+                                         pluginStoringStatus
+                                         );
+
+            // Invalidate ODT.
+            iHspsConfigurationService->InvalidateODT();
+            }
+        
+        CleanupStack::PopAndDestroy( settingsDom );      
+        }
+        
+    User::LeaveIfError( error );           
+ 
+    // Create output parameters
+    CHspsLiwUtilities::SetPluginSettingsOutputL( aOutParamList );
+
+    }
+
+// -----------------------------------------------------------------------------
+// Gets plugin settings
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::GetPluginSettingsL( 
+    const CLiwGenericParamList& aInParamList, 
+    CLiwGenericParamList& aOutParamList )
+    {
+#ifdef HSPS_LOG_ACTIVE
+    iLogBus->LogText( _L( "CHSPSConfigurationIf::GetPluginSettingsL" ) );
+#endif
+    
+	TInt pos = 0;	
+	const TLiwGenericParam* inParam = aInParamList.FindFirst( pos, KHspsLiwPluginUid );
+	
+	if( inParam )
+		{
+	    TInt appUid;
+	    iHspsConfigurationService->GetAppUidL( appUid );
+	    
+		TPtrC8 pluginUid;
+		TLiwVariant inParamVariant = inParam->Value();
+		pluginUid.Set( inParamVariant.AsData() );   	
+	
+		ChspsODT* settingsOdt = ChspsODT::NewL();
+    	CleanupStack::PushL( settingsOdt );
+		iHspsPersonalisationService->GetPluginOdtL( appUid, pluginUid, settingsOdt );
+		
+	    // Create output parameters
+		iHspsLiwUtilities->GetPluginSettingsOutputL( settingsOdt->DomDocument(), aOutParamList );
+
+#ifdef HSPS_LOG_ACTIVE		
+		iLiwDump->LogLiwListAsText( aOutParamList );
+#endif
+		
+	    CleanupStack::PopAndDestroy( settingsOdt );
+		}
+	else
+		{
+		User::Leave( KErrArgument );
+		}
+
+    }
+
+// Updates plugin positions
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::MovePluginsL( 
+    const CLiwGenericParamList& aInParamList, 
+    CLiwGenericParamList& aOutParamList )
+    {
+    TPtrC8 confId;
+    TInt pos = 0;         
+    CArrayFixFlat<TInt>* idArray = NULL;
+        
+    // Get confId
+    const TLiwGenericParam* inParam = aInParamList.FindFirst( pos, KHspsLiwConfId );        
+    if( !inParam )
+        {
+        // Mandatory element missing
+        User::Leave( KErrArgument );
+        }
+
+    TLiwVariant inParamVariant = inParam->Value();
+    confId.Set( inParamVariant.AsData() );  
+
+    // Get plugin id list
+    pos = 0;
+    const TLiwGenericParam* pluginsParam = aInParamList.FindFirst( pos, KHspsLiwPlugins );
+    if( !pluginsParam )
+        {
+        // Mandatory element missing
+        User::Leave( KErrArgument );
+        }
+
+    TLiwVariant pluginsParamVariant;
+    pluginsParamVariant = pluginsParam->Value();
+    const CLiwList* pluginsList = pluginsParamVariant.AsList();                        
+    const TInt KGranularity = 5;
+    idArray = new ( ELeave )CArrayFixFlat<TInt>( KGranularity );
+    CleanupStack::PushL( idArray );
+    CHspsLiwUtilities::GetPluginIdListL( pluginsList, *idArray );
+
+    TInt appUid;
+    iHspsConfigurationService->GetAppUidL( appUid );
+    iHspsPersonalisationService->MovePluginsL( 
+            appUid,
+            confId,
+            *idArray );
+
+    CleanupStack::PopAndDestroy( idArray );
+
+    // Invalidate ODT.
+    iHspsConfigurationService->InvalidateODT();
+    
+    // Create output parameters
+    CHspsLiwUtilities::MovePluginsOutputL( aOutParamList );
+    }
+
+// -----------------------------------------------------------------------------
+// Returns list of installed application configurations
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::GetAppConfsL( 
+    const CLiwGenericParamList& /*aInParamList*/, 
+    CLiwGenericParamList& aOutParamList )
+    {
+    // Get app UID of active configuration
+    TInt appUid( 0 );
+    iHspsConfigurationService->GetAppUidL( appUid );
+
+    // Get list of application configurations
+    TUint32 family;
+    iHspsConfigurationService->GetFamilyL( family );
+    CArrayPtrFlat<ChspsODT>* list = 
+        new ( ELeave )CArrayPtrFlat<ChspsODT>( KHeaderListGranularity );
+    CleanupStack::PushL( TCleanupItem( DeleteArrayItems, list ) );
+    
+    iHspsPersonalisationService->GetAppConfListL( 
+        appUid,
+        family,
+        *list );
+    
+    // Create GetAppConfs output parameters
+    CHspsLiwUtilities::GetAppConfsOutputL( *list, aOutParamList );
+    
+    // Cleanup application configuration list
+    CleanupStack::PopAndDestroy( list );
+    }
+
+// -----------------------------------------------------------------------------
+// Set application active configuration
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::SetActiveAppConfL( 
+    const CLiwGenericParamList& aInParamList, 
+    CLiwGenericParamList& aOutParamList )
+    {
+    // Get confUid
+    TPtrC8 confUid;
+    TInt pos = 0;         
+    const TLiwGenericParam* inParam = aInParamList.FindFirst( 
+        pos, 
+        KHspsLiwConfUid );        
+    if( !inParam )
+        {
+        // Mandatory element missing
+        User::Leave( KErrArgument );
+        }
+
+    TLiwVariant inParamVariant = inParam->Value();
+    confUid.Set( inParamVariant.AsData() );  
+
+    // Get app UID
+    TInt appUid( 0 );
+    iHspsConfigurationService->GetAppUidL( appUid );
+
+    // Set application configuration
+    iHspsPersonalisationService->SetActiveAppConfL( appUid, confUid );                               
+    
+    // Invalidate ODT.
+    iHspsConfigurationService->InvalidateODT();
+    
+    // Create output parameters
+    CHspsLiwUtilities::SetActiveAppConfOutputL( aOutParamList );
+
+    }
+// ---------------------------------------------------------------------------
+// Change Notification request to HSPS Service
+// ---------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::RequestNotificationL( const CLiwGenericParamList& aInParamList, 
+                                                    MLiwNotifyCallback* aCallback,
+                                                    TInt32& aTransactionId )
+    {
+    aTransactionId = aCallback->GetTransactionID(); 
+      
+    CHspsReqNotifCallback* cb = CHspsReqNotifCallback::NewL(aCallback, aInParamList, 
+            aTransactionId, *iHspsConfigurationService );
+    
+    CleanupStack::PushL( cb );
+    
+    TInt status = iHspsConfigurationService->RegisterObserverL( cb );
+    // Issue request
+    if( status == KErrNone)             
+        {
+        CleanupStack::Pop( cb );
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy( cb );
+        User::Leave(status);
+        }        
+    }
+
+// -----------------------------------------------------------------------------
+// Updates configuration's state
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::SetConfStateL( 
+    const CLiwGenericParamList& aInParamList, 
+    CLiwGenericParamList& aOutParamList )
+    {
+
+    // Get confId
+    TPtrC8 confId;
+    TInt pos = 0;         
+    const TLiwGenericParam* inParam = aInParamList.FindFirst( 
+        pos, 
+        KHspsLiwConfId );        
+    if( !inParam )
+        {
+        // Mandatory element missing
+        User::Leave( KErrArgument );
+        }
+    
+    TLiwVariant inParamVariant = inParam->Value();
+    confId.Set( inParamVariant.AsData() );  
+
+    // Get state
+    TPtrC8 state;
+    pos = 0;
+    inParam = aInParamList.FindFirst( 
+        pos, 
+        KHspsLiwConfState );        
+    if( !inParam )
+        {
+        // Mandatory element missing
+        User::Leave( KErrArgument );
+        }
+    
+    inParamVariant = inParam->Value();
+    state.Set( inParamVariant.AsData() );  
+    
+    // Get filter parameter (optional)
+    TPtrC8 filter;
+    pos = 0;
+    inParam = aInParamList.FindFirst( 
+        pos, 
+        KHspsLiwFilter );
+    if ( inParam )
+        {
+        inParamVariant = inParam->Value();
+        filter.Set( inParamVariant.AsData() );  
+        }
+    
+    // Get app UID
+    TInt appUid( 0 );
+    iHspsConfigurationService->GetAppUidL( appUid );
+
+    // Set application configuration
+    iHspsPersonalisationService->SetConfStateL( appUid, confId, state, filter );                               
+    
+    // Invalidate ODT.
+    iHspsConfigurationService->InvalidateODT();
+    
+    // Create output parameters
+    CHspsLiwUtilities::SetConfStateOutputL( aOutParamList );
+
+    }
+
+// -----------------------------------------------------------------------------
+// Gets list of plugins with defined interface
+// -----------------------------------------------------------------------------
+//
+void CHSPSConfigurationIf::SetActivePluginL( 
+    const CLiwGenericParamList& aInParamList, 
+    CLiwGenericParamList& aOutParamList )
+    {
+    
+    TInt pos;
+    TPtrC8 pluginId;
+    const TLiwGenericParam* inParam;
+    TLiwVariant inParamVariant;
+    
+    // Get plugin id parameter
+    pos = 0;
+    inParam = aInParamList.FindFirst( 
+        pos, 
+        KPluginId );
+    
+    if ( inParam )
+        {
+        inParamVariant = inParam->Value();
+        pluginId.Set( inParamVariant.AsData() );
+        // Check that plugin node exists
+        ChspsDomNode* node = &( CHspsLiwUtilities::FindRootNodeByIdentifierL( 
+            KPluginElement,
+            pluginId,
+            *( iHspsConfigurationService->GetDOML().RootNode() ) ) );
+        if ( !node )
+            {
+            User::Leave( KErrNotFound );
+            }
+        }
+    else
+        {
+        // Manadatory plugin id parameter missing
+        User::Leave( KErrArgument );
+        }
+
+    // Activate plugin
+    TInt appUid;
+    iHspsConfigurationService->GetAppUidL( appUid );
+    
+    iHspsPersonalisationService->SetActivePluginL(
+        appUid,
+        pluginId );
+
+    // Invalidate ODT.
+    iHspsConfigurationService->InvalidateODT();
+    
+    // Create output parameters
+    CHspsLiwUtilities::SetActivePluginOutputL( aOutParamList );
+
+    }
+
+// ======== GLOBAL FUNCTIONS ===================================================
+
+
+// End of file