diff -r 417699dc19c9 -r c7e9f1c97567 xml/legacyminidomparser/XMLDom/SRC/GMXMLElement.cpp --- a/xml/legacyminidomparser/XMLDom/SRC/GMXMLElement.cpp Thu Jul 01 15:13:40 2010 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,378 +0,0 @@ -// 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: -// MDXMLElement.CPP -// @file -// This file contains the implementation of the CMDXMLElement class. -// This class represents a generic XML element with attributes -// stored as name-value pairs. DTD-specific element classes -// will store their attributes as member variables. -// -// - -#include - -#include -#include -#include -#include - - -EXPORT_C CMDXMLElement* CMDXMLElement::NewLC( TBool aCanHaveChildren, CMDXMLDocument* aOwnerDocument, TPtrC aTagName ) -// -// Two phase constructor -// @param aCanHaveChildren Flag to indicate if the node represents a node -// @param aOwnerDocument Pointer to the document at the root of the DOM tree -// @param aTagName Name of the tag used to create the element -// @return Created CMDXMLElement -// @leave can Leave due to OOM -// - { - CMDXMLElement* elPtr = new(ELeave) CMDXMLElement( aCanHaveChildren, aOwnerDocument ); - CleanupStack::PushL( elPtr ); - elPtr->SetNodeNameL( aTagName ); - elPtr->ConstructL(); - return elPtr; - } - -EXPORT_C CMDXMLElement* CMDXMLElement::NewL( TBool aCanHaveChildren, CMDXMLDocument* aOwnerDocument, TPtrC aTagName ) -// -// Two phase constructor -// @param aCanHaveChildren Flag to indicate if the node represents a node -// @param aOwnerDocument Pointer to the document at the root of the DOM tree -// @param aTagName Name of the tag used to create the element -// @return Created CMDXMLElement -// @leave can Leave due to OOM -// - { - CMDXMLElement* elPtr = CMDXMLElement::NewLC( aCanHaveChildren, aOwnerDocument, aTagName ); - CleanupStack::Pop(elPtr); - return elPtr; - } - -EXPORT_C CMDXMLElement::CMDXMLElement( TBool aCanHaveChildren, CMDXMLDocument* aOwnerDocument ): -CMDXMLNode( EElementNode, aCanHaveChildren, aOwnerDocument) -// -// 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 -// - { - // No other work to do. - } - -void CMDXMLElement::ConstructL() -/** - * 2nd-phase constructor. Initialises this object's member data. - * - * @leave KErrXxx Standard EPOC error codes if allocation or construction of the object's members fails - */ - { - iDescAttName = new (ELeave) CDesCArraySeg(1); - iDescAttValue = new (ELeave) CDesCArraySeg(1); - - } - -EXPORT_C CMDXMLElement::~CMDXMLElement() -/** - * C++ destructor - */ - { - // Delete the array of attribute name-value pairs. - if(iDescAttName) - delete iDescAttName; - - if(iDescAttValue) - delete iDescAttValue; - - } - - -EXPORT_C TInt CMDXMLElement::GetAttribute(const TDesC& aAttributeName, TPtrC& aAttributeValue) const -// -// Returns the attribute value if it is set. -// @param aAttributeName Name of attribute to return -// @param aAttributeValue Value of attribute returned -// @return Returns KErrNone if successful, KErrNotFound if the named attribute -// is not set or KErrNotSupported if the named attribute doesn't exist. -// - { - TInt returnValue = KErrNone; - - TInt index; - TInt attributeFound; - attributeFound = iDescAttName->Find(aAttributeName,index); - - if(attributeFound == 0) - { - aAttributeValue.Set(iDescAttValue->MdcaPoint(index)); - } - else - returnValue = KErrNotSupported; - - return returnValue; - - } - -EXPORT_C TInt CMDXMLElement::SetAttributeL(const TDesC& aAttributeName, const TDesC& aAttributeValue) -// -// Sets the attribute value.if it is valid -// @param aAttributeName Name of attribute to set -// @param aAttributeValue Value of attribute -// @return Returns KErrNone if successful, KErrNotSupported if a DTD-specific class. -// @leave Can Leave due to OOM -// - { - return SetAttributeL(aAttributeName, aAttributeValue, EFalse); - } - -EXPORT_C TInt CMDXMLElement::SetAttributeL(const TDesC& aAttributeName, const TDesC& aAttributeValue, TBool aStoreInvalid) -// -// Checks an attribute for validity 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 attribute to set -// @param aAttributeValue Value of attribute -// @param aStoreInvalid If set to ETrue all attributes will be stored in the DOM. Otherwise only those that are valid will be. -// @return Returns KErrNone if successful, KErrNotSupported if a DTD-specific class. -// @leave Can Leave due to OOM -// - { - TInt returnValue = (iOwnerDocument->DtdRepresentation()).IsValidAttributeForElementL(NodeName(), aAttributeName, aAttributeValue); - - if(returnValue == KErrNone || aStoreInvalid) - { - iDescAttName->AppendL(aAttributeName); - iDescAttValue->AppendL(aAttributeValue); - } - - return returnValue; - } - -EXPORT_C TInt CMDXMLElement::RemoveAttribute(const TDesC& aAttributeName) -// -// Removes the named attribute if present. -// @param aAttributeName Name of attribute to set -// @return Returns KErrNone if successful, KErrNotFound if the named attribute is not set, KErrNotSupported if a DTD-specific class. -// - { - TInt returnValue = KErrNone; - - TInt index; - TInt attributeFound; - attributeFound = iDescAttName->Find(aAttributeName,index); - - if(attributeFound == 0) - { - iDescAttName->Delete(index); - iDescAttValue->Delete(index); - } - else - returnValue = KErrNotFound; - - return returnValue; - } - - -EXPORT_C TBool CMDXMLElement::IsAttributeSpecified(const TDesC& aAttributeName) const -// -// Finds out whether or not the named attribute is set -// @param aAttributeName Name of attribute that is subject of the enquiry. -// @return true of the named attribute has a value set, false if not -// - { - TBool returnValue = EFalse; - - if(iDescAttName) - { - TInt index = 0; - TInt found = 0; - found = iDescAttName->Find(aAttributeName,index); - if(found == 0) - returnValue = ETrue; - } - - return returnValue; - } - - - - - -EXPORT_C TBool CMDXMLElement::CheckImmediateChildren() -// Check the immediate children of this element - i.e. the first level of children only -// If the document has not been constructed with a pointer to a MXMLDtd object then a default ETrue will be returned -// Otherwise the MXMLDtd object is used to validate immediate children - returns ETrue if valid -// @return True if immediate children are valid - { - TBool returnValue = ETrue; - TRAPD(error,returnValue = DoCheckImmediateChildrenL()); - if(error != KErrNone) - { - return EFalse; - } - return returnValue; - } - -TBool CMDXMLElement::DoCheckImmediateChildrenL() - { - TBool returnValue = ETrue; - - // Create an array of this elements immediate children - CDesCArray* children = new (ELeave) CDesCArrayFlat(3); - CleanupStack::PushL(children); - - if (HasChildNodes()) - { - CMDXMLNode* childPtr; - childPtr = FirstChild(); - // Cycle through the siblings - while (childPtr != NULL) - { - if( childPtr->NodeType() == EElementNode ) - children->AppendL(childPtr->NodeName()); - childPtr = childPtr->NextSibling(); - } - returnValue = OwnerDocument()->DtdRepresentation().AreValidChildElementsL(this->NodeName(),*children); - } - - // Do a DTD specific check to see if the children are valid - CleanupStack::PopAndDestroy(); // children - - return returnValue; - } - -EXPORT_C TBool CMDXMLElement::CheckChildren() -// -// Check the children of this node for legality - must be defined based on DTD. -// This function checks that the list of child elements -// conforms to those allowed by the DTD. -// As well as checking the list of direct children, it -// calls CheckChildren for each child element which is an -// element (it does not call this for child nodes which are -// not elements as they cannot have children). -// @return True if the node has legitimate children -// - { - TBool retVal= CheckImmediateChildren(); - if( retVal && HasChildNodes() ) - { - CMDXMLNode* childPtr; - childPtr = FirstChild(); - while((childPtr != NULL) && (retVal != false)) - { - if( childPtr->NodeType() == EElementNode ) - { - retVal = childPtr->CheckChildren(); - } - childPtr = childPtr->NextSibling(); - } - } - - return retVal; - } - - -EXPORT_C TInt CMDXMLElement::FindIndex(const TDesC &aAttName) -// -// Find an attribute and return the index of it -// @param aAttName the string to search for -// @return returns the index of the string if found or KErrNotFound -// - { - TInt index = KErrNotFound; - - if(iDescAttName) - { - TInt found = 0; - found = iDescAttName->Find(aAttName,index); - if(found != 0) - index = KErrNotFound; - } - - return index; - - - } - - -EXPORT_C TInt CMDXMLElement::AttributeDetails(TInt aIndex, TPtrC& aAttributeName, TPtrC& aAttributeValue) -// -// Retrieves the Name and Value of an attribute at a given index -// @param aIndex the array index of the element for which details are required -// @param aAttributeName the attribute name returned -// @param aAttributeValue the attribute value returned -// @return returns KErrNone if index is valid else KErrNotFound -// - - { - TInt error = KErrNone; - if (iDescAttName->Count() < aIndex) - error = KErrNotFound; - else - { - aAttributeValue.Set(iDescAttValue->MdcaPoint(aIndex)); - aAttributeName.Set(iDescAttName->MdcaPoint(aIndex)); - } - return error; - } - - - -EXPORT_C TInt CMDXMLElement::NumAttributes() -// -// Retrieves the Number od Attributes that this element has -// @return returns the number of attributes held by the element -// - { - return iDescAttName->Count(); - } - - -EXPORT_C CMDXMLElement* CMDXMLElement::FirstChildOfType(const TDesC& aElementType) -// @return Returns a pointer to the first child of a given type if any, otherwise returns NULL -// @param aElementType Name of element type to return - { - CMDXMLElement* retVal = NULL; - CMDXMLNode* nodePtr = FirstChild(); - while((nodePtr != NULL) && (nodePtr->NodeName()).Compare(aElementType) != 0) - { - nodePtr = nodePtr->NextSibling(); - } - if( nodePtr != NULL ) - { - retVal = (CMDXMLElement*)nodePtr; - } - return retVal; - - } - -EXPORT_C CMDXMLElement* CMDXMLElement::LastChildOfType(const TDesC& aElementType) -// @return Returns a pointer to the last child of a given type if any, otherwise returns NULL -// @param aElementType Name of element type to return - - { - CMDXMLElement* retVal = NULL; - CMDXMLNode* nodePtr = LastChild(); - while((nodePtr != NULL) && (nodePtr->NodeName()).Compare(aElementType) != 0) - { - nodePtr = nodePtr->PreviousSibling(); - } - if( nodePtr != NULL ) - { - retVal = (CMDXMLElement*)nodePtr; - } - return retVal; - } - - -// End Of File