diff -r 000000000000 -r e35f40988205 xml/xmldomandxpath/src/xmlengineserializer/xmlengdeserializerdom.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/xmldomandxpath/src/xmlengineserializer/xmlengdeserializerdom.cpp Thu Dec 17 09:29:21 2009 +0200 @@ -0,0 +1,223 @@ +// Copyright (c) 2006-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: +// XML DOM Deserializer implementation +// + +#include +#include +#include +#include "xmlengdomcontenthandler.h" + +#include +#include +#include + +using namespace Xml; + +// -------------------------------------------------------------------------------------- +// Creates an instance of CXmlEngDeserializerDOM +// -------------------------------------------------------------------------------------- +// +EXPORT_C CXmlEngDeserializerDOM* CXmlEngDeserializerDOM::NewL() + { + CXmlEngDeserializerDOM* self = new (ELeave) CXmlEngDeserializerDOM; + return self; + } + +// -------------------------------------------------------------------------------------- +// Set input type as file +// -------------------------------------------------------------------------------------- +// +EXPORT_C void CXmlEngDeserializerDOM::SetInputFileL(const TDesC& aFileName, TXmlEngDeserializerType aType) + { + if(iInputFileName) + { + delete iInputFileName; + iInputFileName=NULL; + } + iBuffer.Set(KNullDesC8()); + iInputFileName = aFileName.AllocL(); + iType = aType; + } + +// -------------------------------------------------------------------------------------- +// Set input type as buffer +// -------------------------------------------------------------------------------------- +// +EXPORT_C void CXmlEngDeserializerDOM::SetInputBuffer(const TDesC8& aBuffer, TXmlEngDeserializerType aType) + { + if(iInputFileName) + { + delete iInputFileName; + iInputFileName=NULL; + } + iBuffer.Set(aBuffer); + iType = aType; + } + +// -------------------------------------------------------------------------------------- +// Set external data array +// -------------------------------------------------------------------------------------- +// +EXPORT_C void CXmlEngDeserializerDOM::UseExternalDataL(RArray& aList) + { + iDataList = &aList; + } + + +// -------------------------------------------------------------------------------------- +// Fetches external data registered in this deserializer +// -------------------------------------------------------------------------------------- +// +EXPORT_C RArray* CXmlEngDeserializerDOM::ExternalData() + { + return iDataList; + } + +// -------------------------------------------------------------------------------------- +// Serializes TXmlEngNode to file +// -------------------------------------------------------------------------------------- +// +EXPORT_C RXmlEngDocument CXmlEngDeserializerDOM::DeserializeL() + { + RXmlEngDocument doc; + if(iInputFileName) + { + RFs fs; + CleanupClosePushL(fs); + User::LeaveIfError(fs.Connect()); + doc =DeserializeL(fs, *iInputFileName, iType); + CleanupStack::PopAndDestroy(&fs); + return doc; + } + else if(iBuffer.Length()) + { + return DeserializeL(iBuffer, iType); + } + else + { + User::Leave(KXmlEngErrNoParameters); + } + return doc; + } + +// -------------------------------------------------------------------------------------- +// Deserialize document +// -------------------------------------------------------------------------------------- +// +EXPORT_C RXmlEngDocument CXmlEngDeserializerDOM::DeserializeL(const TDesC& aFileName, + TXmlEngDeserializerType aType) + { + RFs fs; + CleanupClosePushL(fs); + User::LeaveIfError(fs.Connect()); + RXmlEngDocument doc = DeserializeL(fs,aFileName,aType); + CleanupStack::PopAndDestroy(&fs); + return doc; + } + +// -------------------------------------------------------------------------------------- +// Deserialize document +// -------------------------------------------------------------------------------------- +// +EXPORT_C RXmlEngDocument CXmlEngDeserializerDOM::DeserializeL(RFs& aRFs, + const TDesC& aFileName, + TXmlEngDeserializerType aType) + { + if(!iImpl) + { + User::Leave(KXmlEngErrWrongUseOfAPI); + } + + RXmlEngDocument doc; + doc.OpenL(*iImpl); + CleanupClosePushL(doc); + + CXmlEngDOMContentHandler* handler = CXmlEngDOMContentHandler::NewL(doc); + CleanupStack::PushL(handler); + + CXmlEngDeserializer* des = CXmlEngDeserializer::NewL(*handler,aType); + CleanupStack::PushL(des); + + des->UseExternalDataL(*iDataList); + des->EnableFeature(EReportNamespaceMapping); + des->DeserializeL(aRFs,aFileName); + + CleanupStack::PopAndDestroy(des); + CleanupStack::PopAndDestroy(handler); + CleanupStack::Pop(&doc); + + return doc; + } + +// -------------------------------------------------------------------------------------- +// Deserialize document +// -------------------------------------------------------------------------------------- +// +EXPORT_C RXmlEngDocument CXmlEngDeserializerDOM::DeserializeL(const TDesC8& aBuffer, + TXmlEngDeserializerType aType) + { + if(!iImpl) + { + User::Leave(KXmlEngErrWrongUseOfAPI); + } + + RXmlEngDocument doc; + doc.OpenL(*iImpl); + CleanupClosePushL(doc); + + CXmlEngDOMContentHandler* handler = CXmlEngDOMContentHandler::NewL(doc); + CleanupStack::PushL(handler); + + CXmlEngDeserializer* des = CXmlEngDeserializer::NewL(*handler,aType); + CleanupStack::PushL(des); + + des->UseExternalDataL(*iDataList); + des->EnableFeature(EReportNamespaceMapping); + des->DeserializeL(aBuffer); + + CleanupStack::PopAndDestroy(des); + CleanupStack::PopAndDestroy(handler); + CleanupStack::Pop(&doc); + + return doc; + } + +// -------------------------------------------------------------------------------------- +// Sets DOM implementation that should be used during document creating. +// -------------------------------------------------------------------------------------- +// +EXPORT_C void CXmlEngDeserializerDOM::UseDOMImplementationL(RXmlEngDOMImplementation& aImpl) + { + iImpl = &aImpl; + } + + +// -------------------------------------------------------------------------------------- +// Default Constructor +// -------------------------------------------------------------------------------------- +// +CXmlEngDeserializerDOM::CXmlEngDeserializerDOM( ) + { + } + +// -------------------------------------------------------------------------------------- +// Destructor +// -------------------------------------------------------------------------------------- +// +CXmlEngDeserializerDOM::~CXmlEngDeserializerDOM() + { + delete iInputFileName; + } +