diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/client/src/ncdnodeuserdataproxy.cpp --- /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; + }