--- a/XDMEngine/src/XdmDocumentNode.cpp Thu May 27 13:17:17 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1143 +0,0 @@
-/*
-* Copyright (c) 2005 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: XDM Engine document node
-*
-*/
-
-
-
-
-// INCLUDE FILES
-#include "XdmEngine.h"
-#include "XdmDocument.h"
-#include "XdmNodeFactory.h"
-#include "XdmDocumentNode.h"
-#include "XdmNodeAttribute.h"
-
-//XML Escape codes
-_LIT8( KXmlBracketOpenEsc, "<");
-_LIT8( KXmlBracketCloseEsc, ">");
-_LIT8( KXmlAmpersandEsc, "&");
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::CXdmDocumentNode
-//
-// ----------------------------------------------------------
-//
-EXPORT_C CXdmDocumentNode::CXdmDocumentNode( CXdmEngine& aXdmEngine,
- MXdmNodeFactory& aNodeFactory ) :
- iPosition( KErrNotFound ),
- iEmptyNode( EFalse ),
- iXdmEngine( aXdmEngine ),
- iNodeFactory( aNodeFactory )
- {
- }
-
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::CXdmDocumentNode
-//
-// ----------------------------------------------------------
-//
-EXPORT_C CXdmDocumentNode::CXdmDocumentNode( CXdmEngine& aXdmEngine,
- MXdmNodeFactory& aNodeFactory,
- CXdmDocumentNode* aParentNode ) :
- iEmptyNode( EFalse ),
- iXdmEngine( aXdmEngine ),
- iNodeFactory( aNodeFactory ),
- iParentNode( aParentNode )
-
- {
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::CXdmDocumentNode
-//
-// ----------------------------------------------------------
-//
-EXPORT_C CXdmDocumentNode::CXdmDocumentNode( const TBool aLeafNode,
- CXdmEngine& aXdmEngine,
- MXdmNodeFactory& aNodeFactory,
- CXdmDocumentNode* aParentNode ) :
- iLeafNode( aLeafNode ),
- iEmptyNode( EFalse ),
- iXdmEngine( aXdmEngine ),
- iNodeFactory( aNodeFactory ),
- iParentNode( aParentNode )
-
- {
-
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::ConstructL
-//
-// ----------------------------------------------------------
-//
-EXPORT_C void CXdmDocumentNode::BaseConstructL( const TDesC& aNodeName )
- {
- delete iNodeName;
- iNodeName = NULL;
- iNodeName = HBufC::NewL( aNodeName.Length() );
- iNodeName->Des().Copy( aNodeName );
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::CopyConstructL
-//
-// ----------------------------------------------------------
-//
-EXPORT_C void CXdmDocumentNode::CopyConstructL( const CXdmDocumentNode& aAnotherNode,
- const CXdmDocumentNode& aParentNode )
- {
- #ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::CopyConstructL()" ) );
- #endif
- if( aAnotherNode.ElementType() != EXdmElementAttribute )
- {
- ConstructChildrenL( aAnotherNode );
- ConstructAttributesL( aAnotherNode );
- }
- iLeafNode = aAnotherNode.IsLeafNode();
- iEmptyNode = aAnotherNode.IsEmptyNode();
- if( iLeafNode )
- {
- iLeafContent = HBufC8::New( aAnotherNode.LeafNodeContent().Length() );
- iLeafContent->Des().Copy( aAnotherNode.LeafNodeContent() );
- }
- iParentNode = CONST_CAST( CXdmDocumentNode*, &aParentNode );
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::ConstructAttributesL
-//
-// ----------------------------------------------------------
-//
-void CXdmDocumentNode::ConstructAttributesL( const CXdmDocumentNode& aAnotherNode )
- {
- #ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::CopyConstructL()" ) );
- #endif
- TInt attrCount = aAnotherNode.AttributeCount();
- for( TInt i = 0;i < attrCount;i++ )
- {
- TPtrC name = aAnotherNode.Attribute( i )->NodeName();
- TPtrC value = aAnotherNode.Attribute( i )->AttributeValue();
- CXdmNodeAttribute* attribute = iNodeFactory.AttributeL( name );
- CleanupStack::PushL( attribute );
- attribute->SetAttributeValueL( value );
- User::LeaveIfError( iAttributes.Append( attribute ) );
- CleanupStack::Pop(); //attribute
- }
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::ConstructChildrenL
-//
-// ----------------------------------------------------------
-//
-void CXdmDocumentNode::ConstructChildrenL( const CXdmDocumentNode& aAnotherNode )
- {
- #ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::ConstructChildrenL()" ) );
- #endif
- TInt childCount = aAnotherNode.NodeCount();
- for( TInt i = 0;i < childCount;i++ )
- {
- CXdmDocumentNode* node = aAnotherNode.ChileNode( i );
- CXdmDocumentNode* copy = iNodeFactory.ChileNodeL( node );
- CleanupStack::PushL( copy );
- User::LeaveIfError( iChildren.Append( copy ) );
- CleanupStack::Pop(); //copy
- }
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::~CXdmDocumentNode
-//
-// ----------------------------------------------------
-//
-EXPORT_C CXdmDocumentNode::~CXdmDocumentNode()
- {
- #ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::~CXdmDocumentNode()" ) );
- #endif
- delete iNextNode;
- iNextNode = NULL;
- delete iLeafContent;
- delete iNodeName;
- iChildren.ResetAndDestroy();
- iChildren.Close();
- iAttributes.ResetAndDestroy();
- iAttributes.Close();
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::CreateChileNodeL
-//
-// ----------------------------------------------------
-//
-EXPORT_C CXdmDocumentNode* CXdmDocumentNode::CreateChileNodeL()
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::CreateChileNodeL()" ) );
- #endif*/
- __ASSERT_ALWAYS( !iEmptyNode, User::Panic( _L( "CXdmDocumentNode" ), ENodeNotEmpty ) );
- CXdmDocumentNode* node = iNodeFactory.ChileNodeL();
- CleanupStack::PushL( node );
- User::LeaveIfError( iChildren.Append( node ) );
- CleanupStack::Pop(); //node
- return node;
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::CreateChileNodeL
-//
-// ----------------------------------------------------
-//
-EXPORT_C CXdmDocumentNode* CXdmDocumentNode::CreateChileNodeL( const TDesC& aChildName )
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::CreateChileNodeL() - Name: %S" ), &aChildName );
- #endif*/
- __ASSERT_ALWAYS( !iEmptyNode, User::Panic( _L( "CXdmDocumentNode" ), ENodeNotEmpty ) );
- CXdmDocumentNode* node = iNodeFactory.ChileNodeL( aChildName );
- CleanupStack::PushL( node );
- User::LeaveIfError( iChildren.Append( node ) );
- CleanupStack::Pop(); //node
- return node;
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::SetLeafNode
-//
-// ----------------------------------------------------
-//
-EXPORT_C void CXdmDocumentNode::SetLeafNode( const TBool aIsLeafNode )
- {
- iLeafNode = aIsLeafNode;
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::IsLeafNode
-//
-// ----------------------------------------------------
-//
-EXPORT_C TBool CXdmDocumentNode::IsLeafNode() const
- {
- return iLeafNode;
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::SetEmptyNode
-//
-// ----------------------------------------------------
-//
-EXPORT_C void CXdmDocumentNode::SetEmptyNode( const TBool aIsEmptyNode )
- {
- //Do nothing if the state is not being changed
- if( aIsEmptyNode != iEmptyNode )
- {
- if( aIsEmptyNode )
- {
- if( !iEmptyNode )
- {
- TInt count = iChildren.Count();
- if( count > 0 )
- iChildren.ResetAndDestroy();
- }
- }
- iEmptyNode = aIsEmptyNode;
- }
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::IsEmptyNode
-//
-// ----------------------------------------------------
-//
-EXPORT_C TBool CXdmDocumentNode::IsEmptyNode() const
- {
- return iEmptyNode;
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::CreateAttributeL
-//
-// ----------------------------------------------------
-//
-EXPORT_C CXdmNodeAttribute* CXdmDocumentNode::CreateAttributeL()
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::CreateAttributeL()" ) );
- #endif*/
- CXdmDocumentNode* node = iNodeFactory.AttributeL();
- CleanupStack::PushL( node );
- User::LeaveIfError( iAttributes.Append( ( CXdmNodeAttribute* )node ) );
- CleanupStack::Pop(); //node
- return ( CXdmNodeAttribute* )node;
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::CreateAttributeL
-//
-// ----------------------------------------------------
-//
-EXPORT_C CXdmNodeAttribute* CXdmDocumentNode::CreateAttributeL( const TDesC& aAttributeName )
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::CreateAttributeL() - Name: %S" ), &aAttributeName );
- #endif*/
- CXdmDocumentNode* node = iNodeFactory.AttributeL( aAttributeName );
- CleanupStack::PushL( node );
- User::LeaveIfError( iAttributes.Append( ( CXdmNodeAttribute* )node ) );
- CleanupStack::Pop(); //node
- return ( CXdmNodeAttribute* )node;
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::SetLeafNodeContentL
-//
-// ----------------------------------------------------
-//
-EXPORT_C void CXdmDocumentNode::SetLeafNodeContentL( const TDesC& aLeafContent )
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::SetLeafNodeContentL( 16 ) - Content: %S" ),
- &aLeafContent );
- #endif*/
- if( iLeafNode )
- {
- delete iLeafContent;
- iLeafContent = NULL;
- iLeafContent = CXdmEngine::ConvertToUTF8L( aLeafContent );
- }
- else
- User::Leave( KErrGeneral );
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::SetLeafNodeContentL
-//
-// ----------------------------------------------------
-//
-EXPORT_C void CXdmDocumentNode::SetLeafNodeContentL( const TDesC8& aLeafContent )
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::SetLeafNodeContentL( 8 ) - Content: %S" ),
- &aLeafContent );
- #endif*/
- if( iLeafNode )
- {
- delete iLeafContent;
- iLeafContent = NULL;
- iLeafContent = HBufC8::NewL( aLeafContent.Length() );
- iLeafContent->Des().Copy( aLeafContent );
- }
- else
- User::Leave( KErrGeneral );
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::ElementData
-//
-// ----------------------------------------------------
-//
-EXPORT_C HBufC8* CXdmDocumentNode::ElementDataLC() const
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::ElementDataLC()" ) );
- #endif*/
- TInt position = 0;
- CBufFlat* buffer = CBufFlat::NewL( 48 );
- CleanupStack::PushL( buffer );
- buffer->InsertL( position, EightBitNodeNameLC()->Des() );
- CleanupStack::PopAndDestroy(); //EightBitNodeNameLC()
- position = position + NodeName().Length();
- TInt attributeCount = iAttributes.Count();
- if( attributeCount > 0 )
- {
- for( TInt i = 0;i < attributeCount;i++ )
- {
- buffer->InsertL( position, KGeneralSpace );
- position = position + KGeneralSpace().Length();
- CXdmNodeAttribute* attribute = iAttributes[i];
- TPtrC8 name( attribute->EightBitNodeNameLC()->Des() );
- buffer->InsertL( position, name );
- position = position + name.Length();
- buffer->InsertL( position, KGeneralEqualsAndQuotes );
- position = position + KGeneralEqualsAndQuotes().Length();
- TPtrC8 value( attribute->EscapedValueLC()->Des() );
- buffer->InsertL( position, value );
- position = position + value.Length();
- buffer->InsertL( position, KGeneralQuotes );
- position = position + KGeneralQuotes().Length();
- CleanupStack::PopAndDestroy( 2 ); //EscapedValueLC(),
- //EightBitNodeNameLC()
- }
- }
- HBufC8* ret = HBufC8::NewL( buffer->Size() );
- TPtr8 pointer( ret->Des() );
- buffer->Read( 0, pointer, buffer->Size() );
- CleanupStack::PopAndDestroy(); //buffer
- CleanupStack::PushL( ret );
- return ret;
- }
-
-// ----------------------------------------------------------
-// CXdmNodeAttribute::NodeCount
-//
-// ----------------------------------------------------------
-//
-EXPORT_C TInt CXdmDocumentNode::NodeCount() const
- {
- return iNextNode ? 1 : iChildren.Count();
- }
-
-// ----------------------------------------------------------
-// CXdmNodeAttribute::NodeCount
-//
-// ----------------------------------------------------------
-//
-EXPORT_C TInt CXdmDocumentNode::AttributeCount() const
- {
- return iAttributes.Count();
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::Parent
-//
-// ----------------------------------------------------------
-//
-EXPORT_C CXdmDocumentNode* CXdmDocumentNode::ChileNode( const TInt aPosition ) const
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::ChileNode() - Position: %d" ), aPosition );
- #endif*/
- if( iNextNode )
- return iNextNode;
- else
- {
- TInt count = NodeCount();
- if( count > 0 && aPosition >= 0 && aPosition < count )
- return iChildren[aPosition];
- else return NULL;
- }
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::Attribute
-//
-// ----------------------------------------------------------
-//
-EXPORT_C CXdmNodeAttribute* CXdmDocumentNode::Attribute( const TInt aPosition ) const
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::Attribute() - Position: %d" ), aPosition );
- #endif*/
- TInt count = iAttributes.Count();
- if( count > 0 && aPosition >= 0 && aPosition < count )
- return iAttributes[aPosition];
- else return NULL;
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::Attribute
-//
-// ----------------------------------------------------------
-//
-EXPORT_C CXdmNodeAttribute* CXdmDocumentNode::Attribute( const TDesC& aAttributeName ) const
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::Attribute() - Name: %S" ), &aAttributeName );
- #endif*/
- TInt count = iAttributes.Count();
- if( count > 0 )
- {
- TBool found = EFalse;
- CXdmNodeAttribute* target = NULL;
- for( TInt i = 0;!found && i < count;i++ )
- {
- if( iAttributes[i]->NodeName().Compare( aAttributeName ) == 0 )
- {
- target = iAttributes[i];
- found = ETrue;
- }
- }
- return target;
- }
- else return NULL;
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::Parent
-//
-// ----------------------------------------------------------
-//
-EXPORT_C TPtrC8 CXdmDocumentNode::LeafNodeContent() const
- {
- return iLeafNode && iLeafContent != NULL ? iLeafContent->Des() : TPtrC8();
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::Parent
-//
-// ----------------------------------------------------------
-//
-EXPORT_C HBufC8* CXdmDocumentNode::EscapeLeafNodeContentLC() const
- {
- return iLeafNode && iLeafContent != NULL ? EscapeDescLC( iLeafContent->Des() ) : NULL;
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::SetNextNode
-//
-// ----------------------------------------------------------
-//
-EXPORT_C TPtrC CXdmDocumentNode::NodeName() const
- {
- return iNodeName != NULL ? iNodeName->Des() : TPtrC();
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::SetNextNode
-//
-// ----------------------------------------------------------
-//
-EXPORT_C HBufC8* CXdmDocumentNode::EightBitNodeNameLC() const
- {
- HBufC8* eightBit = CXdmEngine::ConvertToUTF8L( iNodeName->Des() );
- CleanupStack::PushL( eightBit );
- return eightBit;
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::SetNextNode
-//
-// ----------------------------------------------------------
-//
-EXPORT_C void CXdmDocumentNode::SetNameL( const TDesC& aNodeName )
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::SetNameL( 16-Bit ) - Name: %S" ),
- &aNodeName );
- #endif*/
- delete iNodeName;
- iNodeName = NULL;
- iNodeName = HBufC::NewL( aNodeName.Length() );
- iNodeName->Des().Copy( aNodeName );
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::SetNextNode
-//
-// ----------------------------------------------------------
-//
-EXPORT_C void CXdmDocumentNode::SetNameL( const TDesC8& aNodeName )
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::SetNameL( 8-Bit ) - Name: %S" ),
- &aNodeName );
- #endif*/
- delete iNodeName;
- iNodeName = NULL;
- iNodeName = HBufC::NewL( aNodeName.Length() );
- iNodeName->Des().Copy( aNodeName );
- }
-
-// ----------------------------------------------------------
-// CXdmNodeAttribute::ElementType
-//
-// ----------------------------------------------------------
-//
-EXPORT_C CXdmDocumentNode* CXdmDocumentNode::Parent() const
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::Parent()" ) );
- #endif*/
- return iParentNode;
- }
-
-// ----------------------------------------------------------
-// CXdmNodeAttribute::ElementType
-//
-// ----------------------------------------------------------
-//
-EXPORT_C TXdmElementType CXdmDocumentNode::ElementType() const
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::ElementType()" ) );
- #endif*/
- return EXdmElementNode;
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::Match
-//
-// ----------------------------------------------------------
-//
-EXPORT_C TBool CXdmDocumentNode::Match( const CXdmDocumentNode& aAnotherNode ) const
- {
- #ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::Match()" ) );
- #endif
- if( NodeName().Compare( aAnotherNode.NodeName() ) == 0 )
- {
- TBool match = ETrue;
- TInt attrCount = iAttributes.Count();
- if( attrCount == aAnotherNode.AttributeCount() )
- {
- for( TInt i = 0;match && i < attrCount;i++ )
- match = HasAttribute( *aAnotherNode.Attribute( i ) );
- }
- else match = EFalse;
- return match;
- }
- else return EFalse;
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::Match
-//
-// ----------------------------------------------------------
-//
-EXPORT_C TBool CXdmDocumentNode::Match( const TDesC& aNodeName,
- const RPointerArray<SXdmAttribute8>&
- aAttributeArray ) const
- {
- #ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::Match()" ) );
- #endif
- if( NodeName().Compare( aNodeName ) == 0 )
- {
- TBool match = ETrue;
- TInt attrCount = iAttributes.Count();
- if( attrCount == aAttributeArray.Count() )
- {
- for( TInt i = 0;match && i < attrCount;i++ )
- match = HasAttributeL( *aAttributeArray[i] );
- }
- else match = EFalse;
- return match;
- }
- else return EFalse;
- }
-
-// ---------------------------------------------------------
-// CXdmDocumentNode::HasAttribute
-//
-// ---------------------------------------------------------
-//
-EXPORT_C TBool CXdmDocumentNode::HasAttribute( const TDesC& aAttributeName ) const
- {
- #ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::HasAttribute()" ) );
- #endif
- TInt count = iAttributes.Count();
- for( TInt i = 0; i < count;i++ )
- {
- if( !iAttributes[i]->NodeName().Compare( aAttributeName ) )
- return ETrue;
- }
- return EFalse;
- }
-
-// ---------------------------------------------------------
-// CXdmDocumentNode::Print
-// !!! For debugging ONLY !!!
-// ---------------------------------------------------------
-//
-EXPORT_C void CXdmDocumentNode::Print()
- {
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::Print()" ) );
- HBufC8* nameBuf = HBufC8::NewLC( iNodeName->Des().Length() );
- TPtr8 name( nameBuf->Des() );
- name.Copy( iNodeName->Des() );
- if( ElementType() == EXdmElementAttribute )
- {
- CXdmNodeAttribute* attr = ( CXdmNodeAttribute* )this;
- TPtrC8 value( attr->EightBitValueLC()->Des() );
- iXdmEngine.WriteToLog( _L8( "* Name: %S Value: %S" ), &name, &value );
- CleanupStack::PopAndDestroy(); //value
- }
- else
- {
- iXdmEngine.WriteToLog( _L8( "* Name: %S" ), &name );
- TInt count = iAttributes.Count();
- if( count > 0 )
- {
- for( TInt i = 0;i < count;i++ )
- {
- CXdmNodeAttribute* attr = iAttributes[i];
- TPtrC8 value( attr->EightBitValueLC()->Des() );
- TPtrC8 name( attr->EightBitNodeNameLC()->Des() );
- iXdmEngine.WriteToLog( _L8( "* Attribute %d - Name: %S Value: %S" ), i, &name, &value );
- CleanupStack::PopAndDestroy( 2 ); //name, value
- }
-
- }
- if( iLeafNode )
- {
- TPtr8 data( iLeafContent->Des() );
- iXdmEngine.WriteToLog( _L8( "* Data: %S" ), &data );
- }
- CXdmDocumentNode* node = NULL;
- TInt nodeCount = NodeCount();
- for( TInt i = 0;i < nodeCount;i++ )
- {
- node = ChileNode( i );
- node->Print();
- }
- }
- CleanupStack::PopAndDestroy(); //nameBuf
- }
-
-// ---------------------------------------------------------
-// CXdmDocumentNode::Find
-//
-// ---------------------------------------------------------
-//
-EXPORT_C TInt CXdmDocumentNode::Find( const TDesC& aNodeName,
- RPointerArray<CXdmDocumentNode>& aResultArray ) const
- {
- TInt error = KErrNotFound;
- TInt childCount = NodeCount();
- if( childCount > 0 )
- {
- for( TInt i = 0;i < childCount;i++ )
- error = ChileNode( i )->DoFind( aNodeName, aResultArray );
- }
- return error;
- }
-
-// ---------------------------------------------------------
-// CXdmDocumentNode::DoFind
-//
-// ---------------------------------------------------------
-//
-TInt CXdmDocumentNode::DoFind( const TDesC& aNodeName,
- RPointerArray<CXdmDocumentNode>& aResultArray ) const
- {
- TInt error = KErrNone;
- if( NodeName().Compare( aNodeName ) == 0 )
- error = aResultArray.Append( this );
- if( error == KErrNone )
- {
- TInt childCount = NodeCount();
- if( childCount > 0 )
- {
- for( TInt i = 0;i < childCount;i++ )
- error = ChileNode( i )->DoFind( aNodeName, aResultArray );
- }
- }
- return error;
- }
-
-// ---------------------------------------------------------
-// CXdmDocumentNode::Find
-//
-// ---------------------------------------------------------
-//
-EXPORT_C TInt CXdmDocumentNode::Find( const CXdmDocumentNode& aTargetNode,
- RPointerArray<CXdmDocumentNode>& aResultArray ) const
- {
- TInt error = KErrNotFound;
- TInt childCount = NodeCount();
- if( childCount > 0 )
- {
- for( TInt i = 0;i < childCount;i++ )
- error = ChileNode( i )->DoFind( aTargetNode, aResultArray );
- }
- return error;
- }
-
-// ---------------------------------------------------------
-// CXdmDocumentNode::Find
-//
-// ---------------------------------------------------------
-//
-TInt CXdmDocumentNode::DoFind( const CXdmDocumentNode& aTargetNode,
- RPointerArray<CXdmDocumentNode>& aResultArray ) const
- {
- TInt error = KErrNone;
- if( *this == aTargetNode )
- error = aResultArray.Append( this );
- if( error == KErrNone )
- {
- TInt childCount = NodeCount();
- if( childCount > 0 )
- {
- for( TInt i = 0;i < childCount;i++ )
- error = ChileNode( i )->DoFind( aTargetNode, aResultArray );
- }
- }
- return error;
- }
-
-// ---------------------------------------------------------
-// CXdmDocumentNode::Find
-//
-// ---------------------------------------------------------
-//
-EXPORT_C TInt CXdmDocumentNode::Find( const TDesC& aNodeName,
- RPointerArray<CXdmDocumentNode>& aResultArray,
- const RPointerArray<SXdmAttribute16>& aAttributeArray ) const
- {
- TInt error = KErrNone;
- TInt childCount = NodeCount();
- if( childCount > 0 )
- {
- for( TInt j = 0;j < childCount;j++ )
- error = ChileNode( j )->DoFind( aNodeName, aResultArray, aAttributeArray );
- }
- return error;
- }
-
-// ---------------------------------------------------------
-// CXcapHttpOperation::RemoveNamespaceAttributes
-//
-// ---------------------------------------------------------
-//
-void CXdmDocumentNode::RemoveNamespaceAttributes()
- {
- _LIT( KXmlNamespaceAttr, "xmlns" );
- for( TInt i( iAttributes.Count() - 1 ); i > KErrNotFound; i-- )
- {
- CXdmNodeAttribute* attr( iAttributes[i] );
- if( attr->NodeName().Find( KXmlNamespaceAttr ) == 0 )
- {
- iAttributes.Remove( i );
- delete attr;
- attr = NULL;
- }
- }
- }
-
-// ---------------------------------------------------------
-// CXdmDocumentNode::DoFind
-//
-// ---------------------------------------------------------
-//
-TInt CXdmDocumentNode::DoFind( const TDesC& aNodeName,
- RPointerArray<CXdmDocumentNode>& aResultArray,
- const RPointerArray<SXdmAttribute16>& aAttributeArray )
- {
- TBool match = EFalse;
- TInt error = KErrNone;
- if( NodeName().Compare( aNodeName ) == 0 )
- {
- match = ETrue;
- RemoveNamespaceAttributes();
- TInt attrCount = iAttributes.Count();
- if( attrCount == aAttributeArray.Count() )
- {
- if( attrCount > 0 )
- {
- for( TInt i = 0;i < attrCount;i++ )
- match = HasAttribute( *aAttributeArray[i] );
- }
- }
- else match = EFalse;
- error = match ? aResultArray.Append( this ) : KErrNotFound;
- }
- TInt childCount = NodeCount();
- if( childCount > 0 )
- {
- for( TInt j = 0;j < childCount;j++ )
- error = ChileNode( j )->DoFind( aNodeName, aResultArray, aAttributeArray );
- }
- return error;
- }
-
-// ---------------------------------------------------------
-// CXdmDocumentNode::operator==
-//
-// ---------------------------------------------------------
-//
-EXPORT_C TBool CXdmDocumentNode::operator==( const CXdmDocumentNode& aNode ) const
- {
- TBool match = EFalse;
- if( NodeName().Compare( aNode.NodeName() ) == 0 )
- {
- match = ETrue;
- TInt attrCount = iAttributes.Count();
- if( attrCount == aNode.AttributeCount() )
- {
- if( attrCount > 0 )
- {
- for( TInt i = 0;i < attrCount;i++ )
- match = aNode.HasAttribute( *iAttributes[i] );
- }
- }
- if( match )
- {
- TInt childCount = NodeCount();
- if( childCount == aNode.NodeCount() )
- {
- if( childCount > 0 )
- {
- for( TInt j = 0;j < childCount;j++ )
- {
- match = *ChileNode( j ) == *aNode.ChileNode( j );
- if( !match )
- break;
- }
- }
- }
- else match = EFalse;
- }
- else match = EFalse;
- }
- return match;
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::AppendChileNodeL
-//
-// ----------------------------------------------------
-//
-EXPORT_C void CXdmDocumentNode::AppendChileNodeL( CXdmDocumentNode* aDocumentNode )
- {
- #ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CLocalDocument::AppendChileNodeL()" ) );
- #endif
- CXdmDocumentNode* node = iNodeFactory.ChileNodeL( aDocumentNode );
- CleanupStack::PushL( node );
- User::LeaveIfError( iChildren.Append( node ) );
- CleanupStack::Pop(); //node
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::InsertChileNodeL
-//
-// ----------------------------------------------------
-//
-EXPORT_C void CXdmDocumentNode::InsertChileNodeL( TInt aIndex, CXdmDocumentNode* aDocumentNode )
- {
- #ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CLocalDocument::InsertChileNodeL()" ) );
- #endif
- __ASSERT_ALWAYS( aIndex >= 0, User::Panic( _L( "CXdmDocumentNode" ), EIndexOutOfBounds ) );
- CXdmDocumentNode* node = iNodeFactory.ChileNodeL( aDocumentNode );
- CleanupStack::PushL( node );
- User::LeaveIfError( iChildren.Insert( node, aIndex ) );
- CleanupStack::Pop(); //node
- }
-
-// ----------------------------------------------------
-// CXdmDocumentNode::ReplaceChileNodeL
-//
-// ----------------------------------------------------
-//
-EXPORT_C void CXdmDocumentNode::ReplaceChileNodeL( CXdmDocumentNode* aNewNode,
- CXdmDocumentNode* aTargetNode )
- {
- CXdmDocumentNode* remove = NULL;
- TInt index = iChildren.Find( aTargetNode );
- #ifdef _DEBUG
- CXdmDocumentNode* a = NULL;
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::ReplaceChileNodeL()" ) );
- iXdmEngine.WriteToLog( _L8( " New node: %x" ), aNewNode );
- iXdmEngine.WriteToLog( _L8( " Target node: %x" ), aTargetNode );
- for( TInt i = 0;i < iChildren.Count();i++ )
- {
- a = iChildren[i];
- iXdmEngine.WriteToLog( _L8( " Child %d: %x" ), i, a );
- }
- #endif
- __ASSERT_DEBUG( index >= 0, User::Panic( _L( "CXdmDocumentNode" ), EIndexOutOfBounds ) );
- remove = iChildren[index];
- iChildren.Remove( index );
- delete remove;
- remove = NULL;
- CXdmDocumentNode* node = iNodeFactory.ChileNodeL( aNewNode );
- CleanupStack::PushL( node );
- User::LeaveIfError( iChildren.Insert( node, index ) );
- CleanupStack::Pop(); //node
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::RemoveChileNodeL
-//
-// ----------------------------------------------------------
-//
-EXPORT_C void CXdmDocumentNode::RemoveChileNodeL( CXdmDocumentNode* aChileNode )
- {
- #ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::RemoveChileNodeL()" ) );
- #endif
- CXdmDocumentNode* remove = NULL;
- switch( aChileNode->ElementType() )
- {
- case EXdmElementNode:
- {
- #ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( " Element is a node" ) );
- #endif
- TInt index( iChildren.Find( aChileNode ) );
- __ASSERT_DEBUG( index >= 0, User::Panic( _L( "CXdmDocumentNode" ), EIndexOutOfBounds ) );
- remove = iChildren[index];
- iChildren.Remove( index );
- delete remove;
- remove = NULL;
- }
- break;
- case EXdmElementAttribute:
- {
- #ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( " Element is an attribute" ) );
- #endif
- TInt index( iAttributes.Find( ( CXdmNodeAttribute* )aChileNode ) );
- __ASSERT_DEBUG( index >= 0, User::Panic( _L( "CXdmDocumentNode" ), EIndexOutOfBounds ) );
- remove = iAttributes[index];
- iAttributes.Remove( index );
- delete remove;
- remove = NULL;
- }
- break;
- default:
- #ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( " Element is of undefined type, ignore" ) );
- #endif
- break;
- }
- }
-
-// ----------------------------------------------------------
-// CXdmDocumentNode::NextNode
-//
-// ----------------------------------------------------------
-//
-EXPORT_C CXdmDocumentNode* CXdmDocumentNode::NextNode() const
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXcapDocumentNode::NextNode()" ) );
- #endif*/
- return iNextNode;
- }
-
-// ----------------------------------------------------------
-// CXcapDocumentNode::SetNextNode
-//
-// ----------------------------------------------------------
-//
-EXPORT_C void CXdmDocumentNode::SetNextNode( CXdmDocumentNode* aNextNode )
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::SetNextNode()" ) );
- #endif*/
- __ASSERT_DEBUG( aNextNode != NULL, User::Panic( _L( "CXdmDocumentNode" ), EDocNodeNull ) );
- iNextNode = aNextNode;
- }
-
-// ---------------------------------------------------------
-// CXdmDocumentNode::EscapeDescLC
-//
-// ---------------------------------------------------------
-//
-HBufC8* CXdmDocumentNode::EscapeDescLC( const TDesC8& aDescriptor ) const
- {
- /*#ifdef _DEBUG
- iXdmEngine.WriteToLog( _L8( "CXdmDocumentNode::EscapeDescLC()" ) );
- #endif*/
- TInt bufPos = 0;
- TBuf8<10> format;
- HBufC8* ret = NULL;
- CBufFlat* buffer = CBufFlat::NewL( 50 );
- CleanupStack::PushL( buffer );
- for( TInt i = 0;i < aDescriptor.Length();i++ )
- {
- TUint8 byte = aDescriptor[i];
- switch( byte )
- {
- case 0x26: //'&'
- format.Append( KXmlAmpersandEsc );
- break;
- case 0x3C: //'<'
- format.Append( KXmlBracketOpenEsc );
- break;
- case 0x3E: //'>'
- format.Append( KXmlBracketCloseEsc );
- break;
- default:
- format.Append( byte );
- break;
- }
- buffer->InsertL( bufPos, format );
- bufPos = bufPos + format.Length();
- format.Zero();
- }
- ret = HBufC8::NewL( buffer->Size() );
- ret->Des().Copy( buffer->BackPtr( buffer->Size() ) );
- CleanupStack::PopAndDestroy(); //buffer
- CleanupStack::PushL( ret );
- return ret;
- }
-
-// ---------------------------------------------------------
-// CXdmDocumentNode::HasAttribute
-//
-// ---------------------------------------------------------
-//
-TBool CXdmDocumentNode::HasAttribute( const CXdmNodeAttribute& aAttribute ) const
- {
- TBool ret = EFalse;
- TInt count = iAttributes.Count();
- for( TInt i = 0;i < count && !ret;i++ )
- {
- ret = iAttributes[i]->NodeName().Compare( aAttribute.NodeName() ) == 0 &&
- iAttributes[i]->AttributeValue().Compare( aAttribute.AttributeValue() ) == 0;
- }
- return ret;
- }
-
-// ---------------------------------------------------------
-// CXdmDocumentNode::HasAttribute
-//
-// ---------------------------------------------------------
-//
-TBool CXdmDocumentNode::HasAttributeL( const SXdmAttribute8& aAttribute ) const
- {
- TBool ret = EFalse;
- TInt count = iAttributes.Count();
- for( TInt i = 0;i < count && !ret;i++ )
- {
- HBufC8* name = CXdmEngine::ConvertToUTF8L( iAttributes[i]->NodeName() );
- CleanupStack::PushL( name );
- HBufC8* value = CXdmEngine::ConvertToUTF8L( iAttributes[i]->AttributeValue() );
- CleanupStack::PushL( value );
- ret = name->Des().Compare( aAttribute.iName ) == 0 &&
- value->Des().Compare( aAttribute.iValue ) == 0;
- CleanupStack::PopAndDestroy( 2 ); //value, name
- }
- return ret;
- }
-
-// ---------------------------------------------------------
-// CXdmDocumentNode::HasAttribute
-//
-// ---------------------------------------------------------
-//
-TBool CXdmDocumentNode::HasAttribute( const SXdmAttribute16& aAttribute ) const
- {
- TBool ret = EFalse;
- TInt count = iAttributes.Count();
- for( TInt i = 0;i < count && !ret;i++ )
- {
- ret = iAttributes[i]->NodeName().Compare( aAttribute.iName ) == 0 &&
- iAttributes[i]->AttributeValue().Compare( aAttribute.iValue ) == 0;
- }
- return ret;
- }
-