dependencies/xcfw/gmxmlelement.h
author jake
Mon, 24 May 2010 12:15:02 +0300
branchv5backport
changeset 76 62d594099fbe
parent 17 c9bafd575d88
permissions -rw-r--r--
IdleFW tried to load old UI controller, because of wrong value in Cenrep. Ui controller loading failed ( KErrNotFound ), because the dlls were missing which the plug-in links against.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     1
// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     2
// All rights reserved.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     3
// This component and the accompanying materials are made available
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     5
// which accompanies this distribution, and is available
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     7
//
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     8
// Initial Contributors:
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    10
//
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    11
// Contributors:
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    12
//
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    13
// Description:
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    14
// This file contains the declaration of the CMDXMLElement class.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    15
// 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    16
//
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    17
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    18
/**
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    19
 @file
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    20
*/
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    21
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    22
#ifndef __GMXMLELEMENT_H__
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    23
#define __GMXMLELEMENT_H__
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    24
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    25
#include <e32base.h>
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    26
#include <badesca.h>
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    27
#include <gmxmlnode.h>
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    28
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    29
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    30
// forward references
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    31
class CMDXMLEntityConverter;
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    32
class CMDXMLComposer;
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    33
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    34
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    35
// Constants for the initial and terminal states
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    36
const TInt KXMLMinJump = 5; // Don't do binary chop below this size.  Not a critical value.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    37
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    38
class CMDXMLElement : public CMDXMLNode
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    39
/** Generic XML element, and base class for particular XML element types.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    40
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    41
It provides access to the element tag name and its attribute list. Attributes are
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    42
stored as name-value pairs.  
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    43
@publishedPartner
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    44
@released
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    45
*/
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    46
{
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    47
public:
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    48
	/** Allocates and constructs a new CMDXMLElement, leaving the object on the cleanup 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    49
	stack.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    50
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    51
	@param aCanHaveChildren Set to true if the element can have children
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    52
	@param aOwnerDocument Pointer to the document at the root of the DOM tree
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    53
	@param aTagName Name of the tag for the element
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    54
	@leave KErrNoMemory Out of memory
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    55
	@return The new CMDXMLElement */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    56
	IMPORT_C static CMDXMLElement* NewLC( TBool aCanHaveChildren, CMDXMLDocument* aOwnerDocument, TPtrC aTagName );
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    57
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    58
	/** Allocates and constructs a new CMDXMLElement.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    59
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    60
	@param aCanHaveChildren Set to true if the element can have children
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    61
	@param aOwnerDocument Pointer to the document at the root of the DOM tree
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    62
	@param aTagName Name of the tag for the element
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    63
	@leave KErrNoMemory Out of memory
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    64
	@return The new CMDXMLElement */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    65
	IMPORT_C static CMDXMLElement* NewL( TBool aCanHaveChildren, CMDXMLDocument* aOwnerDocument, TPtrC aTagName );
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    66
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    67
	/** Destructor. */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    68
	IMPORT_C virtual ~CMDXMLElement();
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    69
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    70
	// Attribute handling routines.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    71
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    72
	/** Gets a specified attribute value.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    73
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    74
	@param aAttributeName Name of the attribute to get
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    75
	@param aAttributeValue On return, the value of the attribute
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    76
	@return KErrNone if successful, KErrNotFound if the named attribute is not set. */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    77
	IMPORT_C virtual TInt GetAttribute(const TDesC& aAttributeName, TPtrC& aAttributeValue ) const;
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    78
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    79
	/** Checks the validity of an attribute and adds it to the DOM if it's valid.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    80
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    81
	@param aAttributeName Name of the attribute to set
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    82
	@param aAttributeValue Value of the attribute
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    83
	@leave KErrNoMemory Out of memory
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    84
	@return KErrNone if successful, KErrNotSupported if an invalid attribute name 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    85
	or attribute value. */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    86
	IMPORT_C virtual TInt SetAttributeL(const TDesC& aAttributeName, const TDesC& aAttributeValue);
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    87
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    88
	/** Checks the validity of an attribute and adds it to the DOM.  The aStoreInvalid 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    89
	parameter is used to control whether invalid attributes are added to the DOM.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    90
	@param aAttributeName Name of the attribute to set
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    91
	@param aAttributeValue Value of the attribute
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    92
	@param aStoreInvalid If set to EFalse only attributes that are found to be valid will be added to
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    93
	the DOM.  Set to ETrue to store all attributes in the DOM, even those that are invalid.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    94
	@leave KErrNoMemory Out of memory
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    95
	@return KErrNone if successful, KErrNotSupported if an invalid attribute name 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    96
	or attribute value. */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    97
	IMPORT_C TInt SetAttributeL(const TDesC& aAttributeName, const TDesC& aAttributeValue, TBool aStoreInvalid);
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    98
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    99
	/** Removes a specified attribute.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   100
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   101
	@param aAttributeName Name of the attribute to remove
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   102
	@return KErrNone if successful, KErrNotFound if the named attribute is not 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   103
	present. */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   104
	IMPORT_C virtual TInt RemoveAttribute(const TDesC& aAttributeName);
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   105
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   106
	/** Tests if a specified attribute is set.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   107
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   108
	@param aAttributeName Name of the attribute to test
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   109
	@return True if the named attribute has a value set, false if not */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   110
	IMPORT_C virtual TBool IsAttributeSpecified(const TDesC& aAttributeName) const;
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   111
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   112
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   113
	/** Checks the children of this node for validity.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   114
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   115
	It checks that the list of child elements conforms to those allowed by the DTD. 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   116
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   117
	In a generic CMDXMLElement object, this is always true as it has no basis 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   118
	for a meaningful check. As well as checking the list of direct children, it 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   119
	calls CheckChildren() for each child element. It does not check child nodes 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   120
	that are not elements, as they cannot have children.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   121
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   122
	@return True if the node has valid children */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   123
	IMPORT_C virtual TBool CheckChildren();
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   124
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   125
// maybe these should be node functions ?
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   126
	/** Gets a pointer to the first child of a given type if any, otherwise returns 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   127
	NULL.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   128
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   129
	@param aElementType Name of element type to return
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   130
	@return First child element */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   131
	IMPORT_C CMDXMLElement* FirstChildOfType(const TDesC& aElementType);
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   132
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   133
	/** Gets a pointer to the last child of a given type if any, otherwise returns 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   134
	NULL.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   135
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   136
	@param aElementType Name of element type to return
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   137
	@return Last child element */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   138
	IMPORT_C CMDXMLElement* LastChildOfType(const TDesC& aElementType);
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   139
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   140
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   141
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   142
protected: //construction
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   143
	/**
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   144
	 * Constructor
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   145
	 * @param aCanHaveChildren Flag to indicate if the node represents a node which is allowed children
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   146
	 * @param aOwnerDocument Pointer to the document at the root of the DOM tree - if NULL then assume this is the root
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   147
	 */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   148
	IMPORT_C CMDXMLElement( TBool aCanHaveChildren, CMDXMLDocument* aOwnerDocument );
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   149
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   150
	void ConstructL();
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   151
protected:
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   152
	/**
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   153
	 * Check the immediate children of this element - i.e. the first level of children only
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   154
	 * The default implementation returns true - derived classes can override with
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   155
	 * DTD-specific checks.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   156
	 * @return True if immediate children are valid
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   157
	 */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   158
	IMPORT_C virtual TBool CheckImmediateChildren();
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   159
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   160
private:
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   161
	 TBool DoCheckImmediateChildrenL();
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   162
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   163
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   164
public: 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   165
	/** Finds an attribute and returns the index of it.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   166
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   167
	@param aAttName The attribute to search for
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   168
	@return The index of the attribute if found, or KErrNotFound */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   169
	IMPORT_C TInt FindIndex(const TDesC &aAttName);
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   170
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   171
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   172
	/** Gets the name and value of an attribute at a given index.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   173
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   174
	@param Index The array index of the element for which details are required
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   175
	@param aAttributeName The attribute name returned
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   176
	@param aAttributeValue The attribute value returned
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   177
	@return KErrNone if index is valid, else KErrNotFound */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   178
	IMPORT_C TInt AttributeDetails(TInt Index, TPtrC& aAttributeName, TPtrC& aAttributeValue);
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   179
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   180
	/** Gets the number of attributes that this element has.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   181
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   182
	@return The number of attributes held by the element */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   183
	IMPORT_C TInt NumAttributes();
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   184
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   185
protected:
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   186
	/** Store attribute names */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   187
	CDesCArraySeg* iDescAttName;		// Store Attribute Names
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   188
	/** Store attribute values */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   189
	CDesCArraySeg* iDescAttValue;		// Store Attribute Values
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   190
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   191
};
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   192
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   193
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   194
#endif