diff -r 000000000000 -r dfb7c4ff071f commsfwtools/preparedefaultcommsdatabase/Tools/ced/src/CXMLFile.cpp --- /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 +#include +#include +#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& 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& 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& 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& CXMLData::GetOperation(const TInt aEntryIndex) + { + return xmlDb->GetTableEntry(aEntryIndex)->GetOperation(); + } + +TInt CXMLData::GetElementRecordID(const TInt aEntryIndex) const + { + return xmlDb->GetTableEntry(aEntryIndex)->GetRecordID(); + }