xml/xmldomandxpath/src/xmlengineserializer/xmlengserializer.cpp
changeset 0 e35f40988205
--- /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;
+    }
+    
+