homescreensrv_plat/sapi_homescreenplugin/src/hspsprovider.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:54:17 +0200
changeset 0 79c6a41cd166
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:  Implementation of CHSPSProvider class
*
*/


#include <ecom/implementationproxy.h>

#include "hspsconfigurationif.h"
#include "hspsprovider.h"
#include "hspsliwvocabulary.hrh"

using namespace LIW;

/* HSPS service provider name */
_LIT8( KHSPSService,                  "Service.HSPS" );

/* HSPS service interface names */
_LIT8( KHSPSConfigurationInterface,   "IConfiguration" );

/* Generic Liw command name */
_LIT8( KCommand,                      "cmd" );

// ======== LOCAL FUNCTIONS ====================================================


// ======== MEMBER FUNCTIONS ===================================================


// -----------------------------------------------------------------------------
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CHSPSProvider* CHSPSProvider::NewL()
    {
    return new( ELeave ) CHSPSProvider();
    }

// -----------------------------------------------------------------------------
// Constructor.
// -----------------------------------------------------------------------------
//
CHSPSProvider::CHSPSProvider()
    {
    }

// -----------------------------------------------------------------------------
// Called by the LIW framework to initialise necessary information 
// from the Service Handler. This method is called when the consumer makes 
// the attach operation.
// -----------------------------------------------------------------------------
//
void CHSPSProvider::InitialiseL( 
    MLiwNotifyCallback& /*aFrameworkCallback*/, 
    const RCriteriaArray& aInterest )
    {
    TInt count = aInterest.Count();
    for ( TInt index = 0; index < count ; index++ )
        {
        if( aInterest[ index ]->ContentType() == KHSPSService )
            {
            return;
            }
        }

    User::Leave( KErrNotFound );
    }

// -----------------------------------------------------------------------------
// Called by the LIW framework to instantiate the requested service interface
// -----------------------------------------------------------------------------
//
void CHSPSProvider::HandleServiceCmdL( 
    const TInt& aCmdId, 
    const CLiwGenericParamList& aInParamList,
    CLiwGenericParamList& aOutParamList,
    TUint /*aCmdOptions*/,
    const MLiwNotifyCallback* /*aCallback*/ )
    {
    TPtrC8 cmdName;

    if ( aCmdId == KLiwCmdAsStr )
        {
        TInt pos = 0;	
        const TLiwGenericParam* cmd = aInParamList.FindFirst( pos, KCommand );
        if ( cmd )
            {
            cmdName.Set( cmd->Value().AsData() );
            }
        }
    if ( cmdName == KHSPSConfigurationInterface )
        {
        //find appUid
        TInt pos = 0;
        TPtrC8 uid;
        const TLiwGenericParam* appUid = aInParamList.FindFirst( pos, 
        													   KHspsLiwAppUid );
        if( appUid )
        	{
        	uid.Set( appUid->Value().AsData() );
        	//Create interface.
    	    CHSPSConfigurationIf* interface = 
	            CHSPSConfigurationIf::NewL( uid );
	        CleanupStack::PushL( interface );
	        aOutParamList.AppendL( TLiwGenericParam( 
	            KHSPSConfigurationInterface, TLiwVariant( interface ) ) );
	        CleanupStack::Pop( interface );
        	}
        else
        	{
        	aOutParamList.Reset();
    	    aOutParamList.AppendL( TLiwGenericParam( EGenericParamError, 
    	    					   TLiwVariant( KErrArgument ) ) );
        	}
        }
    else
        {
        aOutParamList.AppendL( TLiwGenericParam( 
            EGenericParamError, 
            TLiwVariant( ( TInt32 )KErrArgument ) ) );
        }
    }

// ======== GLOBAL FUNCTIONS ===================================================

// -----------------------------------------------------------------------------
// Map the interface UIDs to implementation factory functions
// -----------------------------------------------------------------------------
//
const TImplementationProxy ImplementationTable[] =
    {
    IMPLEMENTATION_PROXY_ENTRY(0x200159B8, CHSPSProvider::NewL)
    };

// -----------------------------------------------------------------------------
// Exported proxy for instantiation method resolution
// -----------------------------------------------------------------------------
//
EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
    {
    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
    return ImplementationTable;
    }

// End of file