syncmlfw/ds/hostserver/dshostserverbase/inc/Nsmldsdataproviderarray.h
changeset 0 b497e44ab2fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/ds/hostserver/dshostserverbase/inc/Nsmldsdataproviderarray.h	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,210 @@
+/*
+* Copyright (c) 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:  array for storing dataproviders and datastores.
+*
+*/
+
+
+#ifndef __NSMLDSDATAPROVIDERARRAY_H__
+#define __NSMLDSDATAPROVIDERARRAY_H__
+
+// INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+#include <nsmldsconstants.h>
+#include <nsmlconstants.h>
+
+#include "nsmldshostconstants.h"
+#include "nsmldshostitem.h"
+#include "nsmldsitemmodificationset.h"
+
+// FORWARD DECLARATIONS
+class CSmlDataProvider;
+class CSmlDataStore;
+class CNSmlDSAsyncRequestHandler;
+class CNSmlAdapterLog;
+class CSmlDataStoreFormat;
+
+// CLASS DECLARATION
+
+// ------------------------------------------------------------------------------------------------
+// Container for CSmlDataStore.
+//
+// @lib nsmldshostserver.lib
+// ------------------------------------------------------------------------------------------------
+typedef RPointerArray<TSmlDbItemUid> RBatchItemUidArray;
+
+struct TNSmlDSDataStoreElement
+    {
+	public:
+		/**
+		* deletes iBatchItemUids and its objects.
+		*/
+		void FreeBatchItemArray();
+    
+		/**
+		* is iDataStore opened.
+		* @return TBool. ETrue if iDataStore is opened, EFalse otherwise.
+		*/
+		TBool IsOpen() const;
+    
+		/**
+		* sets iDataStore as opened.
+		*/
+		void SetOpened();
+		
+		/**
+		* The name of iDataStore.
+		* @return const TDesC&. The name of iDataStore
+		*/	
+		const TDesC& StoreName() const;
+		
+		void setStoreFormat( CSmlDataStoreFormat* aDSFormat );
+	private:
+
+		/**
+		* C++ default constructor.
+		*/
+		TNSmlDSDataStoreElement( const HBufC* aStoreName );
+		
+	public:		//Data
+
+		//This class doesn't free memory reserved for member variable pointers.
+		
+		CNSmlDSAsyncRequestHandler* iDSAO;	//async handler for the data store. 
+    										//Null if no asynch call outstanding
+		CSmlDataStore* iDataStore;			//contained data store
+		RBatchItemUidArray* iBatchItemUids;	//array of item uid when in batch mode.
+		CNSmlAdapterLog* iAdpLog;			//sync relationship
+		TSmlDbItemUid iCreatedUid;			//uid for CSmlDataStore::CreateItemL
+		TNSmlHostMode iHostMode;			//data store mode
+	private:	//Data
+
+		const HBufC* iStoreName; //Only temporary. Contains store name only when created but not yet opened. 
+		CSmlDataStoreFormat* iDSFormat;		//data store format.
+	private:
+
+		friend class RNSmlDSDataProviderArray;	
+    };
+    
+// ------------------------------------------------------------------------------------------------
+// Container for CSmlDataProvider.
+//
+// @lib nsmldshostserver.lib
+// ------------------------------------------------------------------------------------------------
+typedef RPointerArray<TNSmlDSDataStoreElement> RDataStoreElementArray;
+
+struct TNSmlDSDataProviderElement
+    {
+    //This class doesn't free memory reserved for member variable pointers.
+    CSmlDataProvider* iDataprovider;
+    RDataStoreElementArray* iDataStores;	//created data stores for data provider.
+    };
+
+// ------------------------------------------------------------------------------------------------
+// Array for created data providers and created and opened data stores. 
+//
+// @lib nsmldshostserver.lib
+// ------------------------------------------------------------------------------------------------
+class RNSmlDSDataProviderArray : protected RPointerArray<TNSmlDSDataProviderElement>
+    {
+	public: //Constructor and destructor
+
+		/**
+		* A C++ constructor of this class. 
+		*/
+		RNSmlDSDataProviderArray();
+
+	public:
+    
+		/**
+		* Destroys all the the elements and resets the array.
+		*/
+		void ResetAndDestroy();
+		
+    	/**
+		* Finds and returns the dataprovider using data provider id. 
+		* @param aId. Search key.
+		* @return CSmlDataProvider*. The object found or NULL if no match.
+		*/
+		CSmlDataProvider* DataProvider( TSmlDataProviderId aId );
+    
+		/**
+		* Finds and returns the dataprovider element using data provider id. 
+		* @param aId. Search key.
+		* @return TNSmlDSDataProviderElement*. The object found or NULL if no match.
+		*/
+		TNSmlDSDataProviderElement* DataProviderElement( TSmlDataProviderId aId );
+    
+		/**
+		* Finds and returns the datastore using data provider id and store name. 
+		* @param aId. Search key. data provider id
+		* @param aId. Search key. Store name.
+		* @return CSmlDataStore*. The object found or NULL if no match.
+		*/
+		CSmlDataStore* DataStore( TSmlDataProviderId aId, const TDesC& aStoreName );
+    
+		/**
+		* Finds and returns the datastore element from data provider element 
+		* using data provider id and store name. 
+		* @param aId. Search key. data provider id
+		* @param aId. Search key. Store name.
+		* @return TNSmlDSDataStoreElement*. The object found or NULL if no match.
+		*/
+		static TNSmlDSDataStoreElement* DataStoreElement( const TNSmlDSDataProviderElement* aItem, 
+    		const TDesC& aStoreName );
+    
+		/**
+		* Inserts data provider to the array. Leaves if fails.
+		* @param aDataprovider. Data provider to add.
+		* @return TInt. KErrNone if object is inserted.
+		*               KErrAlreadyExists if object is already inserted.
+		*/
+		TInt InsertL( CSmlDataProvider* aDataprovider );
+    
+		/**
+		* Inserts created data store to data provider element.
+		* @param aDataproviderItem. object where to add.
+		* @param aDataStore. datastore to add.
+		* @param aDataStoreName. store name for aDataStore.
+		* @return TNSmlDSDataStoreElement*. Newly created data store element, that contains aDataStore.
+		*/    
+		TNSmlDSDataStoreElement* InsertL( TNSmlDSDataProviderElement* aDataproviderItem, 
+    							CSmlDataStore* aDataStore, HBufC* aDataStoreName );
+
+		/**
+		* Removes and frees the memory reserved to data store element. 
+		* Doesn't free the returned object. Caller must take the ownership of that.
+		* @param aDataproviderItem. data provider element where to remove.
+		* @param aDataStoreItem. data store to remove.
+		* @return CNSmlDSAsyncRequestHandler*. Request handler for aDataStoreItem. 
+		* NULL if no asynchronous request is outstanding.
+		*/    						
+		CNSmlDSAsyncRequestHandler* Remove( TNSmlDSDataProviderElement* aDataproviderItem, 
+    		TNSmlDSDataStoreElement* aDataStoreItem );
+    		
+	protected:
+
+		/**
+		* Destroys data store element.
+		* @param aDataStoreItem. data store element to destroy. After destruction points to NULL.
+		* @return CNSmlDSAsyncRequestHandler*. Request handler for aDataStoreItem. 
+		* NULL if no asynchronous request is outstanding.
+		*/
+		static CNSmlDSAsyncRequestHandler* Destroy( TNSmlDSDataStoreElement*& aDataStoreItem );
+    };    
+
+#endif //__NSMLDSDATAPROVIDERARRAY_H__
+
+// End of File