commsfwtools/preparedefaultcommsdatabase/Tools/ced/src/CXMLFile.cpp
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsfwtools/preparedefaultcommsdatabase/Tools/ced/src/CXMLFile.cpp	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,168 @@
+// Copyright (c) 1997-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:
+//
+
+#include "dbdef.h"
+#include <ecom/ecom.h>
+#include <xml/parser.h>
+#include <xml/xmlparsererrors.h>
+#include "CXMLFile.h"
+
+#include "filedump.h"
+extern CFileDump* gMsg;		// logging
+
+using namespace Xml;
+
+_LIT8(KParserDataType, "text/xml");
+
+CXMLData::CXMLData(CXMLDatabase* aXmlDb, TBool aForceXMLProcessing, TBool aAppendMode) 
+: xmlDb(aXmlDb)
+, bForceXMLProcessing(aForceXMLProcessing)
+, iAppendMode(aAppendMode)
+	{
+	__DECLARE_NAME(_S("CXMLData"));
+	}
+
+CXMLData::~CXMLData()
+	{
+	}
+
+CXMLData*
+CXMLData::NewL(RFs& aFs, const TDesC& aName, CXMLDatabase* aXmlDb, 
+               TBool aForceXMLProcessing,
+               TBool aAppendMode)
+	{
+	CXMLData* p = new(ELeave) CXMLData(aXmlDb,aForceXMLProcessing, aAppendMode);
+	CleanupStack::PushL(p);
+
+	if(!p->ConstructL(aFs,aName,aXmlDb))
+		{
+		CleanupStack::PopAndDestroy(p);	
+		p = NULL;
+		}
+	else
+		{
+		CleanupStack::Pop(p);
+		}
+	
+	return p;
+	}
+
+//
+// Parse the XML settings file
+//
+TBool CXMLData::ConstructL(RFs& aFs, const TDesC& aName, CXMLDatabase* aXmlDb)
+	{    	
+	// Create the content handler for the XML file
+	//CXMLContentHandler contentHandler;
+	CXMLContentHandler* contentHandler = CXMLContentHandler::NewL(aXmlDb,
+	                                                              bForceXMLProcessing,
+	                                                              iAppendMode);
+	TBool retCode = EFalse;
+	
+	// Create the XML parser (SAX-type)
+	gMsg->Msg(_L("Create the parser"));
+	CParser* parser = CParser::NewLC(KParserDataType, *contentHandler);
+	
+	// Perform the parsing
+	gMsg->Msg(_L("Starting the parsing"));
+	ParseL(*parser, aFs, aName);
+    CleanupStack::PopAndDestroy(parser);    
+	
+    // Modify the table entry references to the format used by CommDB
+	TBool bSuccess = contentHandler->ModifyTableEntryReferencesL();
+	if(bSuccess) 
+	    {
+	    retCode = ETrue;
+	    // Log the table entries
+	    contentHandler->LogTableEntries();
+	    }
+	
+	CleanupStack::PopAndDestroy(contentHandler);
+	
+	return retCode;
+	}
+
+// Get a setting from the XML database for a specific table entry given the name of the
+// table parameter
+TInt CXMLData::GetSetting(const TInt aEntryIndex, const TDesC & aParamName, TPtrC & aParamValue)
+	{
+    CXMLTableEntry* entry = xmlDb->GetTableEntry(aEntryIndex);
+	
+	for(TInt k = 0; k < entry->GetNumberParameters(); k++)
+		{
+		const TBuf<MAX_BUFFER_LEN>& paramName = entry->GetParameterName(k);
+		
+		if(paramName.Compare(aParamName) == 0)
+			{
+			aParamValue.Set(TPtrC(entry->GetParameterValue(k)));
+			return ETrue;
+			}
+		}
+	
+    return EFalse;
+	}
+
+// Get the starting index for all table entries of a specific table. If table entries
+// of the specified table do not exist then -1 is returned
+TInt CXMLData::GetStartingIndex(const TDesC& aTableName)
+	{
+	TInt numEntries = xmlDb->GetNumberTableEntries();
+	
+    for(TInt i = 0; i < numEntries; i++)
+		{
+		CXMLTableEntry* entry = xmlDb->GetTableEntry(i);
+		const TBuf<MAX_BUFFER_LEN>& tableName = entry->GetTableName();
+		
+		if(tableName.Compare(aTableName) == 0)
+			return i;
+		}
+	
+	return -1;
+	}
+
+// Get the last index for the table entries of a specific table. If table entries
+// of the specified table do not exist then -1 is returned
+TInt CXMLData::GetLastIndex(const TDesC& aTableName)
+	{
+	TInt numEntries = xmlDb->GetNumberTableEntries();
+	
+    for(TInt i = numEntries-1; i >= 0; i--)
+		{
+		CXMLTableEntry* entry = xmlDb->GetTableEntry(i);
+		const TBuf<MAX_BUFFER_LEN>& tableName = entry->GetTableName();
+		
+		if(tableName.Compare(aTableName) == 0)
+			return i;
+		}
+	
+	return -1;
+	}
+
+// Get the number of parameters for a specific table entry
+TInt CXMLData::GetEntryNumberParameters(const TInt aEntryIndex)
+	{
+	return xmlDb->GetTableEntry(aEntryIndex)->GetNumberParameters();
+	}
+
+// Get the type of operation to perform for this table entry
+const TBuf<MAX_BUFFER_LEN>& CXMLData::GetOperation(const TInt aEntryIndex)
+	{
+	return xmlDb->GetTableEntry(aEntryIndex)->GetOperation();
+	}
+	
+TInt CXMLData::GetElementRecordID(const TInt aEntryIndex) const
+    {
+    return xmlDb->GetTableEntry(aEntryIndex)->GetRecordID();
+    }