webservices/wsframework/inc/senserviceinvocationframework.inl
changeset 0 62f9d29f7211
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsframework/inc/senserviceinvocationframework.inl	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2002-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:           Defines the ECom interface for Sen Service Invocation
+*                Framework plug-ins
+*
+*/
+
+
+
+
+
+
+
+
+#include <SenCredential2.h>
+
+// Interface's (abstract base class's) static factory method implementation.
+// Asks ECOM plug-in framework to instantiate appropriate concrete plug-in
+// implementation.
+inline CSIF* CSIF::NewL(MSenCoreServiceManager& aManager)
+    {
+    // Caller wants to instantiate the default plug-in - ID-WSF  
+#ifndef RD_SEN_COMPILE_SIS_PACKAGE_FILES      
+    const TUid KIDWSFInterfaceUid = {0x101F96FA};
+#else
+    const TUid KIDWSFInterfaceUid = {0x101F9731};
+#endif    
+
+    TAny* constructorParameters = reinterpret_cast<TAny*>(&aManager);
+
+    // Find implementation for our interface.
+    // - KIDWSFInterfaceUid is the UID of our custom ECOM interface.
+    // - This call will leave, if the plugin architecture cannot find any implementation.
+    // - The returned pointer points to one of the interface implementations.
+    TUid dtor_id_key;
+    TAny* intf = REComSession::CreateImplementationL ( KIDWSFInterfaceUid, dtor_id_key, constructorParameters );
+    //TAny* intf = REComSession::CreateImplementationL ( KIDWSFUid, _FOFF (CSIF, dtor_id_key), constructorParameters );
+    CSIF* sif = reinterpret_cast <CSIF*> (intf);
+    if ( sif )
+        {
+        
+        // Resolve the DataType of this plug-in (ECOM cue):
+        RImplInfoPtrArray ecomInfoArray;
+        REComSession::ListImplementationsL( KIDWSFInterfaceUid, ecomInfoArray );
+
+        TInt infoCount(ecomInfoArray.Count());
+        // NOTE: current code uses the plug-in that has highest version number
+        //TInt index_with_highest_version(0);
+        CImplementationInformation* match = NULL;
+        for (TInt i=0; i<infoCount; i++)
+            {
+            CImplementationInformation* candidate = ecomInfoArray[i];
+            if( !match || candidate->Version() > match->Version() )
+                {
+                match = candidate;
+                // index of plug-in with highest version number
+                //index_with_highest_version = i;
+                }
+            }
+        CleanupStack::PushL( sif );
+        sif->iData = new (ELeave) TSifData();
+        sif->iData->iDtor_ID_Key = dtor_id_key;
+        if( match )
+            {
+            sif->iData->iCue = match->DataType().AllocL();
+            }
+        CleanupStack::Pop( sif );
+        ecomInfoArray.ResetAndDestroy();        
+        }
+
+    return sif;
+    }
+
+// Interface's (abstract base class's) static factory method implementation.
+// Asks ECOM plug-in framework to instantiate appropriate concrete plug-in
+// implementation.
+inline CSIF* CSIF::NewL(const TDesC8& aCue, MSenCoreServiceManager& aManager)
+    {
+#ifndef RD_SEN_COMPILE_SIS_PACKAGE_FILES    
+    const TUid KCSIFInterfaceUid = {0x101F96F9};
+#else
+    const TUid KCSIFInterfaceUid = {0x101F9730};
+#endif    
+    //const TUid KCSIFResolverUid = {0x101F614E}; // default resolver used, not needed..
+
+    TEComResolverParams resolverParams;
+    resolverParams.SetDataType( aCue );
+    //resolverParams.SetWildcardMatch(ETrue); 
+    resolverParams.SetWildcardMatch(EFalse); 
+
+    TAny* constructorParameters = reinterpret_cast<TAny*>(&aManager);
+    
+
+    // Find implementation for our interface.
+    // - XXX is the UID of our custom ECOM
+    //   interface. It is defined in EComInterfaceDefinition.h          
+    // - This call will leave, if the plugin architecture cannot find implementation.
+    // - The returned pointer points to one of the interface implementations
+    TUid dtor_id_key;
+    TAny* intf = REComSession::CreateImplementationL (KCSIFInterfaceUid, dtor_id_key, constructorParameters, resolverParams); 
+    // TAny* intf = REComSession::CreateImplementationL (KCSIFInterfaceUid, _FOFF (CSIF, dtor_id_key), constructorParameters, resolverParams); 
+
+    CSIF* sif = reinterpret_cast<CSIF*> (intf);
+    if ( sif )
+        {
+        CleanupStack::PushL( sif );
+        sif->iData = new (ELeave) TSifData();
+        sif->iData->iDtor_ID_Key = dtor_id_key;
+        sif->iData->iCue = aCue.AllocL();
+        CleanupStack::Pop( sif );
+        }
+
+    return sif;
+    }
+
+// Interface's (abstract base class's) destructor
+inline CSIF::~CSIF()
+    {
+    // If in the NewL some memory is reserved for member data, it must be
+    // released here.
+    if( iData ) // actually, this MUST always be true
+        {
+        // Inform the ECOM framework that this specific instance of the
+        // interface has been destroyed.
+        REComSession::DestroyedImplementation ( iData->iDtor_ID_Key );
+        iData->Close(); // de-allocates iData members
+        delete iData;
+        iData = NULL;
+        }
+    }
+
+inline TPtrC8 CSIF::Cue() const
+    {
+    if(iData && iData->iCue)
+        return *(iData->iCue);
+    else
+        return KNullDesC8();
+    }
+    
+inline void CSIF::TSifData::Close()
+    {
+    delete iCue;
+    iCue = NULL;
+    }
+    
+
+// End of File