--- /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 <xml/dom/xmlengserializer.h>
+#include <xml/dom/xmlengerrors.h>
+#include "xmlengserializerxop.h"
+#include "xmlengserializergzip.h"
+#include <xml/dom/xmlengdocument.h>
+#include <xml/dom/xmlengserializeerrors.h>
+
+
+// --------------------------------------------------------------------------------------
+// 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;
+ }
+
+