--- /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();
+ }