datacommsserver/esockserver/inc/es_parameterfamily.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/inc/es_parameterfamily.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,210 @@
+// Copyright (c) 2007-2009 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:
+// Generic parameter family bundles:
+// Serialisable containers for structured custom data.
+// FamilyBundle
+// has 0..n
+// Parameter Families
+// each of which has 0..n
+// ParameterSets
+// 
+//
+// Note: Every effort should be made to ensure that the classes forming this API be kept consistent with each other
+// When making changes to these classes also see the files es_parameterbundle.h, es_parameterfamily.h,
+// ss_parameterfamilybundle.h
+//
+
+/**
+ @file
+ @publishedPartner
+ @released
+*/
+
+#ifndef __ES_PARAMETERFAMILY_H
+#define __ES_PARAMETERFAMILY_H
+
+#include <comms-infras/es_parameterset.h>
+#include <comms-infras/metacontainer.h>
+#include <comms-infras/metatype.h>
+#include <es_sock.h>
+
+class CParameterSetContainer;
+class CGenericParameterBundle;
+class RParameterFamilyBundle;
+
+
+/**
+Wrapper round CParameterSetContainer presenting the following interface:
+For each Parameter Type (Requested, Acceptable and Granted) it contains 0..N parameter sets.
+@released
+*/
+class RParameterFamily
+	{
+	friend class RParameterFamilyBundle;
+	friend class RParameterFamilyBundleC;
+
+public:
+	enum TParameterSetType
+         {
+         ERequested = 0,
+         EAcceptable = 1,
+		 EGranted = 2,
+		 ENumValues = 3 // The number of values in this enum
+         };
+
+	RParameterFamily()
+		: iContainer(NULL)
+		{
+		}
+
+public:
+	// creation & deserialising
+	IMPORT_C void CreateL(RParameterFamilyBundle& aBundle, TUint32 aFamilyId);
+	IMPORT_C void LoadL(RParameterFamilyBundle& aBundle, TPtrC8& aBuffer);
+
+	// serialising
+	IMPORT_C TUint Length() const;
+	IMPORT_C TInt Store(TDes8& aDes) const;
+
+	// check if we're pointing to something valid
+	inline TBool IsNull() const;
+
+	// destruction
+	IMPORT_C void Destroy();
+
+public:
+	// adding parameter sets
+	IMPORT_C TInt AddParameterSet(XParameterSetBase* aParameterSet, TParameterSetType aType);
+	IMPORT_C void AddParameterSetL(XParameterSetBase* aParameterSet, TParameterSetType aType);
+ 
+	// counting parameter sets
+	IMPORT_C TInt CountParameterSets(TParameterSetType aType);
+ 
+	// getting/finding parameter sets
+	IMPORT_C XParameterSetBase* GetParameterSetAtIndex(TUint aIndex, TParameterSetType aType);
+	IMPORT_C XParameterSetBase* FindParameterSet(Meta::STypeId aSetId, TParameterSetType aType);
+
+	// getting/finding parameter sets (const)
+	const XParameterSetBase* GetParameterSetAtIndex(TUint aIndex, TParameterSetType aType) const
+		{return const_cast<RParameterFamily&>(*this).GetParameterSetAtIndex(aIndex,aType);}
+	const XParameterSetBase* FindParameterSet(const Meta::STypeId& aSetId, TParameterSetType aType) const
+		{return const_cast<RParameterFamily&>(*this).FindParameterSet(aSetId,aType);}
+
+	// removing parameter set, and relinquish ownership to caller
+	IMPORT_C TInt RemoveParameterSet(XParameterSetBase* aSetToRemove, TParameterSetType aType);
+	IMPORT_C TInt RemoveAndDestroyParameterSet(XParameterSetBase* aSetToRemove, TParameterSetType aType);
+
+	// ID of the parameter family
+	IMPORT_C TUint32 Id() const;
+
+	// clear all parameters of specified type
+	IMPORT_C void ClearAllParameters(TParameterSetType aType);
+
+	IMPORT_C TInt CountParameterSets();
+
+	IMPORT_C TInt DeleteParameterSet(TInt aIndex);
+	IMPORT_C void DeleteParameterSetL(TInt aIndex);
+
+	IMPORT_C TInt ClearParameterSetPointer(TInt aIndex, TParameterSetType aType);
+	
+private:
+	CParameterSetContainer* iContainer; // not necessarily owned.
+	};
+
+
+/**
+Bundle of (i.e. container for) parameter families.
+May contain and 0..N parameter families.
+@released
+*/
+class RParameterFamilyBundleC
+	{
+	friend class RParameterFamily;
+	friend class RParameterFamilyBundle;
+
+public:
+	// creation & deserialising
+	IMPORT_C void CreateL();
+	IMPORT_C void LoadL(TDesC8& aDes);
+	IMPORT_C TInt Load(const TDesC8& aDes);
+
+	// serialising
+	IMPORT_C TUint Length() const;
+	IMPORT_C TInt Store(TDes8& aDes) const;
+
+	// check if we're pointing to something valid
+	inline TBool IsNull() const;
+	
+	// destruction
+	IMPORT_C void Destroy();
+
+	// get/find families
+	IMPORT_C const RParameterFamily GetFamilyAtIndex(TUint aIndex) const;
+	IMPORT_C const RParameterFamily FindFamily(TUint32 aFamilyId) const;
+
+	RParameterFamilyBundleC()
+		: iBundle(NULL)
+		{
+		}
+
+private:
+	RParameterFamilyBundleC(const RParameterFamilyBundleC& aBundle);
+	RParameterFamilyBundleC& operator=(const RParameterFamilyBundleC& aBundle);
+
+private:
+	CGenericParameterBundle* iBundle;
+	};
+
+
+/**
+Bundle of (i.e. container for) parameter families.
+May contain and 0..N parameter families.
+@released
+*/
+class RParameterFamilyBundle : public RParameterFamilyBundleC
+	{
+public:
+	// adding/creating families
+	IMPORT_C RParameterFamily CreateFamilyL(TUint32 aFamilyId);
+	
+	// get/find families (non-const version)
+	IMPORT_C RParameterFamily GetFamilyAtIndex(TUint aIndex);
+	IMPORT_C RParameterFamily FindFamily(TUint32 aFamilyId);
+
+	// clear all parameters
+	IMPORT_C void ClearAllParameters(RParameterFamily::TParameterSetType aType);
+
+	RParameterFamilyBundle()
+		: RParameterFamilyBundleC()
+		{
+		}
+
+	IMPORT_C TInt CountParameterFamilies() const;
+	IMPORT_C TInt DeleteFamilyAtIndex(TInt aIndex);
+	IMPORT_C void RemoveFamilyAtIndex(TInt aIndex);
+	
+private:
+	RParameterFamilyBundle(const RParameterFamilyBundle& aBundle);
+	RParameterFamilyBundle& operator=(const RParameterFamilyBundle& aBundle);
+	};
+
+
+#include <comms-infras/es_parameterfamily.inl>
+
+#endif
+// __ES_PARAMETERFAMILY_H
+
+
+
+