xml/xmldomandxpath/src/xmlengineserializer/xmlengdeserializerdom.cpp
changeset 0 e35f40988205
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/xmldomandxpath/src/xmlengineserializer/xmlengdeserializerdom.cpp	Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,223 @@
+// 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:
+// XML DOM Deserializer implementation
+//
+
+#include <xml/dom/xmlengserializeerrors.h>
+#include <xml/dom/xmlengdeserializer.h>
+#include <xml/dom/xmlengdeserializerdom.h>
+#include "xmlengdomcontenthandler.h"
+
+#include <xml/parserfeature.h>
+#include <xml/dom/xmlengdom.h>
+#include <xml/dom/xmlengdocument.h>
+
+using namespace Xml;
+
+// --------------------------------------------------------------------------------------
+// Creates an instance of CXmlEngDeserializerDOM
+// --------------------------------------------------------------------------------------
+//
+EXPORT_C CXmlEngDeserializerDOM* CXmlEngDeserializerDOM::NewL() 
+    {
+	CXmlEngDeserializerDOM* self = new (ELeave) CXmlEngDeserializerDOM; 
+	return self;
+	}
+
+// --------------------------------------------------------------------------------------
+// Set input type as file
+// --------------------------------------------------------------------------------------
+//
+EXPORT_C void CXmlEngDeserializerDOM::SetInputFileL(const TDesC& aFileName, TXmlEngDeserializerType aType)
+	{
+	if(iInputFileName)
+	    {
+	    delete iInputFileName;
+	    iInputFileName=NULL;
+	    }
+	iBuffer.Set(KNullDesC8());
+	iInputFileName = aFileName.AllocL();
+	iType = aType;
+	}
+
+// --------------------------------------------------------------------------------------
+// Set input type as buffer
+// --------------------------------------------------------------------------------------
+//
+EXPORT_C void CXmlEngDeserializerDOM::SetInputBuffer(const TDesC8& aBuffer, TXmlEngDeserializerType aType)
+	{
+	if(iInputFileName)
+	    {
+	    delete iInputFileName;
+	    iInputFileName=NULL;
+	    }
+	iBuffer.Set(aBuffer);
+	iType = aType;
+	}	
+	
+// --------------------------------------------------------------------------------------
+// Set external data array
+// --------------------------------------------------------------------------------------
+//
+EXPORT_C void CXmlEngDeserializerDOM::UseExternalDataL(RArray<TXmlEngDataContainer>& aList)
+	{
+	iDataList = &aList;
+	}
+
+
+// --------------------------------------------------------------------------------------
+// Fetches external data registered in this deserializer
+// --------------------------------------------------------------------------------------
+//
+EXPORT_C RArray<TXmlEngDataContainer>* CXmlEngDeserializerDOM::ExternalData()
+	{
+	return iDataList;
+	}
+  
+// --------------------------------------------------------------------------------------
+// Serializes TXmlEngNode to file
+// --------------------------------------------------------------------------------------
+//
+EXPORT_C RXmlEngDocument CXmlEngDeserializerDOM::DeserializeL()
+    {
+    RXmlEngDocument doc;
+	if(iInputFileName)
+	    {
+	    RFs fs; 
+	    CleanupClosePushL(fs);
+	    User::LeaveIfError(fs.Connect());    				
+	    doc =DeserializeL(fs, *iInputFileName, iType);			
+	    CleanupStack::PopAndDestroy(&fs);
+	    return doc;
+	    }
+	else if(iBuffer.Length())
+	    {
+	    return DeserializeL(iBuffer, iType);			
+	    }
+	else
+	    {
+	    User::Leave(KXmlEngErrNoParameters);    
+	    }
+	return doc;
+    }
+
+// --------------------------------------------------------------------------------------
+// Deserialize document
+// --------------------------------------------------------------------------------------
+//
+EXPORT_C RXmlEngDocument CXmlEngDeserializerDOM::DeserializeL(const TDesC& aFileName,
+                                                               TXmlEngDeserializerType aType) 
+    {
+	RFs fs; 
+	CleanupClosePushL(fs);
+	User::LeaveIfError(fs.Connect());
+	RXmlEngDocument doc = DeserializeL(fs,aFileName,aType);
+	CleanupStack::PopAndDestroy(&fs);			
+	return doc;
+	}
+
+// --------------------------------------------------------------------------------------
+// Deserialize document
+// --------------------------------------------------------------------------------------
+//
+EXPORT_C RXmlEngDocument CXmlEngDeserializerDOM::DeserializeL(RFs& aRFs,
+                                                   const TDesC& aFileName,
+                                                   TXmlEngDeserializerType aType) 
+    {
+    if(!iImpl)
+        {
+        User::Leave(KXmlEngErrWrongUseOfAPI);
+        }
+    
+    RXmlEngDocument doc;
+	doc.OpenL(*iImpl);
+	CleanupClosePushL(doc);
+	
+    CXmlEngDOMContentHandler* handler = CXmlEngDOMContentHandler::NewL(doc);
+    CleanupStack::PushL(handler);
+    
+    CXmlEngDeserializer* des = CXmlEngDeserializer::NewL(*handler,aType);
+    CleanupStack::PushL(des);
+	
+	des->UseExternalDataL(*iDataList);
+	des->EnableFeature(EReportNamespaceMapping);
+	des->DeserializeL(aRFs,aFileName);	
+		
+	CleanupStack::PopAndDestroy(des);
+	CleanupStack::PopAndDestroy(handler);	
+	CleanupStack::Pop(&doc);
+    
+    return doc;		
+	}
+
+// --------------------------------------------------------------------------------------
+// Deserialize document
+// --------------------------------------------------------------------------------------
+//
+EXPORT_C RXmlEngDocument CXmlEngDeserializerDOM::DeserializeL(const TDesC8& aBuffer,
+                                                               TXmlEngDeserializerType aType) 
+    {
+    if(!iImpl)
+        {
+        User::Leave(KXmlEngErrWrongUseOfAPI);
+        }
+    
+    RXmlEngDocument doc;
+	doc.OpenL(*iImpl);
+	CleanupClosePushL(doc);
+	
+    CXmlEngDOMContentHandler* handler = CXmlEngDOMContentHandler::NewL(doc);
+    CleanupStack::PushL(handler);
+    
+    CXmlEngDeserializer* des = CXmlEngDeserializer::NewL(*handler,aType);
+    CleanupStack::PushL(des);
+	
+	des->UseExternalDataL(*iDataList);
+	des->EnableFeature(EReportNamespaceMapping);
+	des->DeserializeL(aBuffer);	
+		
+	CleanupStack::PopAndDestroy(des);
+	CleanupStack::PopAndDestroy(handler);	
+	CleanupStack::Pop(&doc);
+    
+    return doc;
+    }  
+
+// --------------------------------------------------------------------------------------
+// Sets DOM implementation that should be used during document creating.
+// --------------------------------------------------------------------------------------
+//
+EXPORT_C void CXmlEngDeserializerDOM::UseDOMImplementationL(RXmlEngDOMImplementation& aImpl)
+    {
+    iImpl = &aImpl;
+    }
+
+      
+// --------------------------------------------------------------------------------------
+// Default Constructor
+// --------------------------------------------------------------------------------------
+//
+CXmlEngDeserializerDOM::CXmlEngDeserializerDOM( ) 
+    {    
+    }
+    
+// --------------------------------------------------------------------------------------
+// Destructor
+// --------------------------------------------------------------------------------------
+//
+CXmlEngDeserializerDOM::~CXmlEngDeserializerDOM()
+    {
+   	delete iInputFileName;  
+    }
+