cmmanager/cmmgr/Framework/Inc/cmobjectpool.h
changeset 0 5a93021fdf25
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmmanager/cmmgr/Framework/Inc/cmobjectpool.h	Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,188 @@
+/*
+* Copyright (c) 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:  Object pool for storing destinations and connection
+*                methods.
+*
+*/
+
+#ifndef CMOBJECTPOOL_H
+#define CMOBJECTPOOL_H
+
+class CCmPluginBaseEng;
+class CCmPluginBase;
+class CCmManagerImpl;
+
+// User includes
+#include "cmdestinationimpl.h"
+#include <e32def.h>
+
+/**
+ *  Object pool to  hold destination implementations and 
+ *  connetion method implementations
+ *
+ *  The get and remove functions must be used in pairs
+ */
+NONSHARABLE_CLASS( CCMObjectPool ) : public CBase
+	{
+
+	public:
+		CCMObjectPool(CCmManagerImpl& aCmManagerImpl);
+		virtual ~CCMObjectPool();
+        /**
+        * If the destinaton impl is in the pool returns a pointer to it. 
+        * If the destinaton impl is not in the pool creates it.
+        *
+        * @param aDestinationId - ID of the destination requested
+        * @return pointer to the destination - ownership passed
+        */         
+        CCmDestinationImpl* GetDestinationL( TUint32 aDestinationId );
+        /**
+        * If the destinaton impl is in the pool returns a pointer to it. 
+        * If the destinaton impl is not in the pool creates it.
+        *
+        * @param aName - name of the destination requested
+        * @return pointer to the destination - ownership passed
+        */         
+        CCmDestinationImpl* GetDestinationL( const TDesC& aName );
+
+        /**
+        * Creates a destination if it does not exist.
+        * 
+        * @param aName - name of the destination requested
+        * @param aDestId - predefined id for the destination
+        * @return pointer to the destination - ownership passed
+        */         
+        CCmDestinationImpl* CreateDestinationL( const TDesC& aName, TUint32 aDestId );
+
+        /**
+        * Returns a pointer to an allready existing connecton method
+        *
+        * @param aCmId - ID of the CM requested
+        * @param aParentDest - parent destination
+        * @return plugin instance - ownership passed
+        */         
+        CCmPluginBase* GetConnectionMethodL( TUint32             aCmId, 
+                                             CCmDestinationImpl* aParentDest );
+        /**
+        * Creates cm and places it into the pool.
+        *
+        * @param aImplementationUid - Bearer Type
+        * @param aParams Init params for the plugin
+        * @return plugin instance - ownership passed
+        */         
+        CCmPluginBase* CreateConnectionMethodL( TUint32 aImplementationUid, 
+                                 TCmPluginInitParam& aParams );
+
+        /**
+        * Creates cm and places it into the pool.
+        *
+        * @param aImplementationUid - Bearer Type
+        * @param aParams Init params for the plugin
+        * @param aConnMethodId Predefined id for the connection method.
+        * @return plugin instance - ownership passed
+        */         
+        CCmPluginBase* CreateConnectionMethodL( TUint32 aImplementationUid, 
+                                                TCmPluginInitParam& aParams,
+                                                TUint32 aConnMethodId );
+
+        /**
+        * Creates cm and places it into the pool.
+        *
+        * @param pluginBaseEng - Object to put in the pool
+        * @return plugin instance - ownership passed
+        */         
+        CCmPluginBase* CreateConnectionMethodL( CCmPluginBaseEng* pluginBaseEng );
+
+        /**
+        * Insert cm and places it into the pool.
+        * API doesn't use CCmPluginBase. So, nothing returns
+        *
+        * @param pluginBaseEng - Object to put in the pool
+        */         
+        void InsertConnectionMethodL( CCmPluginBaseEng* pluginBaseEng );
+
+        /**
+        * Removes a destination impl from the object pool. 
+        *
+        * @param aDestination - the destination to remove
+        */         
+        void RemoveDestination( CCmDestinationImpl* aDestination );
+        
+        /**
+        * Removes a destination data from the object pool. 
+        *
+        * @param aDestination - the destination to remove
+        */         
+        void RemoveDestination( CCmDestinationData* aDestination );
+        
+        /**
+        * Removes a connection method impl from the object pool. 
+        *
+        * @param aDestinationId - ID of the connection method to remove
+        */         
+        void RemoveConnectionMethodL( CCmPluginBase* aCM );
+        
+        /**
+        * Removes a connection method impl from the object pool. 
+        *
+        * @param aDestinationId - ID of the connection method to remove
+        */         
+        void RemoveConnectionMethodL( CCmPluginBaseEng* aCM );
+
+        /**
+        * This is called after the new destination have been updated 
+        * This function updates the iDestinationId 
+        * field in the TObjectPoolDestinationItem
+        *
+        * @param aDestination - the destination to change
+        */         
+        void DestinationUpdated( CCmDestinationImpl* aDestination );
+
+        /**
+        * This is called after the new cm have been updated 
+        * This function updates the Id 
+        * field
+        *
+        * @param aCM - the CM to change
+        */         
+        void ConnMethodUpdatedL( CCmPluginBaseEng* aCM );
+        
+    private:
+		class TObjectPoolDestinationItem  
+		    {
+		    public:
+                TObjectPoolDestinationItem(
+                        CCmDestinationData* aDestinationItem, 
+                        TUint32             aDestinationId);  
+    		    TInt                iDestinationId;
+    		    CCmDestinationData* iDestinationItem;
+		    };
+		class TObjectPoolCMItem  
+		    {
+		    public:
+                TObjectPoolCMItem(
+                        CCmPluginBaseEng* iConnectionMethodItem, 
+                        TUint32           iConnectionMethodId); 
+    		    TInt                iConnectionMethodId;
+    		    CCmPluginBaseEng*   iConnectionMethodItem;
+		    };
+	private:
+	    CCmManagerImpl&                     iCmManagerImpl;
+	    // object pool for holding destination implementations
+	    RArray<TObjectPoolDestinationItem>  iDestinationArray;
+	    // object pool for holding connetion method implementations
+	    RArray<TObjectPoolCMItem>           iConnectionMethodArray;
+};
+
+#endif // CMOBJECTPOOL_H