contentpublishingsrv/contentpublishingserver/cpserver/src/cpserveractionmanager.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:54:17 +0200
changeset 0 79c6a41cd166
child 12 502e5d91ad42
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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:  
*
*/

#include <liwcommon.h>
#include <liwservicehandler.h>
#include <s32mem.h>

#include "cpserveractionmanager.h"
#include "cpdebug.h"
#include "cpglobals.h"

using namespace LIW;

// ---------------------------------------------------------------------------
// C++ destructor
// ---------------------------------------------------------------------------
//
CCPActionManager::~CCPActionManager()
    {
    if ( iInterface )
        {
        iInterface->Close( );
        }
    delete iServiceHandler;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CCPActionManager* CCPActionManager::NewL()
    {
    CCPActionManager* self = CCPActionManager::NewLC( );
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CCPActionManager* CCPActionManager::NewLC()
    {
    CCPActionManager* self = new( ELeave ) CCPActionManager;
    CleanupStack::PushL( self );
    self->ConstructL( );
    return self;
    }

// ---------------------------------------------------------------------------
// C++ constructor.
// ---------------------------------------------------------------------------
//
CCPActionManager::CCPActionManager()
    {

    }

// ---------------------------------------------------------------------------
// Standard 2nd phase constructor.
// ---------------------------------------------------------------------------
//
void CCPActionManager::ConstructL()
    {
    CP_DEBUG( _L8("CCPActionManager::ConstructL()") );
    iServiceHandler = CLiwServiceHandler::NewL( );
    }

// -----------------------------------------------------------------------------
// CCPActionManager::ExecuteL
// --------------- --------------------------------------------------------------
//  
void CCPActionManager::ExecuteL( const CLiwGenericParamList& aList )
    {
    CP_DEBUG( _L8("CCPActionManager::ExecuteL()") );
    if ( !iInterface )
        {
        PrepareServiceL( iInterface );
        }
    CLiwGenericParamList* inparam = CLiwGenericParamList::NewLC( );
    CLiwGenericParamList* outparam = CLiwGenericParamList::NewLC( );
    PrepareInputListL( aList, *inparam );

    iInterface->ExecuteCmdL( KCmdExecute, *inparam, *outparam ) ;
    TInt pos(0);
    outparam->FindFirst( pos, EGenericParamError );
    if ( pos != KErrNotFound )
        {
        User::LeaveIfError( ( *outparam )[pos].Value().AsTInt32( ) );
        }
    else
        {
        User::Leave( KErrNotFound );
        }
    CleanupStack::PopAndDestroy( outparam );
    CleanupStack::PopAndDestroy( inparam );
    }

// -----------------------------------------------------------------------------
// CCPActionManager::ExecuteL
// --------------- --------------------------------------------------------------
//  
void CCPActionManager::PrepareServiceL( MLiwInterface*& aInterface )
    {
    CP_DEBUG( _L8("CCPActionManager::PrepareServiceL()") );
    CLiwGenericParamList* inparam = &(iServiceHandler->InParamListL( ) );
    CLiwGenericParamList* outparam = &(iServiceHandler->OutParamListL( ) );
    CLiwCriteriaItem* crit = CLiwCriteriaItem::NewL( 1,
        KActionHandlerInterface, KActionHandlerService );
    CleanupStack::PushL( crit );
    crit->SetServiceClass( TUid::Uid( KLiwClassBase ) );
    RCriteriaArray array;
    CleanupClosePushL( array );
    array.AppendL( crit );
    iServiceHandler->AttachL( array );
    iServiceHandler->ExecuteServiceCmdL( *crit, *inparam, *outparam );
    CleanupStack::PopAndDestroy( &array );
    CleanupStack::PopAndDestroy( crit );
    TInt pos = 0;
    outparam->FindFirst( pos, KActionHandlerInterface );
    if ( pos != KErrNotFound )
        {
        aInterface = ( *outparam )[pos].Value().AsInterface( );
        }
    else
        {
        User::Leave( KErrNotFound );
        }
    }

// -----------------------------------------------------------------------------
// CCPActionManager::PrepareInputListL
// --------------- --------------------------------------------------------------
//
void CCPActionManager::PrepareInputListL( const CLiwGenericParamList& aList,
    CLiwGenericParamList& aTarget )
    {
    CP_DEBUG( _L8("CCPActionManager::PrepareInputListL()") );
    const TLiwGenericParam* param= NULL;
    TInt pos( 0);
    param = aList.FindFirst( pos, KListMap, EVariantTypeMap );
    if ( param && pos !=KErrNotFound )
        {
        CLiwDefaultMap* map = CLiwDefaultMap::NewLC( );
        param->Value().Get( *map );
        ExtractUidAndMapL( *map, aTarget );
        CleanupStack::PopAndDestroy( map );
        }
    else
        {
        User::Leave( KErrNotFound );
        }
    }

// -----------------------------------------------------------------------------
// CCPActionManager::ExtractUidAndMapL
// --------------- --------------------------------------------------------------
//
void CCPActionManager::ExtractUidAndMapL( const CLiwDefaultMap& aMap,
    CLiwGenericParamList& aTarget )
    {
    CP_DEBUG( _L8("CCPActionManager::ExtractUidAndMapL()") );
    TLiwVariant variant;
    variant.PushL( );
    if ( aMap.FindL( KActionMap, variant ) )
        {
        CLiwDefaultMap* map = CLiwDefaultMap::NewLC( );
        variant.Get( *map );
        if ( map->FindL( KDataForActionHandler, variant ) )
            {
            TLiwGenericParam param( KDataForActionHandler, variant);
            aTarget.AppendL( param );
            }
        if ( map->FindL( KPluginUid, variant ) )
            {
            TLiwGenericParam param( KPluginUid, variant);
            aTarget.AppendL( param );
            }
        CleanupStack::PopAndDestroy( map );
        }

    CleanupStack::PopAndDestroy( &variant );
    }