diff -r 77cb48a03620 -r d9861ae9169c xdmprotocols/XdmXmlParser/src/XdmXmlContentHandler.cpp --- a/xdmprotocols/XdmXmlParser/src/XdmXmlContentHandler.cpp Thu Jul 01 14:09:06 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,512 +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: CXdmXmlContentHandler -* -*/ - - - -#include -#include -#include -#include -#include "XdmNamespaceContainer.h" -#include "XdmXmlParser.h" -#include "XdmNodeInterface.h" -#include "XmlParserNodePath.h" -#include "XdmXmlContentHandler.h" - -// --------------------------------------------------------- -// CXdmXmlContentHandler::CXdmXmlContentHandler -// -// --------------------------------------------------------- -// -CXdmXmlContentHandler::CXdmXmlContentHandler( CXdmXmlParser& aParserMain ) : - iFinished( EFalse ), - iTargetFound( EFalse ), - iPartialDocument( EFalse ), - iParserMain( aParserMain ) - - { - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::NewL -// -// --------------------------------------------------------- -// -CXdmXmlContentHandler* CXdmXmlContentHandler::NewL( CXdmXmlParser& aParserMain ) - { - CXdmXmlContentHandler* self = new ( ELeave ) CXdmXmlContentHandler( aParserMain ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::ConstructL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::ConstructL() - { - iContentBuffer = CBufFlat::NewL( 50 ); - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::~CXdmXmlContentHandler -// -// --------------------------------------------------------- -// -CXdmXmlContentHandler::~CXdmXmlContentHandler() - { - delete iNodePath; - delete iContentBuffer; - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::SetTarget -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::SetTarget( const CXdmDocument& aTargetDocument ) - { - iTargetDocument = CONST_CAST( CXdmDocument*, &aTargetDocument ); - iRootNode = iTargetDocument->DocumentRoot(); - iDocumentSubset = NULL; - iIsRootNode = ETrue; - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::SetTarget -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::SetTarget( const CXdmDocumentNode& aDocumentRoot ) - { - iTargetDocument = NULL; - iRootNode = CONST_CAST( CXdmDocumentNode*, &aDocumentRoot ); - iDocumentSubset = NULL; - iIsRootNode = ETrue; - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::SetTarget -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::SetTargetL( const CXdmDocument& aTargetDocument, - const CXdmDocumentNode& aTargetNode ) - { - iElementType = aTargetNode.ElementType(); - iTargetDocument = CONST_CAST( CXdmDocument*, &aTargetDocument ); - if( iElementType == EXdmElementAttribute ) - { - iTargetAttribute = ( CXdmNodeAttribute* )&aTargetNode; - iDocumentSubset = CONST_CAST( CXdmDocumentNode*, aTargetNode.Parent() ); - } - else - { - iTargetAttribute = NULL; - iDocumentSubset = CONST_CAST( CXdmDocumentNode*, &aTargetNode ); - } - iNodePath = CXmlParserNodePath::NewL( iParserMain, iElementType, *iDocumentSubset, this ); - iRootNode = iDocumentSubset; - iPartialDocument = ETrue; - iCurrentNode = NULL; - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::TargetAttribute -// -// --------------------------------------------------------- -// -CXdmNodeAttribute* CXdmXmlContentHandler::TargetAttribute() const - { - return iTargetAttribute; - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::Reset -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::Reset() - { - iTargetDocument = NULL; - iTargetAttribute = NULL; - iDocumentSubset = NULL; - iRootNode = NULL; - iCurrentNode = NULL; - delete iNodePath; - iNodePath = NULL; - iFinished = EFalse; - iTargetFound = EFalse; - iPartialDocument = EFalse; - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::GetExtendedInterface -// -// --------------------------------------------------------- -// -TAny* CXdmXmlContentHandler::GetExtendedInterface( const TInt32 /*aUid*/ ) - { - return NULL; - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::OnContentL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::OnContentL( const TDesC8 &aBytes, - TInt aErrorCode ) - { - #ifdef _DEBUG - iParserMain.WriteToLog( _L8( "CXmlNode::OnContentL()" ), aErrorCode ); - iParserMain.WriteToLog( _L8( " Bytes: %S" ), &aBytes ); - iParserMain.WriteToLog( _L8( " Error: %d" ), aErrorCode ); - #endif - if( iPartialDocument && !iTargetFound ) - return; - TInt length = aBytes.Length(); - TPtr8 desc( CONST_CAST( TUint8*, aBytes.Ptr() ), length, length ); - desc.TrimAll(); - if( desc.Length() > 0 ) - { - iContentBuffer->InsertL( iContentIndex, desc ); - iContentIndex = iContentIndex + desc.Length(); - } - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::OnEndDocumentL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::OnEndDocumentL( TInt aErrorCode ) - { - iIsRootNode = ETrue; - #ifdef _DEBUG - iParserMain.WriteToLog( _L8( "CXmlNode::OnEndDocumentL() - Error: %d "), aErrorCode ); - #endif - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::OnEndElementL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::OnEndElementL( const RTagInfo &aElement, - TInt aErrorCode ) - { - TPtrC8 element( aElement.LocalName().DesC() ); - #ifdef _DEBUG - iParserMain.WriteToLog( _L8( "CXmlNode::OnEndElementL() - Element: %S Error: %d "), - &element, aErrorCode ); - #endif - if( iCurrentNode != NULL && iContentBuffer->Size() > 0 ) - { - TPtrC8 data( iContentBuffer->Ptr( 0 ) ); - iCurrentNode->SetLeafNode( ETrue ); - iCurrentNode->SetLeafNodeContentL( data ); - iContentBuffer->Reset(); - iContentIndex = 0; - } - if( iCurrentNode != NULL && iCurrentNode->NodeCount() == 0 ) - iCurrentNode->SetEmptyNode( ETrue ); - if( iPartialDocument ) - { - if( !iFinished ) - { - if( iCurrentNode != NULL ) - { - CXdmDocumentNode* parent = iCurrentNode->Parent(); - #ifdef _DEBUG - TBuf8<64> parentName; - TBuf8<64> currentName; - parentName.Copy( parent->NodeName() ); - currentName.Copy( iCurrentNode->NodeName() ); - iParserMain.WriteToLog( _L8( " Parent: %x - %S "), parent, &parentName ); - iParserMain.WriteToLog( _L8( " Current: %x - %S"), iCurrentNode, ¤tName ); - #endif - if( parent != NULL && iCurrentNode != parent ) - iCurrentNode = iCurrentNode->Parent(); - iFinished = iCurrentNode == iDocumentSubset->Parent(); - if( iFinished ) - iCurrentNode = NULL; - #ifdef _DEBUG - iParserMain.WriteToLog( _L8( " Current: %x"), iCurrentNode ); - #endif - } - } - } - else iCurrentNode = iCurrentNode->Parent(); - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::OnEndPrefixMappingL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::OnEndPrefixMappingL( const RString& /*aPrefix*/, - TInt aErrorCode ) - { - #ifdef _DEBUG - iParserMain.WriteToLog( _L8( "CXmlNode::OnEndPrefixMappingL() - Error: %d "), aErrorCode ); - #endif - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::OnError -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::OnError( TInt aErrorCode ) - { - #ifdef _DEBUG - iParserMain.WriteToLog( _L8( "CXmlNode::OnError() - Error: %d" ), aErrorCode ); - #endif - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::OnIgnorableWhiteSpaceL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::OnIgnorableWhiteSpaceL( const TDesC8& /*aBytes*/, - TInt /*aErrorCode*/ ) - { - #ifdef _DEBUG - //iParserMain.WriteToLog( _L8( "CXmlNode::OnIgnorableWhiteSpaceL() - Error: %d" ), aErrorCode ); - #endif - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::OnProcessingInstructionL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::OnProcessingInstructionL( const TDesC8& /*aTarget*/, - const TDesC8& /*aData*/, - TInt /*aErrorCode*/ ) - { - #ifdef _DEBUG - // iParserMain.WriteToLog( _L8( "CXmlNode::OnProcessingInstructionL() - Error: %d" ), aErrorCode ); - #endif - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::OnSkippedEntityL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::OnSkippedEntityL( const RString& /*aName*/, - TInt /*aErrorCode*/ ) - { - #ifdef _DEBUG - //iParserMain.WriteToLog( _L8( "CXmlNode::OnSkippedEntityL() - Error: %d" ), aErrorCode ); - #endif - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::OnStartDocumentL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::OnStartDocumentL( const RDocumentParameters& /*aDocParam*/, TInt aErrorCode ) - { - #ifdef _DEBUG - iParserMain.WriteToLog( _L8( "CXmlNode::OnStartDocumentL() - Error: %d "), aErrorCode ); - #endif - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::OnStartElementL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::OnStartElementL( const RTagInfo& aElement, - const RAttributeArray& aAttributes, - TInt aErrorCode ) - { - TPtrC8 name( aElement.LocalName().DesC() ); - TPtrC8 uri( aElement.Uri().DesC() ); - TPtrC8 prefix( aElement.Prefix().DesC() ); - #ifdef _DEBUG - iParserMain.WriteToLog( _L8( "CXmlNode::OnStartElementL(): Error: %d" ), aErrorCode ); - iParserMain.WriteToLog( _L8( " URI: %S" ), &uri ); - iParserMain.WriteToLog( _L8( " Name: %S" ), &name ); - iParserMain.WriteToLog( _L8( " Prefix: %S" ), &prefix ); - #endif - if( iPartialDocument ) - { - if( !iFinished ) - { - if( iTargetFound ) - { - iCurrentNode = iCurrentNode->CreateChileNodeL(); - HandleNextElementL( aElement, aAttributes ); - } - else - { - if( iNodePath->CheckNextNodeL( name, aAttributes ) ) - { - if( iElementType == EXdmElementAttribute ) - AppendAttributeValueL( aAttributes ); - else - { - iTargetFound = ETrue; - iCurrentNode = iDocumentSubset; - } - } - } - } - } - else - { - iCurrentNode = iIsRootNode ? iRootNode : iCurrentNode->CreateChileNodeL(); - HandleNextElementL( aElement, aAttributes ); - iIsRootNode = EFalse; - } - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::HandleNextElementL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::HandleNextElementL( const RTagInfo& aElement, - const RAttributeArray& aAttributes ) - { - #ifdef _DEBUG - //iParserMain.WriteToLog( _L8( "CXdmXmlContentHandler::HandleNextElementL()") ); - #endif - iCurrentNode->SetNameL( aElement.LocalName().DesC() ); - SetNamespaceInformationL( aElement, iCurrentNode ); - TInt count = aAttributes.Count(); - if( count > 0 ) - { - CXdmNodeAttribute* attribute = NULL; - for( TInt i = 0;i < count;i++ ) - { - attribute = iCurrentNode->CreateAttributeL(); - CleanupStack::PushL( attribute ); - attribute->SetNameL( aAttributes[i].Attribute().LocalName().DesC() ); - attribute->SetAttributeValueL( aAttributes[i].Value().DesC() ); - CleanupStack::Pop(); //attribute - } - } - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::CompileAttributesL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::AppendAttributeValueL( const RAttributeArray& aAttributes ) - { - #ifdef _DEBUG - //iParserMain.WriteToLog( _L8( "CXdmXmlContentHandler::AppendAttributeValueL()") ); - #endif - TInt count = aAttributes.Count(); - TPtrC8 targetName( iTargetAttribute->EightBitNodeNameLC()->Des() ); - for( TInt i = 0;!iFinished && i < count;i++ ) - { - TPtrC8 desc = aAttributes[i].Attribute().LocalName().DesC(); - #ifdef _DEBUG - iParserMain.WriteToLog( _L8( " Name of attribute %d: %S"), i, &desc ); - #endif - if( targetName.Compare( desc ) == 0 ) - { - iFinished = ETrue; - TPtrC8 value( aAttributes[i].Value().DesC() ); - iTargetAttribute->SetAttributeValueL( value ); - } - } - CleanupStack::PopAndDestroy(); //desc - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::OnStartPrefixMappingL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::OnStartPrefixMappingL( const RString& aPrefix, - const RString& aUri, - TInt aErrorCode ) - { - #ifdef _DEBUG - iParserMain.WriteToLog( _L8( "CXdmXmlContentHandler::OnStartPrefixMappingL() - Error: %d" ), aErrorCode ); - #endif - AppendNameSpaceL( aPrefix.DesC(), aUri.DesC() ); - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::IsWhiteSpace -// -// --------------------------------------------------------- -// -TBool CXdmXmlContentHandler::IsWhiteSpace( const TDesC8 &aBytes ) const - { - #ifdef _DEBUG - //iParserMain.WriteToLog( _L8( "CXdmXmlContentHandler::IsWhiteSpace()") ); - #endif - TBool ret = ETrue; - if( aBytes.Length() > 0 ) - { - TChar ch = aBytes[0]; - ret = ch == 32 || ch == 10 || ch == 13 || ch == 9; - } - return ret; - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::AppendNameSpaceL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::AppendNameSpaceL( const TDesC8& aPrefix, const TDesC8& aUri ) - { - #ifdef _DEBUG - //iParserMain.WriteToLog( _L8( "CXdmXmlContentHandler::SetNameSpaceInformationL()") ); - #endif - if( iTargetDocument != NULL ) - { - MXdmNamespaceContainer* container = iTargetDocument; - container->AppendNamespaceL( aUri, aPrefix ); - } - } - -// --------------------------------------------------------- -// CXdmXmlContentHandler::SetNameSpaceInformationL -// -// --------------------------------------------------------- -// -void CXdmXmlContentHandler::SetNamespaceInformationL( const RTagInfo& aElement, - MXdmNodeInterface* aXcapNode ) - { - #ifdef _DEBUG - //iParserMain.WriteToLog( _L8( "CXdmXmlContentHandler::SetNameSpaceInformationL()") ); - #endif - TPtrC8 prefix( aElement.Prefix().DesC() ); - if( prefix.Length() > 0 ) - { - aXcapNode->SetPrefixL( prefix ); - } - } - -// End of File