diff -r 000000000000 -r e35f40988205 xml/xmldomandxpath/src/xmlengineserializer/xmlengserializer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/xmldomandxpath/src/xmlengineserializer/xmlengserializer.cpp Thu Dec 17 09:29:21 2009 +0200 @@ -0,0 +1,211 @@ +// 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: +// Implementation of serializer +// + +#include +#include +#include "xmlengserializerxop.h" +#include "xmlengserializergzip.h" +#include +#include + + +// -------------------------------------------------------------------------------------- +// Creates an instance of CXmlEngSerializer +// -------------------------------------------------------------------------------------- +// +EXPORT_C CXmlEngSerializer* CXmlEngSerializer::NewL(TXmlEngSerializerType aType) + { + switch(aType) + { + case ESerializerXOP: + { + return CXmlEngSerializerXOP::NewL( EFalse ); + } + case ESerializerXOPInfoset: + { + return CXmlEngSerializerXOP::NewL( ETrue ); + } + case ESerializerGZip: + { + return CXmlEngSerializerGZIP::NewL(); + } + case ESerializerDefault: + default: + { + CXmlEngSerializer* self = new (ELeave) CXmlEngSerializer(); + //2nd phase construction not needed currently + //CleanupStack::PushL(self); + //self->ConstructL(); + //CleanupStack::Pop(self); + return self; + } + } + } + +// -------------------------------------------------------------------------------------- +// Set output type as file +// -------------------------------------------------------------------------------------- +// +EXPORT_C void CXmlEngSerializer::SetOutputL(const TDesC& aFileName) + { + if(iOutFileName) + { + delete iOutFileName; + iOutFileName=NULL; + } + iOutFileName = aFileName.AllocL(); + iSerializationOutput = ESerializeToFile; + } + +// -------------------------------------------------------------------------------------- +// Set output type as buffer +// -------------------------------------------------------------------------------------- +// +EXPORT_C void CXmlEngSerializer::SetOutput(RBuf8& aBuffer) + { + iBuffer = &aBuffer; + iSerializationOutput = ESerializeToBuffer; + } + +// -------------------------------------------------------------------------------------- +// Set output type as output stream +// -------------------------------------------------------------------------------------- +// +EXPORT_C void CXmlEngSerializer::SetOutput(MXmlEngOutputStream& aStream) + { + iOutputStream = &aStream; + iSerializationOutput = ESerializeToStream; + } + +// -------------------------------------------------------------------------------------- +// Set serialization options +// -------------------------------------------------------------------------------------- +// +EXPORT_C void CXmlEngSerializer::SetSerializationOptions(TXmlEngSerializationOptions& aOptions) + { + iSerializationOptions = &aOptions; + } + +// -------------------------------------------------------------------------------------- +// Serializes TXmlEngNode to file +// -------------------------------------------------------------------------------------- +// +EXPORT_C TInt CXmlEngSerializer::SerializeL( TXmlEngNode aRoot) + { + TXmlEngSerializationOptions* defPtr = NULL; + TXmlEngSerializationOptions def = TXmlEngSerializationOptions(); + if(iSerializationOptions ) + { + defPtr = iSerializationOptions; + } + else + { + defPtr = &def; + } + + RXmlEngDocument doc = aRoot.OwnerDocument(); //CXmlEngSerializer isn't owner of doc - in case + //of leave, cleanup done by the caller + switch(iSerializationOutput) + { + case ESerializeToFile: + { + return SerializeL(iOutFileName->Des(), aRoot, *defPtr); + } + case ESerializeToBuffer: + { + return SerializeL(*iBuffer, aRoot, *defPtr); + } + case ESerializeToStream: + { + if(!iOutputStream) + { + User::Leave(KXmlEngErrNoParameters); + } + return doc.SaveL(*iOutputStream, aRoot, *defPtr ); + } + default: + { + User::Leave(KErrNotSupported); + } + } + return KErrGeneral; //should never happen + } + +// -------------------------------------------------------------------------------------- +// Serializes TXmlEngNode to file +// -------------------------------------------------------------------------------------- +// +EXPORT_C TInt CXmlEngSerializer::SerializeL( RFs& aRFs, + const TDesC& aFileName, + const TXmlEngNode aRoot, + const TXmlEngSerializationOptions& aOptions ) + { + return aRoot.OwnerDocument().SaveL(aRFs, aFileName, aRoot, aOptions); + } + +// -------------------------------------------------------------------------------------- +// Serializes TXmlEngNode to file +// -------------------------------------------------------------------------------------- +// +EXPORT_C TInt CXmlEngSerializer::SerializeL( const TDesC& aFileName, + const TXmlEngNode aRoot, + const TXmlEngSerializationOptions& aOptions ) + { + TInt size; + RFs rfs; + User::LeaveIfError(rfs.Connect()); + CleanupClosePushL(rfs); + size = aRoot.OwnerDocument().SaveL(rfs, aFileName, aRoot, aOptions); + CleanupStack::PopAndDestroy(&rfs); + return size; + } + +// -------------------------------------------------------------------------------------- +// Serializes TXmlEngNode to buffer +// -------------------------------------------------------------------------------------- +// +EXPORT_C TInt CXmlEngSerializer::SerializeL( RBuf8& aBuffer, + const TXmlEngNode aRoot, + const TXmlEngSerializationOptions& aOptions) + { + return aRoot.OwnerDocument().SaveL(aBuffer, aRoot, aOptions); + } + +// -------------------------------------------------------------------------------------- +// Default Constructor +// -------------------------------------------------------------------------------------- +// +CXmlEngSerializer::CXmlEngSerializer() + : iBuffer(NULL), + iOutputStream(NULL), + iSerializationOptions(NULL) + { + } + +void CXmlEngSerializer::ConstructL() + { + } + +// -------------------------------------------------------------------------------------- +// Destructor +// -------------------------------------------------------------------------------------- +// +CXmlEngSerializer::~CXmlEngSerializer() + { + delete iOutFileName; + } + +