diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/protocol/inc/ncdsubparser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/protocol/inc/ncdsubparser.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,121 @@ +/* +* Copyright (c) 2006 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: CNcdSubParser declaration +* +*/ + + +#ifndef NcdSUBPARSER_H +#define NcdSUBPARSER_H + +#include +#include +#include +#include +#include + +#include "ncdparser.h" + +/** + * Subparser observer. + */ +class MNcdSubParserObserver + { +public: + virtual ~MNcdSubParserObserver() {} + /** + * This is called when the subparser is finished parsing its data. + * @param aSubParserTag The tag which was parsed by the parser + * @param aErrorCode Error code in case of parse errors + */ + virtual void SubParserFinishedL( const TDesC8& aSubParserTag, TInt aErrorCode ) = 0; + }; + +/** + * Subparser base clas. + */ +class CNcdSubParser : public CBase, + public Xml::MContentHandler, + public MNcdSubParserObserver + { +public: + enum TType + { + EParserDefaultType, + EParserUnknown, + EParserProtocolResponse, + EParserEntityRef, + EParserEntityData + }; + +public: + CNcdSubParser( MNcdParserObserverBundle& aObservers, + MNcdSubParserObserver& aSubParserObserver, + TInt aDepth, + TType aType = EParserDefaultType ); + virtual ~CNcdSubParser(); + +public: + TType Type() const; + const TDesC8& Tag() const; + TInt Depth() const; + // return KNullDesC8 if not found + static const TDesC8& AttributeValue( const TDesC8& aAttributeName, + const Xml::RAttributeArray& aAttributes ); + static const TDesC8& AttributePrefix( const TDesC8& aAttributeName, + const Xml::RAttributeArray& aAttributes ); + + + +public: // From Xml::MContentHandler + + /** + * @see Xml::MContentHandler::OnStartDocumentL + * @note this parent class implementation of OnStartDocumentL + * must be called by overriding child class implementations of the function. + * + */ + virtual void OnStartDocumentL(const Xml::RDocumentParameters& aDocParam, TInt aErrorCode) ; + virtual void OnEndDocumentL(TInt aErrorCode) ; + virtual void OnStartElementL(const Xml::RTagInfo& aElement, const Xml::RAttributeArray& aAttributes, + TInt aErrorCode) ; + virtual void OnEndElementL(const Xml::RTagInfo& aElement, TInt aErrorCode) ; + virtual void OnContentL(const TDesC8& aBytes, TInt aErrorCode) ; + virtual void OnStartPrefixMappingL(const RString& aPrefix, const RString& aUri, + TInt aErrorCode) ; + virtual void OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode) ; + virtual void OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode) ; + virtual void OnSkippedEntityL(const RString& aName, TInt aErrorCode) ; + virtual void OnProcessingInstructionL(const TDesC8& aTarget, const TDesC8& aData, + TInt aErrorCode) ; + virtual void OnError(TInt aErrorCode); + virtual TAny* GetExtendedInterface(const TInt32 aUid); + +public: // From MNcdSubParserObserver + + virtual void SubParserFinishedL( const TDesC8& aTag, TInt aErrorCode ); + +protected: + void ConstructL( const Xml::RTagInfo& aElement ); +protected: + TType iType; + TInt iDepth; + HBufC8* iTag; + HBufC8* iBuffer; + MNcdParserObserverBundle* iObservers; + MNcdSubParserObserver* iSubParserObserver; + CNcdSubParser* iSubParser; + }; + +#endif