diff -r 000000000000 -r d0791faffa3f backupandrestore/backupengine/src/sbeparserproxy.cpp --- /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 + +// 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