serviceproviders/sapi_serviceregistry/src/serviceregistryservicehandler.cpp
changeset 5 989d2f495d90
child 23 50974a8b132e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/serviceproviders/sapi_serviceregistry/src/serviceregistryservicehandler.cpp	Fri Jul 03 15:51:24 2009 +0100
@@ -0,0 +1,137 @@
+/*
+* 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 the License "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:  This class provides the interface for calling 
+*                the functionalities of ServiceRegistry SAPI.
+*
+*/
+
+
+#include <ecom\implementationproxy.h>
+#include "serviceregistryservicehandler.h"
+// Including a copy of common constants for this compilation unit
+#include "serviceregistryservice.hrh"
+
+#include "serviceinterface.h"
+
+// -----------------------------------------------------------------------------
+// CServiceRegistryServiceHandler::NewL
+// Returns the instance of CServiceRegistryServiceHandler
+// -----------------------------------------------------------------------------
+//
+CServiceRegistryServiceHandler* CServiceRegistryServiceHandler::NewL()
+    {
+    return new( ELeave ) CServiceRegistryServiceHandler;
+    }
+
+// -----------------------------------------------------------------------------
+// CServiceRegistryServiceHandler::~CServiceRegistryServiceHandler
+// Class destructor
+// -----------------------------------------------------------------------------
+//
+CServiceRegistryServiceHandler::~CServiceRegistryServiceHandler()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CServiceRegistryServiceHandler::InitialiseL
+// Initializes provider with necessary information
+// -----------------------------------------------------------------------------
+//
+void CServiceRegistryServiceHandler::InitialiseL(MLiwNotifyCallback& /*aFrameworkCallback*/,
+                    const RCriteriaArray& /*aInterest*/)
+    {
+    // Domain Specific Initialization
+    }
+
+// -----------------------------------------------------------------------------
+// CServiceRegistryServiceHandler::HandleServiceCmdL
+// Executes generic service commands included in criteria.
+// -----------------------------------------------------------------------------
+//
+void CServiceRegistryServiceHandler::HandleServiceCmdL(const TInt& aCmdId,
+                    const CLiwGenericParamList& aInParamList,
+                    CLiwGenericParamList& aOutParamList,
+                    TUint aCmdOptions,
+                    const MLiwNotifyCallback* aCallback)
+    {
+    if( ( aCallback ) ||  ( 0 != aCmdOptions  ) )
+        {        
+        aOutParamList.AppendL( TLiwGenericParam( KErrorCode , TLiwVariant( KErrNotSupported ) ) );
+        // return from function
+        return;
+        }
+
+    TPtrC8 cmdName;
+    TLiwGenericParam cmd;
+
+    if ( aCmdId == KLiwCmdAsStr )
+        {
+        TInt pos(0);
+        aInParamList.FindFirst( pos, KCommand );
+        if ( pos >= 0 )
+            {
+            cmd = aInParamList[pos];
+            cmdName.Set( cmd.Value().AsData() );
+            }
+        else
+            {            
+            aOutParamList.AppendL( TLiwGenericParam(
+                    KErrorCode, TLiwVariant( KErrArgument ) ) );
+            return;
+            }
+        }
+    else
+        {        
+        aOutParamList.AppendL( TLiwGenericParam(
+                KErrorCode, TLiwVariant( KErrNotSupported ) ) );
+        return;
+        }
+
+     // Resolving the requested interface
+    if ( cmdName.CompareF( KService ) == 0 )
+        {
+        //Create interface pointer and return the output param
+        CServiceInterface* ifp = CServiceInterface::NewL();
+        CleanupClosePushL( *ifp );
+        aOutParamList.AppendL( TLiwGenericParam( KService, TLiwVariant( ifp ) ) );
+        CleanupStack::Pop( ifp );
+        return;
+        }
+    else
+        {        
+        aOutParamList.AppendL(
+                TLiwGenericParam( KErrorCode, TLiwVariant( KErrNotSupported ) ) );
+        }    
+    }
+
+//
+// Rest of the file is for ECom initialization.
+//
+
+// Map the interface UIDs to implementation factory functions
+
+const TImplementationProxy ImplementationTable[] =
+    {
+    IMPLEMENTATION_PROXY_ENTRY(0x20022EE5, CServiceRegistryServiceHandler::NewL)
+    };
+
+// ---------------------------------------------------------
+// Exported proxy for instantiation method resolution
+// ---------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
+    return ImplementationTable;
+    }