diff -r 000000000000 -r e35f40988205 xml/xmldomandxpath/src/xmlengineserializer/xmlengserializergzip.cpp --- /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 +#include +#include "xmlengserializergzip.h" +#include "xmlenggzipoutputstream.h" +#include "xmlenggzipfileoutputstream.h" +#include "xmlenggzipbufferoutputstream.h" +#include "ezgzip.h" +#include + + + +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() + { + } + +