williamr@2: /* williamr@2: * Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: * which accompanies this distribution, and is available williamr@2: * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: Class implements XML DOM fragment using libxml2 classes williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: #ifndef SEN_DOM_FRAGMENT_BASE_H williamr@2: #define SEN_DOM_FRAGMENT_BASE_H williamr@2: williamr@2: // INCLUDES williamr@2: #include williamr@2: williamr@2: // FORWARD DECLARATIONS williamr@2: class RFileLogger; williamr@2: williamr@2: // CLASS DECLARATION williamr@2: williamr@2: /** williamr@2: * Class implements DOM fragment functionality williamr@2: * The implementation further extends CSenBaseFragment williamr@2: * functionality. In DOM fragment, all child elements williamr@2: * are parsed into separate element objects. This makes williamr@2: * it possible to reference any child which offer methods williamr@2: * declared in XML element interface. Any such element williamr@2: * can also be easily extracted (detached) from this williamr@2: * root DOM fragment. williamr@2: * @lib SenFragment.dll williamr@2: * @since Series60 4.0 williamr@2: */ williamr@2: class CSenDomFragmentBase : public CSenFragmentBase williamr@2: { williamr@2: public: // Constructors and destructor williamr@2: williamr@2: /** williamr@2: * Basic contructor. Should be used only for parsing new fragments etc. williamr@2: * Constructing DomFragments for other use should be done with at least williamr@2: * localname parameter. williamr@2: * @since Series60 4.0 williamr@2: */ williamr@2: IMPORT_C static CSenDomFragmentBase* NewL(); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @since Series60 4.0 williamr@2: * @param aElement Element to copy construction data from. williamr@2: */ williamr@2: IMPORT_C static CSenDomFragmentBase* NewL( williamr@2: const TXmlEngElement& aElement); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @since Series60 4.0 williamr@2: * @param aLocalName is the XML localname of this fragment williamr@2: */ williamr@2: IMPORT_C static CSenDomFragmentBase* NewL(const TDesC8& aLocalName); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @since Series60 4.0 williamr@2: * @param aNsUri is the XML namespace user of this fragment williamr@2: * @param aLocalName is the XML localname of this fragment williamr@2: */ williamr@2: IMPORT_C static CSenDomFragmentBase* NewL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @since Series60 4.0 williamr@2: * @param aNsUri is the XML namespace user of this fragment williamr@2: * @param aLocalName is the XML localname of this fragment williamr@2: * @param aPrefix is the XML prefix of this fragment williamr@2: */ williamr@2: IMPORT_C static CSenDomFragmentBase* NewL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aPrefix); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @since Series60 4.0 williamr@2: * @param aNsUri is the XML namespace of this fragment williamr@2: * @param aLocalName is the XML localname of this fragment williamr@2: * @param aPrefix is the prefix of this fragment williamr@2: * @param aAttrs are the XML attributes of this fragment williamr@2: */ williamr@2: IMPORT_C static CSenDomFragmentBase* NewL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aPrefix, williamr@2: const RAttributeArray& aAttrs); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @since Series60 4.0 williamr@2: * @param aNsUri is the XML namespace of this fragment williamr@2: * @param aLocalName is the XML localname of this fragment williamr@2: * @param aPrefix is the prefix of this fragment williamr@2: * @param aAttrs are the XML attributes of this fragment williamr@2: * @param aParent is the parent XML element of this fragment williamr@2: */ williamr@2: IMPORT_C static CSenDomFragmentBase* NewL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aPrefix, williamr@2: const RAttributeArray& aAttrs, williamr@2: TXmlEngElement& aParent); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @since Series60 4.0 williamr@2: * @param aNsUri is the XML namespace of this fragment williamr@2: * @param aLocalName is the XML localname of this fragment williamr@2: * @param aPrefix is the prefix of this fragment williamr@2: * @param aAttrs are the XML attributes of this fragment williamr@2: * @param aParent is the parent XML element of this fragment williamr@2: * @param aOwnerDocument is the document which will be the owner of williamr@2: * the elements of this fragment williamr@2: */ williamr@2: IMPORT_C static CSenDomFragmentBase* NewL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aPrefix, williamr@2: const RAttributeArray& aAttrs, williamr@2: TXmlEngElement& aParent, williamr@2: RSenDocument& aOwnerDocument); williamr@2: /** williamr@2: * Destructor. williamr@2: */ williamr@2: IMPORT_C virtual ~CSenDomFragmentBase(); williamr@2: williamr@2: // New functions williamr@2: williamr@2: /** williamr@2: * Initiates the parsing chain where new delegate will be created with williamr@2: * given parameters and parsing will be delegated to it. Should not be williamr@2: * called externally. williamr@2: * @since Series60 4.0 williamr@2: * @param aElement The RTagInfo class holding information that describes williamr@2: * the element. williamr@2: * @param aAttributes The attributes of the new element williamr@2: * @param aErrorCode Error code williamr@2: */ williamr@2: IMPORT_C virtual void ExpandL(const RTagInfo& aElement, williamr@2: const RAttributeArray& aAttributes, williamr@2: TInt aErrorCode); williamr@2: williamr@2: // Functions from base classes williamr@2: williamr@2: // From CSenBaseFragment williamr@2: williamr@2: /** williamr@2: * Resumes the parsing. Usually called by the delegate fragment which was williamr@2: * parsing itself after DelegateParsingL(). williamr@2: * @since Series60 4.0 williamr@2: * @param aElement The RTagInfo class holding information that describes williamr@2: * the element. williamr@2: * @param aErrorCode Error code williamr@2: */ williamr@2: IMPORT_C virtual void OnResumeParsingFromL(const RTagInfo& aElement, williamr@2: TInt aErrorCode); williamr@2: williamr@2: /** williamr@2: * Sets the attributes for the fragment. williamr@2: * @since Series60 4.0 williamr@2: * @param aAttributes The array of attributes. williamr@2: */ williamr@2: IMPORT_C virtual void AddAttributesL(const RAttributeArray& aAttrs); williamr@2: williamr@2: /** williamr@2: * Gets the fragment data as an UTF-8 form XML. williamr@2: * @since Series60 4.0 williamr@2: * @return fragment as XML. Caller takes ownership. williamr@2: */ williamr@2: IMPORT_C virtual HBufC8* AsXmlL(); williamr@2: williamr@2: /** williamr@2: * Callback function implementing the XML content handler interface. williamr@2: * Inheriting classes can override these. williamr@2: * @since Series60 4.0 williamr@2: * @see MContentHandler williamr@2: */ williamr@2: IMPORT_C virtual void OnStartElementL(const RTagInfo& aElement, williamr@2: const RAttributeArray& aAttributes, williamr@2: TInt aErrorCode); williamr@2: williamr@2: /** williamr@2: * Callback function implementing the XML content handler interface. williamr@2: * Inheriting classes can override these. williamr@2: * @since Series60 4.0 williamr@2: * @see MContentHandler williamr@2: */ williamr@2: IMPORT_C virtual void OnContentL(const TDesC8& aBytes, williamr@2: TInt aErrorCode); williamr@2: williamr@2: /** williamr@2: * Overriding content writing from CSenBaseFragment to do nothing in williamr@2: * DOM fragment (because the tree is expanded). williamr@2: * @since Series60 4.0 williamr@2: * @param aElement The RTagInfo class holding information that williamr@2: * describes the element. williamr@2: * @param aAttributes The attributes of the new element williamr@2: */ williamr@2: IMPORT_C void OnWriteStartElementL(const RTagInfo& aElement, williamr@2: const RAttributeArray& aAttributes); williamr@2: williamr@2: /** williamr@2: * Overriding content writing from CSenBaseFragment to do nothing in williamr@2: * DOM fragment (because the tree is expanded). williamr@2: * @since Series60 4.0 williamr@2: * @param aElement The RTagInfo class holding information that williamr@2: * describes the element. williamr@2: */ williamr@2: IMPORT_C void OnWriteEndElementL(const RTagInfo& aElement); williamr@2: /** williamr@2: * Callback function implementing the XML content handler interface. williamr@2: * Inheriting classes can override these. williamr@2: * @since Series60 4.0 williamr@2: * @see MContentHandler williamr@2: */ williamr@2: IMPORT_C virtual void OnEndElementL(const RTagInfo& aElement, TInt aErrorCode); williamr@2: williamr@2: /** williamr@2: * Callback function implementing the XML content handler interface. williamr@2: * Inheriting classes can override these. williamr@2: * @since Series60 4.0 williamr@2: * @see MContentHandler williamr@2: */ williamr@2: IMPORT_C virtual void OnStartDocumentL(const RDocumentParameters& aDocParam, TInt aErrorCode); williamr@2: williamr@2: /** williamr@2: * Callback function implementing the XML content handler interface. williamr@2: * Inheriting classes can override these. williamr@2: * @since Series60 4.0 williamr@2: * @see MContentHandler williamr@2: */ williamr@2: IMPORT_C virtual void OnEndDocumentL(TInt aErrorCode); williamr@2: williamr@2: /** williamr@2: * Callback function implementing the XML content handler interface. williamr@2: * Inheriting classes can override these. williamr@2: * @since Series60 4.0 williamr@2: * @see MContentHandler williamr@2: */ williamr@2: IMPORT_C virtual void OnStartPrefixMappingL(const RString& aPrefix, const RString& aUri, TInt aErrorCode); williamr@2: williamr@2: /** williamr@2: * Callback function implementing the XML content handler interface. williamr@2: * Inheriting classes can override these. williamr@2: * @since Series60 4.0 williamr@2: * @see MContentHandler williamr@2: */ williamr@2: IMPORT_C virtual void OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode); williamr@2: williamr@2: /** williamr@2: * Callback function implementing the XML content handler interface. williamr@2: * Inheriting classes can override these. williamr@2: * @since Series60 4.0 williamr@2: * @see MContentHandler williamr@2: */ williamr@2: IMPORT_C virtual void OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt ErrorCode); williamr@2: williamr@2: /** williamr@2: * Callback function implementing the XML content handler interface. williamr@2: * Inheriting classes can override these. williamr@2: * @since Series60 4.0 williamr@2: * @see MContentHandler williamr@2: */ williamr@2: IMPORT_C virtual void OnSkippedEntityL(const RString& aName, TInt aErrorCode); williamr@2: williamr@2: /** williamr@2: * Callback function implementing the XML content handler interface. williamr@2: * Inheriting classes can override these. williamr@2: * @since Series60 4.0 williamr@2: * @see MContentHandler williamr@2: */ williamr@2: IMPORT_C virtual void OnProcessingInstructionL(const TDesC8& aTarget, const TDesC8& aData, TInt aErrorCode); williamr@2: williamr@2: /** williamr@2: * Callback function implementing the XML content handler interface. williamr@2: * Inheriting classes can override these. williamr@2: * @since Series60 4.0 williamr@2: * @see MContentHandler williamr@2: */ williamr@2: IMPORT_C virtual void OnError(TInt aErrorCode); williamr@2: williamr@2: /** williamr@2: * Callback function implementing the XML content handler interface. williamr@2: * Inheriting classes can override these. williamr@2: * @since Series60 4.0 williamr@2: * @see MContentHandler williamr@2: */ williamr@2: IMPORT_C virtual TAny* GetExtendedInterface(const TInt32 aUid); williamr@2: williamr@2: // From CSenBaseFragment williamr@2: IMPORT_C virtual TPtrC8 ContentL(); williamr@2: williamr@2: IMPORT_C virtual TXmlEngNamespace Namespace(const TDesC8& aPrefix); williamr@2: williamr@2: // IMPORT_C virtual void DetachL(); williamr@2: williamr@2: IMPORT_C virtual void ResetContentL(); williamr@2: williamr@2: IMPORT_C virtual TPtrC8 LocalName() const; williamr@2: williamr@2: IMPORT_C virtual TPtrC8 NsUri() const; williamr@2: williamr@2: IMPORT_C virtual TPtrC8 NsPrefix() const; williamr@2: williamr@2: IMPORT_C virtual TXmlEngElement AsElementL(); williamr@2: williamr@2: IMPORT_C virtual RSenDocument& AsDocumentL(); williamr@2: williamr@2: IMPORT_C virtual TXmlEngElement ExtractElement(); williamr@2: williamr@2: IMPORT_C virtual void OnDelegateParsingL(CSenFragmentBase& aDelegate); williamr@2: williamr@2: IMPORT_C virtual void OnDelegateParsingL(const RTagInfo& aElement, williamr@2: const RAttributeArray& aAttributes, williamr@2: TInt aErrorCode); williamr@2: williamr@2: IMPORT_C virtual void SetOwner(CSenFragmentBase& aFragment); williamr@2: williamr@2: IMPORT_C virtual HBufC* AsXmlUnicodeL(); williamr@2: williamr@2: IMPORT_C virtual void WriteAsXMLToL(RWriteStream& aWs); williamr@2: williamr@2: IMPORT_C virtual TBool ConsistsOfL(CSenFragmentBase& aCandidate); williamr@2: williamr@2: IMPORT_C void SetContentHandler(CSenFragmentBase& aContentHandler); williamr@2: williamr@2: protected: // From CSenBaseFragment williamr@2: williamr@2: void RenameL(const TDesC8& aLocalName, const TDesC8& aPrefix, const TDesC8& aNamespace); williamr@2: williamr@2: void RenameL(const TDesC8& aLocalName, const TDesC8& aNamespace); williamr@2: williamr@2: void RenameLocalNameL(const TDesC8& aLocalName); williamr@2: williamr@2: void RenameNamespaceL(const TDesC8& aNamespace); williamr@2: williamr@2: void RenamePrefixL(const TDesC8& aPrefix); williamr@2: williamr@2: void RenameNamespaceL(const TDesC8& aPrefix, const TDesC8& aNamespace); williamr@2: williamr@2: IMPORT_C TXmlEngElement SetContentOfL(const TDesC8& aLocalName, williamr@2: const TDesC8& aContent); williamr@2: williamr@2: IMPORT_C TPtrC8 ContentOf(const TDesC8& aLocalName); williamr@2: williamr@2: IMPORT_C virtual TBool ConsistsOfL(TXmlEngElement& aElement, TXmlEngElement& aCandidate); williamr@2: williamr@2: IMPORT_C virtual void AddNamespacesL(); williamr@2: williamr@2: protected: williamr@2: williamr@2: /** williamr@2: * C++ default constructor. williamr@2: */ williamr@2: IMPORT_C CSenDomFragmentBase(); williamr@2: williamr@2: /** williamr@2: * "ConstructL" method for calling the base classes ones. williamr@2: * @since Series60 4.0 williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(); williamr@2: williamr@2: /** williamr@2: * "ConstructL" method for calling the base classes ones. williamr@2: * @since Series60 4.0 williamr@2: * @param aElement is the XML element of this fragment. williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(const TXmlEngElement& aElement); williamr@2: williamr@2: /** williamr@2: * "ConstructL" method for calling the base classes ones. williamr@2: * @since Series60 4.0 williamr@2: * @param aLocalName The local name of the element williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(const TDesC8& aLocalName); williamr@2: williamr@2: /** williamr@2: * "ConstructL" method for calling the base classes ones. williamr@2: * @since Series60 4.0 williamr@2: * @param aNsUri The namespace URI of the element williamr@2: * @param aLocalName The local name of the element williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName); williamr@2: williamr@2: /** williamr@2: * "ConstructL" method for calling the base classes ones. williamr@2: * @since Series60 4.0 williamr@2: * @param aNsUri The namespace URI of the element williamr@2: * @param aLocalName The local name of the element williamr@2: * @param aPrefix The prefix of the element williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aPrefix); williamr@2: williamr@2: /** williamr@2: * "ConstructL" method for calling the base classes ones. williamr@2: * @since Series60 4.0 williamr@2: * @param aNsUri The namespace URI of the element williamr@2: * @param aLocalName The local name of the element williamr@2: * @param aPrefix The prefix of the element williamr@2: * @param aAttrs The attributes of the element williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aPrefix, williamr@2: const RAttributeArray& aAttrs); williamr@2: williamr@2: /** williamr@2: * "ConstructL" method for calling the base classes ones. williamr@2: * @since Series60 4.0 williamr@2: * @param aNsUri The namespace URI of the element williamr@2: * @param aLocalName The local name of the element williamr@2: * @param aPrefix The prefix of the element williamr@2: * @param aAttrs The attributes of the element williamr@2: * @param aParent The parent of the element williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aPrefix, williamr@2: const RAttributeArray& aAttrs, williamr@2: TXmlEngElement& aParent); williamr@2: williamr@2: /** williamr@2: * "ConstructL" method for calling the base classes ones. williamr@2: * @since Series60 4.0 williamr@2: * @param aNsUri The namespace URI of the element williamr@2: * @param aLocalName The local name of the element williamr@2: * @param aPrefix The prefix of the element williamr@2: * @param aAttrs The attributes of the element williamr@2: * @param aParent The parent of the element williamr@2: * @param aOwnerDocument The document which will be the owner of williamr@2: * the elements of this fragment williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aPrefix, williamr@2: const RAttributeArray& aAttrs, williamr@2: TXmlEngElement& aParent, williamr@2: RSenDocument& aOwnerDocument); williamr@2: williamr@2: /** williamr@2: * Callback functions which implement the XML content handler interface. williamr@2: * Inheriting classes can override these. williamr@2: */ williamr@2: williamr@2: // From CSenBaseFragment williamr@2: williamr@2: protected: // Data williamr@2: CSenDomFragmentBase* ipDomDelegate; williamr@2: }; williamr@2: williamr@2: #endif //SEN_DOM_FRAGMENT_BASE_H williamr@2: williamr@2: // End of File williamr@2: williamr@2: williamr@2: