phonebookengines/VirtualPhonebook/inc/CVPbkEComImplementationsList.h
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/inc/CVPbkEComImplementationsList.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,204 @@
+/*
+* Copyright (c) 2007-2007 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:  Virtual Phonebook utility for listing ECOM implementations
+*
+*/
+
+
+#ifndef CVPBKECOMIMPLEMENTATIONSLIST_H
+#define CVPBKECOMIMPLEMENTATIONSLIST_H
+
+// INCLUDES
+#include <e32base.h>
+#include <ecom/ecom.h>
+
+// FORWARD DECLARATIONS
+
+/**
+ * Virtual Phonebook utility for listing ECOM implementations
+ *
+ * Lists all ecom implementations according to interface UID.
+ */
+class CVPbkEComImplementationsListBase : public CBase
+    {
+    public: // Construction and destruction
+        IMPORT_C ~CVPbkEComImplementationsListBase();
+
+    public: // Interface
+
+        /**
+         * Create ECOM implementations for aInterfaceUid and give aParam
+         * for them.
+         *
+         * @param aInterfaceUid An ECOM interface UID
+         * @param aParam The parameter for the implementations.
+         */
+        IMPORT_C void LoadImplementationsL( TUid aInterfaceUid, TAny* aParam );
+
+        /**
+         * Create ECOM implementations for aInterfaceUid and give aParam
+         * for them.
+         *
+         * @param aInterfaceUid An ECOM interface UID
+         * @param aResolverParams parameters for ECOM resolver
+         * @param aParam The parameter for the implementations.
+         */
+        IMPORT_C void LoadImplementationsL( TUid aInterfaceUid,
+                const TEComResolverParams& aResolverParams, TAny* aParam );
+
+        /**
+         * Returns the number of implementations in this list.
+         *
+         * @return the number of implementations in this list.
+         */
+        IMPORT_C TInt Count() const;
+
+        /**
+         * Returns the implementation at position aIndex
+         *
+         * @param aIndex the position of the implemetation.
+         * @return The implementation at position aIndex
+         */
+        IMPORT_C CBase& At( TInt aIndex ) const;
+
+        /**
+         * Returns the ECOM implementation information for implementation
+         * aImpl or NULL.
+         *
+         * @param aImpl The implementation retrieved using At() in this
+         *              list.
+         * @return The ECOM implementation information for implementation
+         *         aImpl or NULL.
+         */
+        IMPORT_C const CImplementationInformation* FindInfo(
+                CBase& aImpl ) const;
+
+    protected: // Interface
+        IMPORT_C CVPbkEComImplementationsListBase();
+
+    private: // Implementation
+        virtual CBase* CreateImplementationL( TUid aImplementationUid,
+                TAny* aParam ) = 0;
+        void DoLoadImplementationsL( RImplInfoPtrArray& aImplInfoPtrArray,
+                TAny* aParam );
+
+    private: // Data
+        class CEComImpl : public CBase
+            {
+            public:
+                CEComImpl( CImplementationInformation* aInfo,
+                    CBase* aImpl );
+                ~CEComImpl();
+                CImplementationInformation* iInfo;
+                CBase* iImpl;
+            };
+        RPointerArray<CEComImpl> iImplementations;
+    };
+
+/**
+ * A template for a list of type T ECOM implementations.
+ *
+ * An implementation class must be CBase derived class that has a
+ * NewL( TUid aImplementationUid, <ParamT>& aParam )
+ */
+template<typename T, typename ParamT>
+NONSHARABLE_CLASS( CVPbkEComImplementationsList )
+        :   public CVPbkEComImplementationsListBase
+    {
+    public: // See documentation from CVPbkEComImplementationsListBase
+        inline void LoadImplementationsL( TUid aInterfaceUid,
+                ParamT& aParam );
+        inline void LoadImplementationsL( TUid aInterfaceUid,
+                const TEComResolverParams& aResolverParams, ParamT& aParam );
+        inline TInt Count() const;
+        inline T& At( TInt aIndex ) const;
+        inline const CImplementationInformation* FindInfo( T& aImpl ) const;
+
+        // From CVPbkEComImplementationsListBase
+        inline CBase* CreateImplementationL( TUid aImplementationUid,
+                TAny* aParam );
+    };
+
+// --------------------------------------------------------------------------
+// CVPbkEComImplementationsList<T,ParamT>::LoadImplementationsL
+// --------------------------------------------------------------------------
+//
+template<typename T, typename ParamT>
+inline void CVPbkEComImplementationsList<T,ParamT>::LoadImplementationsL(
+        TUid aInterfaceUid, ParamT& aParam )
+    {
+    CVPbkEComImplementationsListBase::LoadImplementationsL( aInterfaceUid,
+            &aParam );
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkEComImplementationsList<T,ParamT>::LoadImplementationsL
+// --------------------------------------------------------------------------
+//
+template<typename T, typename ParamT>
+inline void CVPbkEComImplementationsList<T,ParamT>::LoadImplementationsL(
+        TUid aInterfaceUid, const TEComResolverParams& aResolverParams,
+        ParamT& aParam )
+    {
+    CVPbkEComImplementationsListBase::LoadImplementationsL( aInterfaceUid,
+            aResolverParams, &aParam );
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkEComImplementationsList<T,ParamT>::Count
+// --------------------------------------------------------------------------
+//
+template<typename T, typename ParamT>
+inline TInt CVPbkEComImplementationsList<T,ParamT>::Count() const
+    {
+    return CVPbkEComImplementationsListBase::Count();
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkEComImplementationsList<T,ParamT>::At
+// --------------------------------------------------------------------------
+//
+template<typename T, typename ParamT>
+inline T& CVPbkEComImplementationsList<T,ParamT>::At( TInt aIndex ) const
+    {
+    return static_cast<T&>( CVPbkEComImplementationsListBase::At( aIndex ));
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkEComImplementationsList<T,ParamT>::FindInfo
+// --------------------------------------------------------------------------
+//
+template<typename T, typename ParamT>
+const CImplementationInformation*
+        CVPbkEComImplementationsList<T,ParamT>::FindInfo(
+            T& aImpl ) const
+    {
+    return CVPbkEComImplementationsListBase::FindInfo( aImpl );
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkEComImplementationsList<T,ParamT>::CreateImplementationL
+// --------------------------------------------------------------------------
+//
+template<typename T, typename ParamT>
+inline CBase* CVPbkEComImplementationsList<T,ParamT>::CreateImplementationL(
+        TUid aImplementationUid, TAny* aParam )
+    {
+    return T::NewL( aImplementationUid,
+            *reinterpret_cast<ParamT*>( aParam ) );
+    }
+
+#endif // CVPBKECOMIMPLEMENTATIONSLIST_H
+//End of file
+