williamr@2: /* williamr@2: * Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@4: * under the terms of "Eclipse Public License v1.0" williamr@2: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.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 DOM fragment functionality 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_H williamr@2: #define SEN_DOM_FRAGMENT_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 fragmet. williamr@2: * @lib SenXML.dll williamr@2: * @since Series60 3.0 williamr@2: */ williamr@2: class CSenDomFragment : public CSenBaseFragment 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 3.0 williamr@2: */ williamr@2: IMPORT_C static CSenDomFragment* NewL(); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @since Series60 3.0 williamr@2: * @param aElement Element to copy construction data from. williamr@2: */ williamr@2: IMPORT_C static CSenDomFragment* NewL( williamr@2: const CSenElement& aElement); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @since Series60 3.0 williamr@2: * @param aLocalName is the XML localname of this fragment williamr@2: * Leave codes: williamr@2: * KErrSenInvalidCharacters if aLocalName contains williamr@2: * illegal characters. williamr@2: * KErrSenZeroLengthDescriptor if aLocalName is zero length. williamr@2: */ williamr@2: IMPORT_C static CSenDomFragment* NewL(const TDesC8& aLocalName); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @since Series60 3.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: * Leave codes: williamr@2: * KErrSenInvalidCharacters if aLocalName contains williamr@2: * illegal characters. williamr@2: * KErrSenZeroLengthDescriptor if aLocalName is zero length. williamr@2: */ williamr@2: IMPORT_C static CSenDomFragment* NewL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @since Series60 3.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 aQName is the XML qualifiedname of this fragment williamr@2: * Leave codes: williamr@2: * KErrSenInvalidCharacters if aLocalName or aQName contains williamr@2: * illegal characters. williamr@2: * KErrSenZeroLengthDescriptor if aLocalName or aQName is zero length. williamr@2: */ williamr@2: IMPORT_C static CSenDomFragment* NewL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aQName); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @since Series60 3.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 aQName is the qualifiedname of this fragment williamr@2: * @param aAttrs are the XML attributes of this fragment williamr@2: * Leave codes: williamr@2: * KErrSenInvalidCharacters if aLocalName or aQName contains williamr@2: * illegal characters. williamr@2: * KErrSenZeroLengthDescriptor if aLocalName or aQName is zero length. williamr@2: */ williamr@2: IMPORT_C static CSenDomFragment* NewL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aQName, williamr@2: const RAttributeArray& aAttrs); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @since Series60 3.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 aQName is the qualifiedname 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: * Leave codes: williamr@2: * KErrSenInvalidCharacters if aLocalName or aQName contains williamr@2: * illegal characters. williamr@2: * KErrSenZeroLengthDescriptor if aLocalName or aQName is zero length. williamr@2: */ williamr@2: IMPORT_C static CSenDomFragment* NewL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aQName, williamr@2: const RAttributeArray& aAttrs, williamr@2: CSenElement& aParent); williamr@2: williamr@2: /** williamr@2: * Destructor. williamr@2: */ williamr@2: IMPORT_C virtual ~CSenDomFragment(); 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 3.0 williamr@2: * @param aNsUri The namespace URI of the new element williamr@2: * @param aLocalName The local name of the new element williamr@2: * @param aQName The qualified name of the new element williamr@2: * @param aAttrs The attributes of the new element williamr@2: */ williamr@2: IMPORT_C virtual void ExpandL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aQName, williamr@2: const RAttributeArray& aAttrs); 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 3.0 williamr@2: * @param aNsUri The namespace URI of the current element williamr@2: * @param aLocalName The local name of the current element williamr@2: * @param aQName The qualified name of the current element williamr@2: */ williamr@2: IMPORT_C void ResumeParsingFromL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aQName); williamr@2: williamr@2: /** williamr@2: * Sets the reader for this fragment and sets this to be the williamr@2: * content handler of the following SAX events. williamr@2: * @since Series60 3.0 williamr@2: * @param aReader: Reader to be used. williamr@2: */ williamr@2: IMPORT_C virtual void ParseWithL(CSenXmlReader& aReader); williamr@2: williamr@2: /** williamr@2: * Sets the attributes for the fragment. williamr@2: * @since Series60 3.0 williamr@2: * @param aAttrs the array of attributes. williamr@2: */ williamr@2: IMPORT_C virtual void SetAttributesL(const RAttributeArray& aAttrs); williamr@2: williamr@2: protected: williamr@2: williamr@2: /** williamr@2: * C++ default constructor. williamr@2: */ williamr@2: IMPORT_C CSenDomFragment(); williamr@2: williamr@2: /** williamr@2: * "ConstructL" method for calling the base classes ones. williamr@2: * @since Series60 3.0 williamr@2: * @param aElement is the XML element of this fragment. williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(const CSenElement& aElement); williamr@2: williamr@2: /** williamr@2: * "ConstructL" method for calling the base classes ones. williamr@2: * @since Series60 3.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 3.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 3.0 williamr@2: * @param aNsUri The namespace URI of the element williamr@2: * @param aLocalName The local name of the element williamr@2: * @param aQName The qualified name of the element williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aQName); williamr@2: williamr@2: /** williamr@2: * "ConstructL" method for calling the base classes ones. williamr@2: * @since Series60 3.0 williamr@2: * @param aNsUri The namespace URI of the element williamr@2: * @param aLocalName The local name of the element williamr@2: * @param aQName The qualified name 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& aQName, williamr@2: const RAttributeArray& aAttrs); williamr@2: williamr@2: /** williamr@2: * "ConstructL" method for calling the base classes ones. williamr@2: * @since Series60 3.0 williamr@2: * @param aNsUri The namespace URI of the element williamr@2: * @param aLocalName The local name of the element williamr@2: * @param aQName The qualified name 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& aQName, williamr@2: const RAttributeArray& aAttrs, williamr@2: CSenElement& aParent); williamr@2: williamr@2: /** williamr@2: * "ConstructL" method for calling the base classes ones. williamr@2: * @since Series60 3.0 williamr@2: * @param aReader is the XML reader for this fragment. williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(CSenXmlReader& aReader); williamr@2: williamr@2: // Functions from base classes 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: /** williamr@2: * @since Series60 3.0 williamr@2: * @param aNsUri The namespace URI of the element williamr@2: * @param aLocalName The local name of the element williamr@2: * @param aQName The qualified name of the element williamr@2: * @param aAttrs The attributes of the element williamr@2: */ williamr@2: IMPORT_C virtual void StartElementL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aQName, williamr@2: const RAttributeArray& aAttrs); williamr@2: williamr@2: /** williamr@2: * Callback functions which implement the XML content handler interface. williamr@2: * This one is called when content is starting. williamr@2: * @since Series60 3.0 williamr@2: * @param aChars The content characters. williamr@2: * @param aStart The starting index williamr@2: * @param aLength The length of the characters. williamr@2: */ williamr@2: IMPORT_C virtual void CharactersL(const TDesC8& aChars,TInt aStart,TInt aLength); 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 3.0 williamr@2: * @param aNsUri not used williamr@2: * @param aLocalName not used williamr@2: * @param aQName not used williamr@2: * @param aAttrs not used williamr@2: */ williamr@2: IMPORT_C void WriteStartElementL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aQName, williamr@2: const RAttributeArray& aAttrs); 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 3.0 williamr@2: * @param aNsUri not used williamr@2: * @param aLocalName not used williamr@2: * @param aQName not used williamr@2: */ williamr@2: IMPORT_C void WriteEndElementL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aQName); williamr@2: williamr@2: protected: // Data williamr@2: CSenDomFragment* ipDomDelegate; williamr@2: }; williamr@2: williamr@2: #endif //SEN_DOM_FRAGMENT_H williamr@2: williamr@2: // End of File williamr@2: williamr@2: williamr@2: