xml/xmldomandxpath/src/xmlengineserializer/xmlengserializergzip.cpp
changeset 0 e35f40988205
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/xmldomandxpath/src/xmlengineserializer/xmlengserializergzip.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:
+// Node container implementation
+//
+
+#include <xml/dom/xmlengdocument.h>
+#include <xml/dom/xmlengerrors.h>
+#include "xmlengserializergzip.h"
+#include "xmlenggzipoutputstream.h"
+#include "xmlenggzipfileoutputstream.h"
+#include "xmlenggzipbufferoutputstream.h"
+#include "ezgzip.h"
+#include <xml/dom/xmlengserializeerrors.h>
+
+
+
+TInt CXmlEngSerializerGZIP::SerializeToFileL(RFs& aRFs,
+                          const TDesC& aFileName,
+                          const TXmlEngNode aNode,
+                          const TXmlEngSerializationOptions& aOpt)
+    {
+    RFile outFile;
+    
+    User::LeaveIfError(outFile.Replace(aRFs,aFileName,EFileStream | EFileWrite | EFileShareExclusive));
+    CleanupClosePushL(outFile);
+
+    CXmlEngGZIPFileOutputStream* gzfos = CXmlEngGZIPFileOutputStream::NewLC(outFile,aRFs);
+    TRAPD(err,aNode.OwnerDocument().SaveL(*gzfos,aNode,aOpt));
+    TInt sErr = gzfos->CheckError();
+    if(sErr)
+        {
+        User::Leave(sErr);
+        }
+    if(err)
+        {
+        User::Leave(err);
+        }
+    
+    TInt fSize;
+    outFile.Size(fSize);
+    CleanupStack::PopAndDestroy(gzfos);
+    CleanupStack::PopAndDestroy(&outFile);
+    
+    return fSize;
+    }
+
+TInt CXmlEngSerializerGZIP::SerializeToBufferL(RBuf8& aBuf,
+                                            const TXmlEngNode aNode,
+                                            const TXmlEngSerializationOptions& aOpt)
+    {
+    CXmlEngGZIPBufferOutputStream* gzbos = CXmlEngGZIPBufferOutputStream::NewLC(aBuf);
+    TRAPD(err,aNode.OwnerDocument().SaveL(*gzbos,aNode,aOpt));
+    TInt sErr = gzbos->CheckError();
+    if(sErr)
+        {
+        User::Leave(sErr);
+        }
+    if(err)
+        {
+        User::Leave(err);
+        }
+    CleanupStack::PopAndDestroy(gzbos);
+    return aBuf.Size();
+    }
+    
+TInt CXmlEngSerializerGZIP::SerializeToStreamL(MXmlEngOutputStream& aStream,
+                                            const TXmlEngNode aNode,
+                                            const TXmlEngSerializationOptions& aOpt)
+    {
+    CXmlEngGZIPOutputStream* gzbos = CXmlEngGZIPOutputStream::NewLC(aStream);
+    TInt size = 0;
+    TRAPD(err,size = aNode.OwnerDocument().SaveL(*gzbos,aNode,aOpt));
+    TInt sErr = gzbos->CheckError();
+    if(sErr)
+        {
+        User::Leave(sErr);
+        }
+    if(err)
+        {
+        User::Leave(err);
+        }
+    CleanupStack::PopAndDestroy(gzbos);
+    return size;
+    }
+
+// --------------------------------------------------------------------------------------
+// Constructor
+// --------------------------------------------------------------------------------------
+//
+CXmlEngSerializerGZIP* CXmlEngSerializerGZIP::NewL()
+   {
+   CXmlEngSerializerGZIP* self = new (ELeave) CXmlEngSerializerGZIP();
+   return self;
+   }
+
+// --------------------------------------------------------------------------------------
+// Serializes TXmlEngNode to file
+// --------------------------------------------------------------------------------------
+//
+TInt CXmlEngSerializerGZIP::SerializeL(const TXmlEngNode aRoot)
+    {
+    TXmlEngSerializationOptions* defPtr = NULL;
+    TXmlEngSerializationOptions def = TXmlEngSerializationOptions();
+    if(iSerializationOptions )
+    	{
+    	defPtr = iSerializationOptions;
+    	}
+    else
+        {
+        defPtr = &def;
+        }
+    
+	RXmlEngDocument doc = aRoot.OwnerDocument(); 
+	
+	switch(iSerializationOutput)
+		{
+		case ESerializeToFile:
+			{
+            if (!iOutFileName)
+	            {
+	            User::Leave(KXmlEngErrNoParameters);
+	            } 	
+	        return SerializeL(iOutFileName->Des(), aRoot, *defPtr);
+			}
+		case ESerializeToBuffer:
+			{
+			return SerializeL(*iBuffer, aRoot, *defPtr);
+			}
+		case ESerializeToStream:
+			{
+			if(!iOutputStream)
+			    {
+			    User::Leave(KXmlEngErrNoParameters);
+			    }
+			return SerializeToStreamL(*iOutputStream, aRoot, *defPtr);
+			}
+		default:
+			{
+			User::Leave(KErrNotSupported);
+			}						
+		}
+	return KErrGeneral; //should never happen
+    }
+
+// --------------------------------------------------------------------------------------
+// Serializes TXmlEngNode to file
+// --------------------------------------------------------------------------------------
+//
+TInt CXmlEngSerializerGZIP::SerializeL( RFs& aRFs, 
+									 const TDesC& aFileName, 
+									 const TXmlEngNode aRoot,
+									 const TXmlEngSerializationOptions& aOptions )
+    {
+    return SerializeToFileL(aRFs, aFileName, aRoot, aOptions);
+    }
+
+// --------------------------------------------------------------------------------------
+// Serializes TXmlEngNode to file
+// --------------------------------------------------------------------------------------
+//
+TInt CXmlEngSerializerGZIP::SerializeL( const TDesC& aFileName, 
+                                     const TXmlEngNode aRoot,
+									 const TXmlEngSerializationOptions& aOptions )
+    {
+    RFs rfs;
+    User::LeaveIfError(rfs.Connect());
+    CleanupClosePushL(rfs);
+    TInt outSize = SerializeToFileL(rfs, aFileName, aRoot, aOptions);
+    CleanupStack::PopAndDestroy(&rfs);
+    return outSize;
+    }
+
+// --------------------------------------------------------------------------------------
+// Serializes TXmlEngNode to buffer
+// --------------------------------------------------------------------------------------
+//
+TInt CXmlEngSerializerGZIP::SerializeL( RBuf8& aBuffer, 
+                                     const TXmlEngNode aRoot, 										  
+									 const TXmlEngSerializationOptions& aOptions)
+    {
+    return SerializeToBufferL(aBuffer,aRoot,aOptions);
+    } 
+  
+// --------------------------------------------------------------------------------------
+// Constructor
+// --------------------------------------------------------------------------------------
+//
+CXmlEngSerializerGZIP::CXmlEngSerializerGZIP()
+    {
+    }
+    
+// --------------------------------------------------------------------------------------
+// Destructor
+// --------------------------------------------------------------------------------------
+//
+CXmlEngSerializerGZIP::~CXmlEngSerializerGZIP()
+    {
+    }  
+
+