diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/client/src/ncdnodesearchimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/client/src/ncdnodesearchimpl.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,134 @@ +/* +* Copyright (c) 2006 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: Contains CNcdNodeSearch class implementation +* +*/ + + +#include "ncdnodesearchimpl.h" +#include "ncdnodeproxy.h" +#include "ncdoperationimpl.h" +#include "ncdnodeidentifier.h" +#include "catalogsinterfaceidentifier.h" +#include "catalogsutils.h" +#include "catalogsdebug.h" +#include "ncdloadnodeoperationproxy.h" +#include "ncdoperationmanagerproxy.h" +#include "ncdnodemanagerproxy.h" +#include "ncdsearchrootnodeproxy.h" + + +CNcdNodeSearch::CNcdNodeSearch( + CNcdNodeProxy& aNode, + CNcdOperationManagerProxy& aOperationManager ) + : CCatalogsInterfaceBase( &aNode ), + iNode( aNode ), + iOperationManager( aOperationManager ) + { + } + + +void CNcdNodeSearch::ConstructL() + { + DLTRACEIN(("")); + // Register the interface + MNcdNodeSearch* interface( this ); + AddInterfaceL( + CCatalogsInterfaceIdentifier::NewL( interface, this, MNcdNodeSearch::KInterfaceUid ) ); + } + + +CNcdNodeSearch* CNcdNodeSearch::NewL( + CNcdNodeProxy& aNode, + CNcdOperationManagerProxy& aOperationManager ) + { + CNcdNodeSearch* self = + CNcdNodeSearch::NewLC( aNode, aOperationManager ); + CleanupStack::Pop( self ); + return self; + } + +CNcdNodeSearch* CNcdNodeSearch::NewLC( + CNcdNodeProxy& aNode, + CNcdOperationManagerProxy& aOperationManager ) + { + CNcdNodeSearch* self = + new( ELeave ) CNcdNodeSearch( aNode, aOperationManager ); + // Using PushL because the object does not have any references yet + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +CNcdNodeSearch::~CNcdNodeSearch() + { + DLTRACEIN(("")) + // Remove interfaces implemented by this class from the interface list. + // So, the interface list is up to date when this class object is deleted. + RemoveInterface( MNcdNodeSearch::KInterfaceUid ); + + + // Delete member variables here + // Do not delete node and operation manager because + // this object does not own them. + } + + +// MNcdNodeSearch functions + +MNcdSearchOperation* CNcdNodeSearch::SearchL( MNcdLoadNodeOperationObserver& aObserver, + MNcdSearchFilter& aSearchFilter ) + { + DLTRACEIN(("")); + + if ( aSearchFilter.Keywords().MdcaCount() < 1 ) + { + DLERROR(("Error, no keywords in search!")); + DASSERT( 0 ); + User::Leave( KErrArgument ); + } + // make sure that search root is created + CNcdSearchRootNodeProxy* searchRoot = &iNode.NodeManager().SearchRootNodeL(); + CNcdLoadNodeOperationProxy* operation = iOperationManager.CreateLoadNodeOperationL( iNode, + EFalse, // don't load children + 0, // pagesize, meaningless in this case + 0, // pagestart, meaningless in this case + 0, // depth, meaningless in this case + ELoadStructure, // meaningless in this case + &aSearchFilter ); + CleanupReleasePushL( *operation ); + // Search root is added as an observer here to make it + // update once the op is complete. + operation->AddObserverL( searchRoot ); + operation->AddObserverL( &iNode ); + operation->AddObserverL( &aObserver ); + CleanupStack::Pop( operation ); + return operation; + } + + + +// Other functions + +CNcdOperationManagerProxy& CNcdNodeSearch::OperationManager() const + { + return iOperationManager; + } + + +CNcdNodeProxy& CNcdNodeSearch::Node() const + { + return iNode; + }