xml/xmldomandxpath/inc/xmlengineserializer/xmlengserializer.h
changeset 0 e35f40988205
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/xmldomandxpath/inc/xmlengineserializer/xmlengserializer.h	Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,196 @@
+// 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
+//
+
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+#ifndef XMLENGSERIALIZER_H
+#define XMLENGSERIALIZER_H
+
+#include <e32base.h>
+#include <xml/dom/xmlengserializationoptions.h>
+#include <xml/dom/xmlengnode.h>
+
+class MXmlEngOutputStream;
+class RFs;
+
+/** Controls the format of serialization */
+enum TXmlEngSerializerType
+	{
+	/** Default serialization (XML) */
+	ESerializerDefault,
+	/** Serialization to MIME Multipart containing XOP */
+	ESerializerXOP,
+	/** Serialization to XOP Infoset */
+	ESerializerXOPInfoset,
+	/** Serialization to GZip */
+	ESerializerGZip
+	};
+
+/** Controls the serialization format */
+enum TXmlEngSerializationOutput
+	{
+	ESerializeToFile,
+	ESerializeToBuffer,
+	ESerializeToStream
+	};
+
+/**
+Provides the serializer interface and provides common functionality to all
+serializers.  Implements default serialization (plain XML).  Derived classes
+implement serialization to other formats.
+
+@see TXmlEngSerializerType
+*/
+class CXmlEngSerializer: public CBase
+    {
+	friend class CXmlEngSerializerXOP;
+	friend class CXmlEngSerializerGZIP;
+
+public:
+    /**
+	Creates a serializer of the given type.  Returns an instance of this
+	class or a derived class.
+
+    @param aType Serializer type    
+    @return The serializer
+	@leave - One of the system-wide error codes
+    */
+    IMPORT_C static CXmlEngSerializer* NewL(TXmlEngSerializerType aType = ESerializerDefault);
+   
+	/**
+	Sets the output type to file and saves the file name for later
+	serialization.
+	@param aFileName The file name of the file to serialize
+	@leave - One of the system-wide error codes
+    */
+    IMPORT_C void SetOutputL(const TDesC& aFileName);
+
+	/**
+	Sets the output type to buffer and saves the buffer for later serialization.
+	@param aBuffer The buffer to serialize
+    */
+    IMPORT_C void SetOutput(RBuf8& aBuffer);
+
+	/**
+	Sets the output type to stream and saves the stream for later serialization.
+	@param aBuffer The stream to serialize
+    */
+    IMPORT_C void SetOutput(MXmlEngOutputStream& aStream);
+
+    /**
+    Sets the serialization options
+	@param aOptions The serialization options to set.  Ownership is not
+	transferred and aOptions must stay in scope for the lifetime of the
+	serializer.
+    */
+    IMPORT_C void SetSerializationOptions(TXmlEngSerializationOptions& aOptions);	
+
+	/**
+	Serializes a DOM tree to the buffer, file or stream set previously with
+	SetOutputL() or SetOutput().
+
+    @param aRoot The root node of the DOM tree to be serialized
+    @return The number of bytes written
+	@leave KXmlEngErrNoParameters No previous call to SetOutputL() or SetOutput().
+	@leave KErrNotSupported Unsupported serialization type
+	@leave KXmlEngErrWrongEncoding Encoding not understood
+	@leave KXmlEngErrWrongUseofAPI Document of root node is NULL
+    @leave KXmlEngErrNegativeOutputSize The data to be serialized has a negative size
+    @leave - One of the system-wide error codes
+    */
+    IMPORT_C virtual TInt SerializeL(const TXmlEngNode aRoot = TXmlEngNode());
+
+    /**
+	Serializes a DOM tree to file.  Any filename previously set with
+	SetOutputL(const TDesC&) is ignored.
+    
+    @param aFileName The file name to serialize to
+    @param aRoot The root node of the DOM tree to be serialized     
+    @param aOptions The serialization options	 	 
+    @return The number of bytes written
+	@leave KXmlEngErrWrongEncoding Encoding not understood
+	@leave KXmlEngErrWrongUseofAPI Document of root node is NULL
+    @leave KXmlEngErrNegativeOutputSize The data to be serialized has a negative size
+	@leave - One of the system-wide error codes
+    */
+    IMPORT_C virtual TInt SerializeL(const TDesC& aFileName, 
+			    const TXmlEngNode aRoot = TXmlEngNode(),
+			    const TXmlEngSerializationOptions& aOptions = TXmlEngSerializationOptions());
+                                        									  		
+    /**
+    Serializes a DOM tree to file.  Any filename previously set with
+	SetOutputL(const TDesC&) is ignored. 
+
+    @param aRFs File Server session
+    @param aFileName The file name to serialize to
+    @param aRoot The root node of the DOM tree to be serialized     
+    @param aOptions The serialization options	 	 
+    @return The number of bytes written
+	@leave KXmlEngErrWrongEncoding Encoding not understood
+	@leave KXmlEngErrWrongUseofAPI Document of root node is NULL
+    @leave KXmlEngErrNegativeOutputSize The data to be serialized has a negative size
+	@leave - One of the system-wide error codes
+    */
+    IMPORT_C virtual TInt SerializeL(RFs& aRFs, 
+			const TDesC& aFileName, 
+			const TXmlEngNode aRoot = TXmlEngNode(),
+			const TXmlEngSerializationOptions& aOptions = TXmlEngSerializationOptions());
+				
+    /**
+	Serializes a DOM tree to buffer.  Any buffer previously set with
+	SetOutputL(RBuf8&) is ignored.  Any existing data in aBuffer is destroyed.
+	This function allocates memory for the buffer and the caller must close the
+	buffer when finished.
+     
+    @param aBuffer The buffer to serialize to
+    @param aRoot The root node of DOM tree
+    @param aOptions The serialization options
+    @return The number of bytes written
+	@leave KXmlEngErrWrongEncoding Encoding not understood
+	@leave KXmlEngErrWrongUseofAPI Document of root node is NULL
+    @leave KXmlEngErrNegativeOutputSize The data to be serialized has a negative size
+	@leave - One of the system-wide error codes
+    */
+    IMPORT_C virtual TInt SerializeL(RBuf8& aBuffer, 
+                            const TXmlEngNode aRoot = TXmlEngNode(),
+                            const TXmlEngSerializationOptions& 
+                            aOptions = TXmlEngSerializationOptions());
+                            
+    /** Destructor */
+    virtual ~CXmlEngSerializer();
+
+private:
+    /** Default constructor */
+    CXmlEngSerializer();
+    
+   /** Second phase constructor. */
+    void ConstructL();
+    
+private:
+	HBufC*                           iOutFileName;
+	RBuf8*                           iBuffer;
+	MXmlEngOutputStream*		     iOutputStream;
+	TXmlEngSerializationOptions*     iSerializationOptions;
+	TXmlEngSerializationOutput       iSerializationOutput;
+    };
+
+#endif /* XMLENGSERIALIZER_H */
+