languageinterworkingfw/servicehandler/src/liwservicedata.cpp
changeset 0 99ef825efeca
child 27 bcef26ca2be3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/languageinterworkingfw/servicehandler/src/liwservicedata.cpp	Mon Mar 30 12:51:20 2009 +0300
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:       Class modelling service provider data. The important
+*				 service provider data that are part of this class
+*				 is metadata information.
+*
+*/
+
+
+
+
+
+
+
+#include "LiwServiceData.h"
+#include <LiwVariant.h>
+#include <LiwGenericParam.h>
+
+#include <escapeUtils.h>
+
+#include <BADESCA.H> 
+
+/**
+* Creates and returns an instance of \c CLiwServiceData
+*
+* @return an instance of \c CLiwServiceData
+*/
+CLiwServiceData* CLiwServiceData::NewL()
+{
+	CLiwServiceData* srvData = CLiwServiceData::NewLC();
+	CleanupStack::Pop(srvData);
+	return srvData;
+}
+
+/**
+* Creates and returns an instance of \c CLiwServiceData.
+* Leaves the created instance in the cleanupstack. 
+*
+* @return an instance of \c CLiwServiceData
+*/
+CLiwServiceData* CLiwServiceData::NewLC()
+{
+	CLiwServiceData* srvData = new (ELeave) CLiwServiceData();
+	CleanupStack::PushL( srvData );
+	srvData->ConstructL();
+	return srvData;
+}
+
+/**
+* Default constructor
+*
+*/
+CLiwServiceData::CLiwServiceData():iDataList(NULL)
+{
+}
+
+/**
+* Instantiates metadata instance
+*
+*/
+void CLiwServiceData::ConstructL()
+{
+	iDataList = CLiwGenericParamList::NewL();
+}
+
+/**
+* Destructor. Cleans up the metadata instance
+*
+*/
+CLiwServiceData::~CLiwServiceData()
+{
+	if(iDataList)
+	{
+		iDataList->Reset();
+		delete iDataList;
+	}
+}
+
+CLiwGenericParamList* CLiwServiceData::GetMetaData() const
+{
+	if(iDataList)
+		return iDataList;
+	else
+		return NULL;
+}
+
+void CLiwServiceData::AddMetaDataL(const TDesC8& aKey, const TLiwVariant& aValue)
+{
+	TInt idx(0);
+	const TLiwGenericParam* constParam = iDataList->FindFirst(idx,aKey);
+	
+	if(constParam)
+	{
+			TLiwGenericParam* param = const_cast<TLiwGenericParam*>(constParam);
+			
+			//list exists already..fetch the value list and append aValue to it
+			CLiwList* pValues = const_cast<CLiwList*>(param->Value().AsList());
+			pValues->AppendL(aValue);
+	}
+	else
+	{
+	 		//key does not exist so far..
+			CLiwList* pValues = CLiwDefaultList::NewLC();
+			pValues->AppendL(aValue);
+			
+			iDataList->AppendL(TLiwGenericParam(aKey,TLiwVariant(pValues)));
+			CleanupStack::Pop(pValues);
+			pValues->DecRef();
+	}
+}
+
+/*
+ * Adds a metadata name-value pair if not already added. If the key already
+ * exists, then the new metadata value (if does not exist already) will be added
+ * to the list of values associated with a metadata key.
+ *
+ * @param aKey		the metadata key to be inserted
+ * @param aValue  the metadata value corresponding to the key to be added
+ *
+ */
+void CLiwServiceData::AddMetaDataL(const TDesC8& aKey, const TDesC8& aValue)
+{
+	HBufC *buff = EscapeUtils::ConvertToUnicodeFromUtf8L(aValue);
+	CleanupStack::PushL(buff);
+	TPtrC ptr = buff->Des();
+    TLiwVariant tempVar(ptr);
+    tempVar.PushL();
+    
+	this->AddMetaDataL(aKey,tempVar);
+	
+	CleanupStack::Pop(&tempVar);
+	tempVar.Reset();
+	CleanupStack::PopAndDestroy(buff);	
+}
+
+/*
+ * Removes all the metadata key-value pairs.
+ * This is called from service handler implementation if and only
+ * if there is an error in parsing. Since, the FW uses SAX parser
+ * and if the XML error happens after the metadata entries are 
+ * created, the entries should be cleaned up.
+ *
+ */
+void CLiwServiceData::CleanUpMetaData()
+{
+	iDataList->Reset();
+}
+