locationmanager/client/src/rlocationobjectmanipulator.cpp
changeset 0 c53acadfccc6
child 15 3cebc1a84278
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationmanager/client/src/rlocationobjectmanipulator.cpp	Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,182 @@
+/*
+* Copyright (c) 2006-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:  An interface to Location Object
+*
+*/
+
+#include "locationdatatype.h"
+#include "rlocationobjectmanipulator.h"
+#include "locationmanagerdefs.h"
+#include "locationmanagerdebug.h"
+#include "mdsutils.h"
+#include <locationeventdef.h>
+#include "mdcserializationbuffer.h"
+
+// --------------------------------------------------------------------------
+// RLocationObjectManipulator::CreateLocationObject
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt RLocationObjectManipulator::CreateLocationObject( TLocationData& aLocationData,
+									TItemId aObjectId )
+	{
+	LOG( "RLocationObject::CreateLocationObject begin" );
+    TInt ret( KErrDisconnected );
+    TPckg<TLocationData> locationData( aLocationData );
+    TPckg<TItemId> objectId( aObjectId );    
+    if ( iHandle )
+        {
+        ret = SendReceive( ELocManCreateLocationObject, TIpcArgs( &locationData,  &objectId) );
+        }
+    LOG( "RLocationObject::CreateLocationObject end" );
+    return ret;
+	}
+
+// --------------------------------------------------------------------------
+// RLocationObjectManipulator::LocationSnapshot
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt RLocationObjectManipulator::LocationSnapshot(	TItemId aObjectId )
+	{
+	LOG( "RLocationObject::LocationSnapshot begin" );
+    TInt ret( KErrDisconnected );
+    TPckg<TItemId> objectId( aObjectId );    
+    if ( iHandle )
+        {
+        ret = SendReceive( ELocManLocationSnapshot, TIpcArgs( &objectId ) );
+        }
+    LOG( "RLocationObject::LocationSnapshot end" );
+    return ret;
+	}
+
+
+// --------------------------------------------------------------------------
+// RLocationObjectManipulator::RemoveLocationObject
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt RLocationObjectManipulator::RemoveLocationObject( TItemId aObjId )
+	{
+	LOG( "RLocationObject::RemoveLocationObject begin" );
+	TInt ret( KErrDisconnected );
+	TPckg<TItemId> objId( aObjId );
+	if ( iHandle )
+        {
+        ret = SendReceive( ELocManRemoveLocationObject, TIpcArgs( &objId ));
+        }
+	LOG( "RLocationObject::RemoveLocationObject end" );
+	return ret;
+	}
+// --------------------------------------------------------------------------
+// RLocationObjectManipulator::CopyLocationData
+// --------------------------------------------------------------------------
+//
+EXPORT_C void RLocationObjectManipulator::CopyLocationData (TItemId aSourceId, 
+												RArray<TItemId>& aTargetIds,
+												TRequestStatus& aStatus)
+	{
+	LOG( "RLocationObject::CopyLocationData begin" );
+	
+	TPckg<TItemId> sourceId( aSourceId );
+	// serializing RArray, must deserialize in server side
+
+	HBufC8* paramBuf = NULL;   
+    TRAPD( err, paramBuf = SerializeArrayL( aTargetIds ) );
+    // was serializing failed
+    if ( err != KErrNone )
+    	{
+        LOG1 ( "RLocationObject::CopyLocationData - cannot create serialized objectIds for sending, error: %d", err );
+        delete paramBuf;
+        paramBuf = NULL;
+        CompleteRequest( aStatus, err );
+
+        return;
+    	}
+    
+    if ( iHandle )
+        {
+       	TIpcArgs args( &sourceId, paramBuf );
+        const TInt result = SendReceive( ELocManCopyLocationDataById, args );
+        CompleteRequest( aStatus, result );
+        }
+    else
+        {
+        CompleteRequest( aStatus, KErrDisconnected );
+        }
+    
+    delete paramBuf;
+	LOG( "RLocationObject::CopyLocationData end" );
+	}
+// --------------------------------------------------------------------------
+// RLocationObjectManipulator::CopyLocationData
+// --------------------------------------------------------------------------
+//
+EXPORT_C void RLocationObjectManipulator::CopyLocationData (TDesC& aSourceURI, 
+								RPointerArray<TDesC>& aTargetURIs,
+								TRequestStatus& aStatus)
+	{
+	LOG( "RLocationObject::CopyLocationData begin" );
+
+    TInt32 uriCount = aTargetURIs.Count();
+	
+	// Required size for serialized URI buffer, count
+    TInt urisRequiredSize = CMdCSerializationBuffer::KRequiredSizeForTInt32;
+
+    // and URIs
+    for( TInt i = 0; i < uriCount; i++ )
+    	{
+    	urisRequiredSize += CMdCSerializationBuffer::RequiredSize( *aTargetURIs[i] );
+    	}
+
+   	// serializing URIs
+    CMdCSerializationBuffer* uriBuffer( NULL );
+    TRAPD( error, uriBuffer = CMdCSerializationBuffer::NewL( urisRequiredSize ); 
+                          uriBuffer->InsertL( uriCount ) );
+    
+    if( error != KErrNone )
+        {
+        LOG( "RLocationObject::CopyLocationData CMdCSerializationBuffer creation failed" );
+        delete uriBuffer;
+        CompleteRequest( aStatus, error );
+        return;
+        }
+
+    for( TInt i = 0; i < uriCount; i++ )
+		{
+		TRAPD( err, uriBuffer->InsertL( *aTargetURIs[i] ) );
+		
+	    // was serializing failed
+	    if ( err != KErrNone )
+	    	{
+	        LOG1 ( "RLocationObject::CopyLocationData - cannot create serialized objectIds for sending, error: %d", err );
+	        delete uriBuffer;
+	        uriBuffer = NULL;
+	        CompleteRequest( aStatus, err );
+	        return;
+	    	}
+		}
+    
+    if ( iHandle )
+        {
+        TIpcArgs args( &aSourceURI, uriBuffer->BufferConstPtr() );
+        const TInt result = SendReceive( ELocManCopyLocationDataByUri, args );
+        CompleteRequest( aStatus, result );
+        }
+    else
+        {
+        CompleteRequest( aStatus, KErrDisconnected );
+        }
+    
+    delete uriBuffer;
+    LOG( "RLocationObject::CopyLocationData end" );
+	}
+