ncdengine/provider/client/src/ncdnodeuserdataproxy.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/client/src/ncdnodeuserdataproxy.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,165 @@
+/*
+* 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 CNcdNodeUserDataProxy class implementation
+*
+*/
+
+
+#include "ncdnodeuserdataproxy.h"
+#include "ncdnodemetadataproxy.h"
+#include "ncdoperationimpl.h"
+#include "catalogsclientserver.h"
+#include "ncdnodeidentifier.h"
+#include "ncdnodefunctionids.h"
+#include "ncdnodeclassids.h"
+#include "catalogsinterfaceidentifier.h"
+#include "catalogsutils.h"
+#include "catalogsdebug.h"
+
+
+CNcdNodeUserDataProxy::CNcdNodeUserDataProxy(
+    MCatalogsClientServer& aSession,
+    TInt aHandle,
+    CNcdNodeMetadataProxy& aNodeMetadata )
+    : CNcdInterfaceBaseProxy( aSession, aHandle, &aNodeMetadata ),
+      iNodeMetadata( aNodeMetadata )
+    {
+    }
+
+
+void CNcdNodeUserDataProxy::ConstructL()
+    {
+    // Register the interface
+    MNcdNodeUserData* interface( this );
+    AddInterfaceL( 
+        CCatalogsInterfaceIdentifier::NewL( interface, this, MNcdNodeUserData::KInterfaceUid ) );
+    }
+
+
+CNcdNodeUserDataProxy* CNcdNodeUserDataProxy::NewL(
+    MCatalogsClientServer& aSession,
+    TInt aHandle,
+    CNcdNodeMetadataProxy& aNodeMetadata )
+    {
+    CNcdNodeUserDataProxy* self = 
+        CNcdNodeUserDataProxy::NewLC( aSession, aHandle, aNodeMetadata );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+CNcdNodeUserDataProxy* CNcdNodeUserDataProxy::NewLC(
+    MCatalogsClientServer& aSession,
+    TInt aHandle,
+    CNcdNodeMetadataProxy& aNodeMetadata )
+    {
+    CNcdNodeUserDataProxy* self = 
+        new( ELeave ) CNcdNodeUserDataProxy( aSession, aHandle, aNodeMetadata );
+    // Using PushL because the object does not have any references yet
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+CNcdNodeUserDataProxy::~CNcdNodeUserDataProxy()
+    {
+    // Delete member variables here
+    // Do not delete node because this object does not own it.
+
+    // Remove the interface that is not used anymore
+    RemoveInterface( MNcdNodeUserData::KInterfaceUid );
+    }
+
+
+// MNcdNodeUserData functions
+
+HBufC8* CNcdNodeUserDataProxy::UserDataL() const
+    {
+    DLTRACEIN((""));
+
+    HBufC8* data( NULL );
+        
+    // Because we do not know the exact size of the data, use
+    // the alloc method, which creates the buffer of the right size
+    // and sets the pointer to point to the created buffer.
+    // Get all the data that is necessary to internalize this object
+    // from the server side.
+    User::LeaveIfError(
+        ClientServerSession().
+        SendSyncAlloc( NcdNodeFunctionIds::ENcdUserData,
+                       KNullDesC8,
+                       data,
+                       Handle(),
+                       0 ) );
+
+    if ( data == NULL )
+        {
+        DLERROR((""));
+        User::Leave(  KErrNotFound );
+        }
+
+    DLTRACEOUT(( "Received user data: %S", data ));    
+    
+    return data;
+    }
+
+void CNcdNodeUserDataProxy::SetUserDataL( const TDesC8* aData )
+    {
+    DLTRACEIN((""));
+
+    // Ret data does not need to contain anything.
+    TPtr8 retData( NULL, 0 );
+
+    if( aData == NULL )
+        {
+        DLTRACE(("User data NULL" ));
+        
+        // This means that the user data should be cleared
+        // from the db. No need to send any data to the server.
+        // Just use the right function.
+        User::LeaveIfError(
+            ClientServerSession().
+            SendSync( NcdNodeFunctionIds::ENcdClearUserData,
+                      KNullDesC8,
+                      retData,
+                      Handle() ) );
+        }
+    else
+        {
+        DLTRACE(("Set user data: %S", aData ));
+        
+        // Send the data to the server side.
+        User::LeaveIfError(
+            ClientServerSession().
+            SendSync( NcdNodeFunctionIds::ENcdSetUserData,
+                      *aData,
+                      retData,
+                      Handle() ) );        
+        }
+
+
+    // The aData should not be deleted here, because
+    // the ownership is not transferred. Even though the
+    // parameter is the pointer.
+
+    DLTRACEOUT((""));    
+    }
+
+
+// Other functions
+
+CNcdNodeMetadataProxy& CNcdNodeUserDataProxy::NodeMetadata() const
+    {
+    return iNodeMetadata;
+    }