xdmprotocols/XcapProtocol/XcapOperations/src/XcapUriParser.cpp
branchRCL_3
changeset 34 2669f8761a99
parent 31 2580314736af
child 35 fbd2e7cec7ef
--- a/xdmprotocols/XcapProtocol/XcapOperations/src/XcapUriParser.cpp	Thu Aug 19 10:19:02 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,448 +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:   CXcapUriParser
-*
-*/
-
-
-
-
-// INCLUDES
-#include <f32file.h>
-#include "XdmNamespace.h"
-#include "XcapUriParser.h"
-#include "XcapHttpOperation.h"
-#include "XcapEngineDefines.h"
-#include "XdmNodeAttribute.h"
-#include "XcapOperationFactory.h"
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// C++ constructor can NOT contain any code, that
-// might leave.
-// ---------------------------------------------------------
-//
-CXcapUriParser::CXcapUriParser( CXdmDocument& aTargetDoc,
-                                CXcapOperationFactory& aOperationFactory ) :
-                                iTargetDoc( aTargetDoc ),
-                                iNodeType( EXdmElementUnspecified ),
-                                iOperationFactory( aOperationFactory )
-    {
-    }
-
-// ---------------------------------------------------------
-// Two-phased constructor.
-//
-// ---------------------------------------------------------
-//
-CXcapUriParser* CXcapUriParser::NewL( CXdmDocument& aTargetDoc,
-                                      CXcapOperationFactory& aOperationFactory )
-    {
-    CXcapUriParser* self = new ( ELeave ) CXcapUriParser( aTargetDoc, aOperationFactory );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop();
-    return self;
-    }
-
-// ---------------------------------------------------------
-// Destructor
-//
-// ---------------------------------------------------------
-//
-CXcapUriParser::~CXcapUriParser()
-    {
-    #ifdef _DEBUG
-        iOperationFactory.WriteToLog( _L8( "CXcapUriParser::~CXcapUriParser()" ) );  
-    #endif
-    delete iUriBuffer;
-    delete iCompleteUri;
-    iNamespaceMappings.ResetAndDestroy();
-    iNamespaceMappings.Close();
-    }
-    
-// ---------------------------------------------------------
-// CXcapUriParser::ConstructL
-//
-// ---------------------------------------------------------
-//
-void CXcapUriParser::ConstructL()
-    {
-    }
-
-// ---------------------------------------------------------
-// CXcapUriParser::AddNamespaceMappingL
-//
-// ---------------------------------------------------------
-//
-void CXcapUriParser::AddNamespaceMappingL( const TDesC8& aUri, const TDesC8& aPrefix )
-    {
-    CXdmNamespace* ns = CXdmNamespace::NewL( aUri, aPrefix );
-    CleanupStack::PushL( ns );
-    User::LeaveIfError( iNamespaceMappings.Append( ns ) );
-    CleanupStack::Pop();  //ns
-    }
-
-// ---------------------------------------------------------
-// CXcapUriParser::AppendNamespaceMappingsL
-//
-// ---------------------------------------------------------
-//
-void CXcapUriParser::AppendNamespaceMappingsL()
-    {
-    CXdmNamespace* ns = NULL;
-    const TInt count = iNamespaceMappings.Count();
-    iUriBuffer->InsertL( iBufferPosition, KXcapUriQMark );
-    iBufferPosition = iBufferPosition + KXcapUriQMark().Length();
-    for( TInt i = 0;i < count;i++ )
-        {
-        ns = iNamespaceMappings[i];
-        iUriBuffer->InsertL( iBufferPosition, KXcapUriXmlns );
-        iBufferPosition = iBufferPosition + KXcapUriXmlns().Length();
-        TPtrC8 prefix( ns->Prefix() );
-        iUriBuffer->InsertL( iBufferPosition, prefix );
-        iBufferPosition = iBufferPosition + prefix.Length();
-        iUriBuffer->InsertL( iBufferPosition, KXcapUriEquals );
-        iBufferPosition = iBufferPosition + KXcapUriEquals().Length();
-        TPtrC8 uri( ns->Uri() );
-        iUriBuffer->InsertL( iBufferPosition, uri );
-        iBufferPosition = iBufferPosition + uri.Length();
-        iUriBuffer->InsertL( iBufferPosition, KXcapUriQuote );
-        iBufferPosition = iBufferPosition + KXcapUriQuote().Length();
-        iUriBuffer->InsertL( iBufferPosition, KXcapParenthClose );
-        iBufferPosition = iBufferPosition + KXcapParenthClose().Length();
-        }
-    }
-    
-// ---------------------------------------------------------
-// CXcapUriParser::FinaliseL
-//
-// ---------------------------------------------------------
-//
-void CXcapUriParser::FinaliseL()
-    {
-    #ifdef _DEBUG
-        iOperationFactory.WriteToLog( _L8( "CXcapUriParser::FinaliseL()" ) );  
-    #endif
-    delete iCompleteUri;
-    iCompleteUri = NULL;
-    iCompleteUri = HBufC8::NewL( iUriBuffer->Size() );
-    TPtr8 pointer( iCompleteUri->Des() );
-    iUriBuffer->Read( 0, pointer, iUriBuffer->Size() );
-    iUriBuffer->Reset();
-    delete iUriBuffer;
-    iUriBuffer = NULL;
-    }
-
-// ---------------------------------------------------------
-// CXcapUriParser::ParseL
-//
-// ---------------------------------------------------------
-//
-void CXcapUriParser::ParseL( const TPtrC8& aHttpUri )
-    {
-    #ifdef _DEBUG
-        iOperationFactory.WriteToLog( _L8( "CXcapUriParser::ParseL()" ) );  
-    #endif
-    iHttpUri = CONST_CAST( TPtrC8*, &aHttpUri );
-    if( iNodeType != EXdmElementUnspecified )
-        {
-        HBufC8* path = DocSubsetPathL();
-        CleanupStack::PushL( path );
-        iBufferPosition = CreateBasicNodeUriL( path );
-        CleanupStack::PopAndDestroy();  //path
-        iNodeType == EXdmElementAttribute ? FormatAttributeUriL() : FormatNodeUriL();
-        if( iNamespaceMappings.Count() > 0 )
-            AppendNamespaceMappingsL();
-        FinaliseL();
-        #ifdef _DEBUG
-            TPtr8 desc( iCompleteUri->Des() );
-            iOperationFactory.WriteToLog( _L8( " Context: %S" ), &desc );  
-        #endif
-        }
-    else
-        {
-        #ifdef _DEBUG
-            iOperationFactory.WriteToLog( _L8( " Context is a whole document" ) );  
-        #endif
-        iCompleteUri = HBufC8::NewL( iHttpUri->Length() );
-        iCompleteUri->Des().Copy( *iHttpUri );
-        }
-    }
-
-// ----------------------------------------------------------
-// CXcapDocumentNode::DocSubsetPathL
-// 
-// ----------------------------------------------------------
-//
-HBufC8* CXcapUriParser::DocSubsetPathL()
-    {
-    HBufC8* ret = NULL;
-    CXdmDocumentNode* current = iDocumentSubset->Parent();
-    CBufFlat* buffer = CBufFlat::NewL( 256 );
-    CleanupStack::PushL( buffer );
-    while( current != NULL )
-        {   
-        buffer->InsertL( 0, FormatOnePathElementLC( current )->Des() );
-        CleanupStack::PopAndDestroy();  //FormatOnePathElementLC
-        current = current->Parent();
-        }
-    TInt length = buffer->Size();
-    ret = HBufC8::NewL( length );
-    TPtr8 pointer( ret->Des() );
-    buffer->Read( 0, pointer, length );
-    CleanupStack::PopAndDestroy();  //buffer 
-    return ret;
-    }
-
-// ---------------------------------------------------------
-// CXcapUriParser::FormatAttributeUriL
-//
-// ---------------------------------------------------------
-//
-HBufC8* CXcapUriParser::FormatOnePathElementLC( const CXdmDocumentNode* aPathElement ) 
-    {
-    #ifdef _DEBUG
-        HBufC8* name8 = aPathElement->EightBitNodeNameLC();
-        TPtrC8 elemName( name8->Des() );
-        TPtrC8 elemPref( aPathElement->Prefix() );
-        iOperationFactory.WriteToLog( _L8( "CXcapUriParser::FormatOnePathElementL()" ) );
-        if( elemPref.Length() > 0 )
-            iOperationFactory.WriteToLog( _L8( "  Prefix: %S" ), &elemName );
-        iOperationFactory.WriteToLog( _L8( "  Name:   %S" ), &elemName );  
-        CleanupStack::PopAndDestroy();  //name8
-    #endif
-    TInt position = 0;
-    CBufFlat* buffer = CBufFlat::NewL( 50 );
-    CleanupStack::PushL( buffer );
-    buffer->InsertL( position, KXCAPPathSeparator );
-    position = position + KXCAPPathSeparator().Length();
-    TPtrC8 prefix = aPathElement->Prefix();
-    if( prefix.Length() > 0 )
-        {
-        buffer->InsertL( position, prefix );
-        position = position + prefix.Length();
-        buffer->InsertL( position, KXcapUriColon );
-        position = position + KXcapUriColon().Length();
-        }
-    TPtrC8 name = aPathElement->EightBitNodeNameLC()->Des();
-    buffer->InsertL( position, name );
-    position = position + name.Length();
-    CleanupStack::PopAndDestroy();  //EightBitNodeNameLC 
-    if( aPathElement->AttributeCount() > 0 &&
-        !( iNodeType == EXdmElementAttribute && aPathElement == iDocumentSubset->Parent() ) )
-        AppendPredicatesL( position, buffer, aPathElement );
-    HBufC8* retBuf = HBufC8::NewL( buffer->Size() );
-    TPtr8 pointer( retBuf->Des() );
-    buffer->Read( 0, pointer, buffer->Size() );
-    CleanupStack::PopAndDestroy();  //buffer
-    CleanupStack::PushL( retBuf );
-    return retBuf;
-    }
-
-// ---------------------------------------------------------
-// CXcapUriParser::FormatAttributeUriL
-//
-// ---------------------------------------------------------
-//
-void CXcapUriParser::FormatAttributeUriL() 
-    {
-    #ifdef _DEBUG
-        iOperationFactory.WriteToLog( _L8( " CXcapUriParser::FormatAttributeUriL()" ) );  
-    #endif
-    iUriBuffer->InsertL( iBufferPosition, KXCAPAttributeIdentifier );
-    iBufferPosition = iBufferPosition + KXCAPAttributeIdentifier().Length();
-    iUriBuffer->InsertL( iBufferPosition, iDocumentSubset->EightBitNodeNameLC()->Des() );
-    CleanupStack::PopAndDestroy();  //EightBitNodeNameLC
-    HBufC8* newUri = HBufC8::NewLC( iUriBuffer->Size() );
-    TPtr8 pointer( newUri->Des() );
-    iUriBuffer->Read( 0, pointer, iUriBuffer->Size() );
-    #ifdef _DEBUG
-        DumpUriL( newUri );
-    #endif
-    CleanupStack::PopAndDestroy();  //newUri
-    }
-
-// ---------------------------------------------------------
-// CXcapUriParser::FormatNodeUriL
-//
-// ---------------------------------------------------------
-//
-void CXcapUriParser::FormatNodeUriL() 
-    {
-    #ifdef _DEBUG
-        iOperationFactory.WriteToLog( _L8( " CXcapUriParser::FormatNodeUriL()" ) );  
-    #endif
-    iNodeType = EXdmElementNode;
-    TPtrC8 prefix = iDocumentSubset->Prefix();
-    if( prefix.Length() > 0 )
-        {
-        iUriBuffer->InsertL( iBufferPosition, prefix );
-        iBufferPosition = iBufferPosition + prefix.Length();
-        iUriBuffer->InsertL( iBufferPosition, KXcapUriColon );
-        iBufferPosition = iBufferPosition + KXcapUriColon().Length();
-        }
-    TPtrC8 name = iDocumentSubset->EightBitNodeNameLC()->Des();
-    iUriBuffer->InsertL( iBufferPosition, name );
-    iBufferPosition = iBufferPosition + name.Length();
-    CleanupStack::PopAndDestroy();  //EightBitNodeNameLC
-    if( iDocumentSubset->AttributeCount() > 0 )
-        AppendPredicatesL( iBufferPosition, iUriBuffer, iDocumentSubset );
-    //For now, do not put a trailing '/' to the node path. This may have to be changed, though.
-    //iUriBuffer->InsertL( iBufferPosition, KXCAPPathSeparator );
-    //iBufferPosition = iBufferPosition + TPtrC8( KXCAPPathSeparator ).Length();
-    HBufC8* newUri = HBufC8::NewLC( iUriBuffer->Size() );
-    TPtr8 pointer2( newUri->Des() );
-    iUriBuffer->Read( 0, pointer2, iUriBuffer->Size() );
-    #ifdef _DEBUG
-        DumpUriL( newUri );
-    #endif
-    CleanupStack::PopAndDestroy();  //newUri
-    }
-
-// ---------------------------------------------------------
-// CXcapUriParser::AppendPredicatesL
-//
-// ---------------------------------------------------------
-//
-void CXcapUriParser::AppendPredicatesL( TInt& aPosition,
-                                        CBufBase* aBuffer,
-                                        const CXdmDocumentNode* aPathElement )
-    {
-    #ifdef _DEBUG
-        iOperationFactory.WriteToLog( _L8( " CXcapUriParser::AppendPredicatesL()" ) );  
-    #endif
-    TInt count = aPathElement->AttributeCount();
-    for( TInt i = 0;i < count;i++ )
-        {
-        CXdmNodeAttribute* attribute = aPathElement->Attribute( i );
-        //Namespaces cannot be used as attributes
-        if( attribute->NodeName().Find( _L( "xmlns" ) ) < 0 )
-            {
-            aBuffer->InsertL( aPosition, KHTTPBracketOpen );
-            aPosition = aPosition + KHTTPBracketOpen().Length();
-            aBuffer->InsertL( aPosition, KXCAPAttributeIdentifier );
-            aPosition = aPosition + KXCAPAttributeIdentifier().Length();
-            TPtrC8 name = attribute->EightBitNodeNameLC()->Des();
-            aBuffer->InsertL( aPosition, name );
-            aPosition = aPosition + name.Length();
-            CleanupStack::PopAndDestroy();  //EightBitNodeNameLC
-            aBuffer->InsertL( aPosition, KXCAPEquality );
-            aPosition = aPosition + KXCAPEquality().Length();
-            aBuffer->InsertL( aPosition, KHTTPQuotationMark );
-            aPosition = aPosition + KHTTPQuotationMark().Length();
-            TPtrC8 value = attribute->EightBitValueLC()->Des();
-            aBuffer->InsertL( aPosition, value );
-            aPosition = aPosition + value.Length();
-            CleanupStack::PopAndDestroy();  //EightBitValueLC
-            aBuffer->InsertL( aPosition, KHTTPQuotationMark );
-            aPosition = aPosition + KHTTPQuotationMark().Length();
-            aBuffer->InsertL( aPosition, KHTTPBracketClose );
-            aPosition = aPosition + KHTTPBracketClose().Length();
-            }
-        }
-    }
-
-// ---------------------------------------------------------
-// CXcapUriParser::CreateBasicNodeUriL
-//
-// ---------------------------------------------------------
-//
-TInt CXcapUriParser::CreateBasicNodeUriL( HBufC8* aNodePath )
-    {
-    #ifdef _DEBUG
-        iOperationFactory.WriteToLog( _L8( " CXcapUriParser::CreateBasicNodeUriL()" ) );  
-    #endif
-    TInt position = 0;
-    TPtr8 pointer( aNodePath->Des() );
-    iUriBuffer = CBufFlat::NewL( 256 );
-    iUriBuffer->InsertL( position, *iHttpUri );
-    position = iHttpUri->Length();
-    if( iHttpUri->LocateReverseF( KXcapPathSeparatorChar ) != iHttpUri->Length() - 1 )
-        {
-        iUriBuffer->InsertL( position, KXCAPPathSeparator );
-        position = position + KXCAPPathSeparator().Length();
-        }
-    iUriBuffer->InsertL( position, KXCAPNodeSeparator ); //"~~"
-    position = position + KXCAPNodeSeparator().Length();
-    iUriBuffer->InsertL( position, pointer );            
-    position = position + pointer.Length();
-    iUriBuffer->InsertL( position, KXCAPPathSeparator );
-    position = position + KXCAPPathSeparator().Length();
-    return position;
-    }
-
-
-
-// ---------------------------------------------------------
-// CXcapUriParser::SetDocumentSubset
-//
-// ---------------------------------------------------------
-//
-void CXcapUriParser::SetDocumentSubset( const CXdmDocumentNode* aDocumentSubset )
-    {
-    #ifdef _DEBUG
-        iOperationFactory.WriteToLog( _L8( "CXcapUriParser::SetDocumentSubset() - Type: %d" ),
-                                            aDocumentSubset->ElementType() );  
-    #endif
-    __ASSERT_DEBUG( aDocumentSubset != NULL, User::Panic( _L( "CXcapUriParser" ), 1 ) );
-    iDocumentSubset = CONST_CAST( CXdmDocumentNode*, aDocumentSubset );
-    iNodeType = iDocumentSubset->ElementType();
-    }
-
-// ---------------------------------------------------------
-// CXcapUriParser::DesC8
-//
-// ---------------------------------------------------------
-//
-TPtrC8 CXcapUriParser::DesC8() const 
-    {
-    return iCompleteUri != NULL ? iCompleteUri->Des() : TPtrC8();
-    }
-
-// ---------------------------------------------------------
-// CXcapUriParser::NodeType
-//
-// ---------------------------------------------------------
-//
-TXdmElementType CXcapUriParser::NodeType() const 
-    {
-    return iNodeType;
-    }
-    
-#ifdef _DEBUG        
-// ---------------------------------------------------------
-// CXcapUriParser::DumpUriL
-//
-// ---------------------------------------------------------
-//
-void CXcapUriParser::DumpUriL( HBufC8* aNodePath ) 
-    {
-    RFile file;
-    RFs session;
-    TPtr8 pointer( aNodePath->Des() );
-    _LIT( KFilePath, "C:\\logs\\XDM\\Dump.txt" );
-    User::LeaveIfError( session.Connect() );
-    TInt error = file.Replace( session, KFilePath, EFileWrite );
-    if( error == KErrNone )
-        {
-        file.Write( pointer );
-        file.Close();
-        }
-    session.Close();
-    }
-#endif
-//  End of File  
-