diff -r 88e14c3d4c4f -r 137912d1a556 deviceupdatesui/omadmadapters/connmoadapter/src/AddBuffer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deviceupdatesui/omadmadapters/connmoadapter/src/AddBuffer.cpp Tue Jul 13 03:44:34 2010 +0530 @@ -0,0 +1,302 @@ +/* + * ============================================================================== + * Copyright (c) 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: + * + * ============================================================================== + */ + +#include + +#include "AddBuffer.h" +#include "Utils.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "AddBufferTraces.h" +#endif + +_LIT8( KChildNodeWildCardPattern, "/*" ); +_LIT8( KNodeSeparator, "/" ); + +// ======== LOCAL FUNCTIONS ========= + +// ======== MEMBER FUNCTIONS ======== +//------------------------------------------------------------------------------ +// CConnMoNodeElement::CConnMoNodeElement() +//------------------------------------------------------------------------------ +CConnMoNodeElement::CConnMoNodeElement() + { + OstTraceFunctionEntry0( CCONNMONODEELEMENT_CCONNMONODEELEMENT_ENTRY ); + + OstTraceFunctionExit0( CCONNMONODEELEMENT_CCONNMONODEELEMENT_EXIT ); + } + +//------------------------------------------------------------------------------ +// CAddBuffer::~CAddBuffer() +//------------------------------------------------------------------------------ +CConnMoNodeElement::~CConnMoNodeElement() + { + OstTraceFunctionEntry0( CCONNMONODEELEMENT_DELETE_ENTRY ); + + OstTraceFunctionExit0( CCONNMONODEELEMENT_DELETE_EXIT ); + } + +//----------------------------------------------------------------------------- +// CAddBuffer* CAddBuffer::NewL( ) +//----------------------------------------------------------------------------- +CAddBuffer* CAddBuffer::NewL() + { + OstTraceFunctionEntry0( CADDBUFFER_NEWL_ENTRY ); + + CAddBuffer* self = new ( ELeave ) CAddBuffer(); + CleanupStack::PushL( self ); + + self->ConstructL(); + + CleanupStack::Pop( self ); + + OstTraceFunctionExit1( CADDBUFFER_NEWL_EXIT, ( TUint )( self ) ); + return self; + } + +//------------------------------------------------------------------------------ +// CAddBuffer::CAddBuffer() +//------------------------------------------------------------------------------ +CAddBuffer::CAddBuffer() + { + OstTraceFunctionEntry0( CADDBUFFER_CADDBUFFER_ENTRY ); + + OstTraceFunctionExit0( CADDBUFFER_CADDBUFFER_EXIT ); + } + +//------------------------------------------------------------------------------ +// CAddBuffer::~CAddBuffer() +//------------------------------------------------------------------------------ +CAddBuffer::~CAddBuffer() + { + OstTraceFunctionEntry0( CADDBUFFER_DELETE_ENTRY ); + + iBuffer.ResetAndDestroy(); + + OstTraceFunctionExit0( CADDBUFFER_DELETE_EXIT ); + } + +//------------------------------------------------------------------------------ +// CAddBuffer::CAddBuffer() +//------------------------------------------------------------------------------ +void CAddBuffer::ConstructL() + { + OstTraceFunctionEntry0( CADDBUFFER_CONSTRUCTL_ENTRY ); + + OstTraceFunctionExit0( CADDBUFFER_CONSTRUCTL_EXIT ); + } + +//------------------------------------------------------------------------------ +// CAddBuffer::AddNodeToBuffer() +//------------------------------------------------------------------------------ +void CAddBuffer::AddNodeToBufferL( const TDesC8& aUri, + const TDesC8& aParentLUID, + const TInt aStatusRef ) + { + OstTraceExt1( TRACE_NORMAL, CADDBUFFER_ADDNODETOBUFFERL_ENTRY, "ENTRY: CAddBuffer::AddNodeToBufferL;aUri=%s", aUri ); + + CConnMoNodeElement* newNode = new (ELeave) CConnMoNodeElement(); + + newNode->iUri.Copy( aUri ); + newNode->iParentLUID.Copy( aParentLUID ); + newNode->iStatusRef = aStatusRef; + newNode->iProcessed = EFalse; + newNode->iLeaf = EFalse; + + iBuffer.AppendL( newNode ); + OstTrace0( TRACE_NORMAL, CADDBUFFER_ADDNODETOBUFFERL_EXIT, "EXIT: CAddBuffer::AddNodeToBufferL"); + } + +//------------------------------------------------------------------------------ +// CAddBuffer::AddNodeToBuffer() +//------------------------------------------------------------------------------ +void CAddBuffer::AddNodeToBufferL( const TDesC8& aUri, + const TDesC8& aLUID, + const TDesC8& aObject, + const TInt aStatusRef ) + { + OstTraceExt1( TRACE_NORMAL, CADDBUFFER_ADDNODETOBUFFERL_LEAF_ENTRY, "ENTRY: CAddBuffer::AddNodeToBufferL;aUri=%s", aUri ); + + CConnMoNodeElement* newNode = new (ELeave) CConnMoNodeElement(); + + newNode->iUri.Copy( aUri ); + newNode->iParentLUID.Copy( aLUID ); + newNode->iObject.Copy( aObject ); + newNode->iStatusRef = aStatusRef; + newNode->iProcessed = EFalse; + newNode->iLeaf = ETrue; + + iBuffer.AppendL( newNode ); + OstTrace0( TRACE_NORMAL, CADDBUFFER_ADDNODETOBUFFERL_LEAF_EXIT, "EXIT: CAddBuffer::AddNodeToBufferL"); + } + +//------------------------------------------------------------------------------ +// CAddBuffer::FindDynamicNode +//------------------------------------------------------------------------------ +CConnMoNodeElement* CAddBuffer::FindDynamicNode( const TDesC8& aUri ) + { + OstTraceExt1( TRACE_NORMAL, CADDBUFFER_FINDDYNAMICNODE_ENTRY, "ENTRY: CAddBuffer::FindDynamicNode;aUri=%s", aUri ); + + CConnMoNodeElement* resultNode = NULL; + + for ( TInt i = 0; i < iBuffer.Count(); ++i ) + { + if ( iBuffer[i]->iUri.Match(aUri) != KErrNotFound ) + { + // + TBuf8 dynamicNodeChildUri(aUri); + dynamicNodeChildUri.Append( KChildNodeWildCardPattern ); + + if ( iBuffer[i]->iUri.Match( dynamicNodeChildUri ) == KErrNotFound ) + { + // Correct dynamic node found. + OstTrace0( TRACE_NORMAL, + CADDBUFFER_FINDDYNAMICNODE_MATCH_FOUND, + "CAddBuffer::FindDynamicNode;Matching node found."); + resultNode = iBuffer[i]; + break; + } + } + } + if ( resultNode != NULL ) + { + OstTraceExt1( TRACE_NORMAL, + CADDBUFFER_FINDDYNAMICNODE_EXIT, + "EXIT: CAddBuffer::FindDynamicNode;resultNode=%s", + resultNode->iUri ); + } + + return resultNode; + } + + +//------------------------------------------------------------------------------ +// CAddBuffer::Find +//------------------------------------------------------------------------------ +CConnMoNodeElement* CAddBuffer::CacheFind( const TDesC8& aUri ) + { + OstTraceExt1( TRACE_NORMAL, CADDBUFFER_CACHEFIND_ENTRY, "ENTRY: CAddBuffer::CacheFind;aUri=%s", aUri ); + + CConnMoNodeElement* resultNode = NULL; + + for ( TInt i = 0; i < iCache.Count(); ++i ) + { + if ( iCache[i]->iUri.Match( aUri ) != KErrNotFound ) + { + OstTrace0( TRACE_NORMAL, CADDBUFFER_CACHEFIND_MATCH_FOUND, "CAddBuffer::CacheFind; Matching URI found."); + resultNode = iCache[i]; + + OstTraceExt1( TRACE_NORMAL, + CADDBUFFER_CACHEFIND_RESULT_NODE, + "CAddBuffer::CacheFind; resultNode=%s", + resultNode->iUri ); + break; + } + } + + OstTrace0( TRACE_NORMAL, CADDBUFFER_CACHEFIND_EXIT, "EXIT: CAddBuffer::CacheFind"); + return resultNode; + } + +//------------------------------------------------------------------------------ +// CAddBuffer::FindDynamicNode +//------------------------------------------------------------------------------ +CConnMoNodeElement* CAddBuffer::CacheFindDynamicNode( const TDesC8& aUri ) + { + OstTraceExt1( TRACE_NORMAL, CADDBUFFER_CACHEFINDDYNAMICNODE_ENTRY, "ENTRY: CAddBuffer::CacheFindDynamicNode;aUri=%s", aUri ); + + CConnMoNodeElement* resultNode = NULL; + + for ( TInt i = 0; i < iCache.Count(); ++i ) + { + if ( iCache[i]->iUri.Match( aUri ) != KErrNotFound ) + { + // + TBuf8 dynamicNodeChildUri( aUri ); + dynamicNodeChildUri.Append( KChildNodeWildCardPattern ); + + if ( iCache[i]->iUri.Match(dynamicNodeChildUri) == KErrNotFound ) + { + // Correct dynamic node found. + OstTrace0( TRACE_NORMAL, + CADDBUFFER_CACHEFINDDYNAMICNODE_MATCH_FOUND, + "CAddBuffer::CacheFindDynamicNode; Matching node found."); + + resultNode = iCache[i]; + break; + } + } + } + if ( resultNode != NULL ) + { + OstTraceExt1( TRACE_NORMAL, + CADDBUFFER_CACHEFINDDYNAMICNODE_EXIT, + "EXIT: CAddBuffer::CacheFindDynamicNode;resultNode=%s", + resultNode->iUri ); + } + + return resultNode; + } +//------------------------------------------------------------------------------ +// CAddBuffer::AddNodeToBuffer() +//------------------------------------------------------------------------------ +TInt CAddBuffer::GetGroup( const TDesC8& aRoot, RPointerArray* aGroup ) + { + OstTraceExt1( TRACE_NORMAL, CADDBUFFER_GETGROUP_ENTRY, "ENTRY: CAddBuffer::GetGroup;aRoot=%s", aRoot ); + + iCache.Reset(); + TInt retval( KErrNotFound ); + TBool first = ETrue; + TBuf8 groupTag; + groupTag.Copy( aRoot ); + groupTag.Append( KChildNodeWildCardPattern ); + + for ( TInt i = 0; i < iBuffer.Count(); ++i ) + { + if ( iBuffer[i]->iUri.Match( groupTag ) != KErrNotFound + && !iBuffer[i]->iProcessed ) + { + if ( first ) + { + groupTag.Insert( aRoot.Length(), KNodeSeparator ); + groupTag.Insert( aRoot.Length() + 1, CUtils::GetSecondURISeg( iBuffer[i]->iUri ) ); + first = EFalse; + retval = 0; + } + aGroup->Append(iBuffer[i]); + iCache.Append(iBuffer[i]); + retval++; + } + } + OstTrace1( TRACE_NORMAL, CADDBUFFER_GETGROUP_EXIT, "EXIT: CAddBuffer::GetGroup;retval=%d", retval ); + + return retval; + } +//------------------------------------------------------------------------------ +// CAddBuffer::~CAddBuffer() +//------------------------------------------------------------------------------ +void CAddBuffer::Reset() + { + OstTraceFunctionEntry0( CADDBUFFER_Reset_ENTRY ); + + iBuffer.ResetAndDestroy(); + + OstTraceFunctionExit0( CADDBUFFER_Reset_EXIT ); + } +