ncdengine/provider/client/src/ncdsearchrootnodeproxy.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/client/src/ncdsearchrootnodeproxy.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,175 @@
+/*
+* 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 CNcdSearchRootNodeProxy class implementation
+*
+*/
+
+
+#include "ncdsearchrootnodeproxy.h"
+#include "catalogsclientserver.h"
+#include "ncdnodemanagerproxy.h"
+#include "ncdoperationmanagerproxy.h"
+#include "ncdnodeidentifier.h"
+#include "catalogsdebug.h"
+#include "ncdnodefunctionids.h"
+#include "catalogsinterfaceidentifier.h"
+#include "ncdloadnodeoperationproxy.h"
+#include "ncdchildentity.h"
+#include "ncdchildloadmode.h"
+#include "ncderrors.h"
+
+// ======== PUBLIC MEMBER FUNCTIONS ========
+
+CNcdSearchRootNodeProxy* CNcdSearchRootNodeProxy::NewL( MCatalogsClientServer& aSession,
+                                            TInt aHandle,
+                                            CNcdNodeManagerProxy& aNodeManager,
+                                            CNcdOperationManagerProxy& aOperationManager,
+                                            CNcdFavoriteManagerProxy& aFavoriteManager )
+    {
+    CNcdSearchRootNodeProxy* self = 
+        CNcdSearchRootNodeProxy::NewLC(
+            aSession, aHandle, aNodeManager, aOperationManager, aFavoriteManager );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+CNcdSearchRootNodeProxy* CNcdSearchRootNodeProxy::NewLC( MCatalogsClientServer& aSession,
+                                             TInt aHandle,
+                                             CNcdNodeManagerProxy& aNodeManager,
+                                             CNcdOperationManagerProxy& aOperationManager,
+                                             CNcdFavoriteManagerProxy& aFavoriteManager )
+    {
+    CNcdSearchRootNodeProxy* self = 
+        new( ELeave ) CNcdSearchRootNodeProxy(
+            aSession, aHandle, aNodeManager, aOperationManager, aFavoriteManager );  
+    // Using PushL because the object does not have any references yet
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+CNcdSearchRootNodeProxy::CNcdSearchRootNodeProxy( MCatalogsClientServer& aSession,
+                                      TInt aHandle,
+                                      CNcdNodeManagerProxy& aNodeManager,
+                                      CNcdOperationManagerProxy& aOperationManager,
+                                      CNcdFavoriteManagerProxy& aFavoriteManager ) 
+: CNcdSearchNodeFolderProxy( aSession, aHandle, aNodeManager, aOperationManager, aFavoriteManager )
+    {
+    }
+
+
+void CNcdSearchRootNodeProxy::ConstructL()
+    {
+    CNcdNodeFolderProxy::ConstructL(); 
+    }
+
+CNcdSearchRootNodeProxy::~CNcdSearchRootNodeProxy()
+    {
+    }
+
+
+MNcdNode::TState CNcdSearchRootNodeProxy::State() const
+    {
+    DLTRACEIN((""));
+    // Search root is a local node that can't be loaded and
+    // therefore is always initialized.
+    DLTRACEOUT(("Initialized"));
+    return MNcdNode::EStateInitialized;
+    }
+
+
+MNcdLoadNodeOperation* CNcdSearchRootNodeProxy::LoadL(
+    MNcdLoadNodeOperationObserver& /*aObserver*/ )
+    {
+    DLTRACEIN((""));
+    DLTRACEOUT((""));
+    // return null because search root can't be loaded.
+    return NULL;
+    }
+
+TInt CNcdSearchRootNodeProxy::ChildCount() const
+    {
+    return iChildren.Count();
+    }
+
+
+MNcdNode* CNcdSearchRootNodeProxy::ChildL( TInt aIndex )
+    {
+    DLTRACEIN(( _L("This parent: %S, %S"), &Namespace(), &Id() ));
+
+           
+    if ( aIndex < 0 || aIndex >= iChildren.Count() )
+        {
+        // Nothing to be done 
+        DLERROR(( "Index error. child count: %d Given index: %d", 
+                  iChildren.Count(), aIndex ));
+        DASSERT( EFalse );
+        User::Leave( KErrArgument );
+        }
+        
+    const CNcdNodeIdentifier* child = &iChildren[aIndex]->Identifier();
+        
+    MNcdNode* node( NULL );
+    
+    node = &NodeManager().NodeL( *child );
+    
+    // Increase the reference counter by one
+    node->AddRef();
+    
+    DLTRACEOUT((""));
+
+    return node;
+    }
+
+MNcdLoadNodeOperation* CNcdSearchRootNodeProxy::LoadChildrenL( 
+        TInt aIndex, TInt aSize, TNcdChildLoadMode aMode,
+        MNcdLoadNodeOperationObserver& aObserver )
+    {
+    DLTRACEIN((""));
+    if( aSize < 1 || aIndex < 0 || ( aMode == ELoadMetadata && aIndex + aSize > ChildCount() ))
+        {
+        // Nothing to be done 
+        DLERROR(( "Argument error. ChildCount: %d Given index: %d, size: %d",
+                  ChildCount(), aIndex, aSize ));
+        DASSERT( EFalse );
+        User::Leave( KErrArgument );
+        }
+    if( aMode == ELoadMetadata )
+        {
+        // Child metadata can be loaded in a regular load op
+        return CNcdSearchNodeFolderProxy::LoadChildrenL( aIndex,
+            aSize,
+            aMode,
+            aObserver );
+        }
+    else
+        {
+        
+        return NULL;
+        }
+    }
+
+void CNcdSearchRootNodeProxy::OperationComplete( 
+    MNcdLoadNodeOperation& /*aOperation*/, TInt aError )
+    {
+    DLTRACEIN(( "Error: %d", aError ));
+    
+    if ( aError == KErrNone || aError == KNcdErrorSomeCatalogsFailedToLoad ) 
+        {
+        // update proxy's status from the server
+        TRAP_IGNORE( InternalizeL() );
+        }
+    }
+