backupandrestore/backupengine/src/sbeparserproxy.cpp
changeset 0 d0791faffa3f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/backupandrestore/backupengine/src/sbeparserproxy.cpp	Tue Feb 02 01:11:40 2010 +0200
@@ -0,0 +1,230 @@
+// 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 CBackupRegistrationParser
+// 
+//
+
+/**
+ @file
+*/
+#include "sbeparserproxy.h"
+
+// System includes
+#include <charconv.h>
+
+// User includes
+#include "sbeparserdefs.h"
+#include "sblog.h"
+
+namespace conn
+	{
+	CSBEParserProxy::CSBEParserProxy( RFs& aFsSession )
+        : iFsSession( aFsSession )
+	/** Standard C++ constructor
+
+	@param aSID secure id of data owner
+	@param apDataOwnerManager data owner manager to access resources
+	*/
+		{
+		}
+
+	CSBEParserProxy::~CSBEParserProxy()
+	/** Standard C++ destructor
+	*/
+		{
+		delete iConverter;
+		delete iParser;
+		}
+
+	void CSBEParserProxy::ConstructL()
+	/** Symbian 2nd stage constructor */
+		{
+		iParser = CParser::NewL(KMimeType, *this);
+
+		// We only convert from UTF-8 to UTF-16
+		iConverter = CCnvCharacterSetConverter::NewL();
+		if  ( iConverter->PrepareToConvertToOrFromL( KCharacterSetIdentifierUtf8, iFsSession ) == CCnvCharacterSetConverter::ENotAvailable )
+			{
+			User::Leave(KErrNotFound);
+			}
+		}
+		
+	CSBEParserProxy* CSBEParserProxy::NewL( RFs& aFsSession )
+	/** Symbian OS static constructor
+
+	@param aSID secure id of data owner
+	@param apDataOwnerManager data owner manager to access resources
+	@return a CBackupRegistrationParser object
+	*/
+		{
+		CSBEParserProxy* self = new(ELeave) CSBEParserProxy( aFsSession );
+		CleanupStack::PushL(self);
+		self->ConstructL();
+		CleanupStack::Pop(self);
+
+		return self;
+		}
+
+	void CSBEParserProxy::ParseL( const TDesC& aFileName, MContentHandler& aObserver )
+	/** Parsing API */
+        {
+        // Store transient observer (the entity that we will route callbacks to)
+        iTransientParsingError = KErrNone;
+        iTransientObserver = &aObserver;
+
+        // Do XML parsing of the specified file. Callbacks will occur to client via the XML
+        // callback API.
+		Xml::ParseL( *iParser, iFsSession, aFileName );
+
+        // Handle any errors received during callbacks
+		User::LeaveIfError( iTransientParsingError );
+        }
+
+	TInt CSBEParserProxy::ConvertToUnicodeL( TDes16& aUnicode, const TDesC8& aForeign )
+        {
+        const TInt error = iConverter->ConvertToUnicode( aUnicode, aForeign, iConverterState );
+
+#ifdef SBE_LOGGING_ENABLED
+        if  ( error != KErrNone )
+            {
+            HBufC* copy = HBufC::NewL( aForeign.Length() * 2 );
+            copy->Des().Copy( aForeign );
+			__LOG2("CSBEParserProxy::ConvertToUnicode() - error: %d when converting: %S", error, copy );
+            delete copy;
+            }
+#endif
+
+        return error;
+        }
+		
+	//	
+	//  MContentHandler Implementaion //
+	//
+
+	/** MContentHandler::OnStartDocumentL()
+	*/
+	void CSBEParserProxy::OnStartDocumentL(const RDocumentParameters& aDocParam, TInt aErrorCode)
+		{
+		if (aErrorCode != KErrNone)
+			{
+			__LOG1("CBackupRegistrationParser::OnStartDocumentL() - error = %d", aErrorCode);
+			User::Leave(aErrorCode);
+			}
+
+        iTransientObserver->OnStartDocumentL( aDocParam, aErrorCode );
+		}
+		
+	/** MContentHandler::OnEndDocumentL()
+	*/
+	void CSBEParserProxy::OnEndDocumentL(TInt aErrorCode)
+		{
+		if (aErrorCode != KErrNone)
+			{
+			// just to satifsy UREL compiler
+			(void) aErrorCode;
+			__LOG1("CBackupRegistrationParser::OnEndDocumentL() - error = %d", aErrorCode);
+			}
+
+        iTransientObserver->OnEndDocumentL( aErrorCode );
+		}
+		
+	/** MContentHandler::OnStartElementL()
+
+	@leave KErrUnknown an unknown element
+	*/		
+	void CSBEParserProxy::OnStartElementL(const RTagInfo& aElement, const RAttributeArray& aAttributes, TInt aErrorCode)
+		{
+		if (aErrorCode != KErrNone)
+			{
+			__LOG1("CBackupRegistrationParser::OnStartElementL() - error = %d", aErrorCode);
+			User::LeaveIfError(aErrorCode);
+			}
+
+        iTransientObserver->OnStartElementL( aElement, aAttributes, aErrorCode );
+		}
+
+	/** MContentHandler::OnEndElementL()
+	*/
+	void CSBEParserProxy::OnEndElementL(const RTagInfo& aElement, TInt aErrorCode)
+		{
+		if (aErrorCode != KErrNone)
+			{
+			__LOG1("CBackupRegistrationParser::OnEndElementL() - error = %d", aErrorCode);
+			User::Leave(aErrorCode);
+			}
+
+        iTransientObserver->OnEndElementL( aElement, aErrorCode );
+		}
+
+	/** MContentHandler::OnContentL()
+	*/
+	void CSBEParserProxy::OnContentL(const TDesC8& aBytes, TInt aErrorCode)
+		{
+        iTransientObserver->OnContentL( aBytes, aErrorCode );
+		}
+
+	/** MContentHandler::OnStartPrefixMappingL()
+	*/
+	void CSBEParserProxy::OnStartPrefixMappingL(const RString& aPrefix, const RString& aUri, TInt aErrorCode)
+		{
+        iTransientObserver->OnStartPrefixMappingL( aPrefix, aUri, aErrorCode );
+		}
+
+	/** MContentHandler::OnEndPrefixMappingL()
+	*/
+	void CSBEParserProxy::OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode)
+		{
+        iTransientObserver->OnEndPrefixMappingL( aPrefix, aErrorCode );
+		}
+
+	/** MContentHandler::OnIgnorableWhiteSpaceL()
+	*/
+	void CSBEParserProxy::OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode)
+		{
+        iTransientObserver->OnIgnorableWhiteSpaceL( aBytes, aErrorCode );
+		}
+
+	/** MContentHandler::OnSkippedEntityL()
+	*/
+	void CSBEParserProxy::OnSkippedEntityL(const RString& aName, TInt aErrorCode)
+		{
+        iTransientObserver->OnSkippedEntityL( aName, aErrorCode );
+		}
+
+	/** MContentHandler::OnProcessingInstructionL()
+	*/
+	void CSBEParserProxy::OnProcessingInstructionL(const TDesC8& aTarget, const TDesC8& aData, TInt aErrorCode)
+		{
+        iTransientObserver->OnProcessingInstructionL( aTarget, aData, aErrorCode );
+		}
+
+	/** MContentHandler::OnError()
+
+	@leave aErrorCode
+	*/
+	void CSBEParserProxy::OnError(TInt aErrorCode)
+		{
+		__LOG1("CBackupRegistrationParser::OnError() - error = %d", aErrorCode);
+		iTransientParsingError = aErrorCode;
+        iTransientObserver->OnError( aErrorCode );
+		}
+
+	/** MContentHandler::OnEndPrefixMappingL()
+	*/
+	TAny* CSBEParserProxy::GetExtendedInterface(const TInt32 aUid)
+		{
+        return iTransientObserver->GetExtendedInterface( aUid );
+		}
+
+    } // namespace conn