--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/legacyminidomparser/xmldom/inc/gmxmlelement.h Mon Sep 13 13:16:40 2010 +0530
@@ -0,0 +1,194 @@
+// Copyright (c) 2001-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:
+// This file contains the declaration of the CMDXMLElement class.
+//
+//
+
+/**
+ @file
+*/
+
+#ifndef __GMXMLELEMENT_H__
+#define __GMXMLELEMENT_H__
+
+#include <e32base.h>
+#include <badesca.h>
+#include <gmxmlnode.h>
+
+
+// forward references
+class CMDXMLEntityConverter;
+class CMDXMLComposer;
+
+
+// Constants for the initial and terminal states
+const TInt KXMLMinJump = 5; // Don't do binary chop below this size. Not a critical value.
+
+class CMDXMLElement : public CMDXMLNode
+/** Generic XML element, and base class for particular XML element types.
+
+It provides access to the element tag name and its attribute list. Attributes are
+stored as name-value pairs.
+@publishedPartner
+@released
+*/
+{
+public:
+ /** Allocates and constructs a new CMDXMLElement, leaving the object on the cleanup
+ stack.
+
+ @param aCanHaveChildren Set to true if the element can have children
+ @param aOwnerDocument Pointer to the document at the root of the DOM tree
+ @param aTagName Name of the tag for the element
+ @leave KErrNoMemory Out of memory
+ @return The new CMDXMLElement */
+ IMPORT_C static CMDXMLElement* NewLC( TBool aCanHaveChildren, CMDXMLDocument* aOwnerDocument, TPtrC aTagName );
+
+ /** Allocates and constructs a new CMDXMLElement.
+
+ @param aCanHaveChildren Set to true if the element can have children
+ @param aOwnerDocument Pointer to the document at the root of the DOM tree
+ @param aTagName Name of the tag for the element
+ @leave KErrNoMemory Out of memory
+ @return The new CMDXMLElement */
+ IMPORT_C static CMDXMLElement* NewL( TBool aCanHaveChildren, CMDXMLDocument* aOwnerDocument, TPtrC aTagName );
+
+ /** Destructor. */
+ IMPORT_C virtual ~CMDXMLElement();
+
+ // Attribute handling routines.
+
+ /** Gets a specified attribute value.
+
+ @param aAttributeName Name of the attribute to get
+ @param aAttributeValue On return, the value of the attribute
+ @return KErrNone if successful, KErrNotFound if the named attribute is not set. */
+ IMPORT_C virtual TInt GetAttribute(const TDesC& aAttributeName, TPtrC& aAttributeValue ) const;
+
+ /** Checks the validity of an attribute and adds it to the DOM if it's valid.
+
+ @param aAttributeName Name of the attribute to set
+ @param aAttributeValue Value of the attribute
+ @leave KErrNoMemory Out of memory
+ @return KErrNone if successful, KErrNotSupported if an invalid attribute name
+ or attribute value. */
+ IMPORT_C virtual TInt SetAttributeL(const TDesC& aAttributeName, const TDesC& aAttributeValue);
+
+ /** Checks the validity of an attribute and adds it to the DOM. The aStoreInvalid
+ parameter is used to control whether invalid attributes are added to the DOM.
+ @param aAttributeName Name of the attribute to set
+ @param aAttributeValue Value of the attribute
+ @param aStoreInvalid If set to EFalse only attributes that are found to be valid will be added to
+ the DOM. Set to ETrue to store all attributes in the DOM, even those that are invalid.
+ @leave KErrNoMemory Out of memory
+ @return KErrNone if successful, KErrNotSupported if an invalid attribute name
+ or attribute value. */
+ IMPORT_C TInt SetAttributeL(const TDesC& aAttributeName, const TDesC& aAttributeValue, TBool aStoreInvalid);
+
+ /** Removes a specified attribute.
+
+ @param aAttributeName Name of the attribute to remove
+ @return KErrNone if successful, KErrNotFound if the named attribute is not
+ present. */
+ IMPORT_C virtual TInt RemoveAttribute(const TDesC& aAttributeName);
+
+ /** Tests if a specified attribute is set.
+
+ @param aAttributeName Name of the attribute to test
+ @return True if the named attribute has a value set, false if not */
+ IMPORT_C virtual TBool IsAttributeSpecified(const TDesC& aAttributeName) const;
+
+
+ /** Checks the children of this node for validity.
+
+ It checks that the list of child elements conforms to those allowed by the DTD.
+
+ In a generic CMDXMLElement object, this is always true as it has no basis
+ for a meaningful check. As well as checking the list of direct children, it
+ calls CheckChildren() for each child element. It does not check child nodes
+ that are not elements, as they cannot have children.
+
+ @return True if the node has valid children */
+ IMPORT_C virtual TBool CheckChildren();
+
+// maybe these should be node functions ?
+ /** Gets a pointer to the first child of a given type if any, otherwise returns
+ NULL.
+
+ @param aElementType Name of element type to return
+ @return First child element */
+ IMPORT_C CMDXMLElement* FirstChildOfType(const TDesC& aElementType);
+
+ /** Gets a pointer to the last child of a given type if any, otherwise returns
+ NULL.
+
+ @param aElementType Name of element type to return
+ @return Last child element */
+ IMPORT_C CMDXMLElement* LastChildOfType(const TDesC& aElementType);
+
+
+
+protected: //construction
+ /**
+ * Constructor
+ * @param aCanHaveChildren Flag to indicate if the node represents a node which is allowed children
+ * @param aOwnerDocument Pointer to the document at the root of the DOM tree - if NULL then assume this is the root
+ */
+ IMPORT_C CMDXMLElement( TBool aCanHaveChildren, CMDXMLDocument* aOwnerDocument );
+
+ void ConstructL();
+protected:
+ /**
+ * Check the immediate children of this element - i.e. the first level of children only
+ * The default implementation returns true - derived classes can override with
+ * DTD-specific checks.
+ * @return True if immediate children are valid
+ */
+ IMPORT_C virtual TBool CheckImmediateChildren();
+
+private:
+ TBool DoCheckImmediateChildrenL();
+
+
+public:
+ /** Finds an attribute and returns the index of it.
+
+ @param aAttName The attribute to search for
+ @return The index of the attribute if found, or KErrNotFound */
+ IMPORT_C TInt FindIndex(const TDesC &aAttName);
+
+
+ /** Gets the name and value of an attribute at a given index.
+
+ @param Index The array index of the element for which details are required
+ @param aAttributeName The attribute name returned
+ @param aAttributeValue The attribute value returned
+ @return KErrNone if index is valid, else KErrNotFound */
+ IMPORT_C TInt AttributeDetails(TInt Index, TPtrC& aAttributeName, TPtrC& aAttributeValue);
+
+ /** Gets the number of attributes that this element has.
+
+ @return The number of attributes held by the element */
+ IMPORT_C TInt NumAttributes();
+
+protected:
+ /** Store attribute names */
+ CDesCArraySeg* iDescAttName; // Store Attribute Names
+ /** Store attribute values */
+ CDesCArraySeg* iDescAttValue; // Store Attribute Values
+
+};
+
+
+#endif