/*
* 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 Manipulator.
*
*/

#ifndef R_RLOCATIONOBJECTMANIPULATOR_H
#define R_RLOCATIONOBJECTMANIPULATOR_H

#include <locationdatatype.h>
#include <etel3rdparty.h>
#include <rlocationmanager.h>
#include <LbsPosition.h> 

#include "mdccommon.h"

/**
 *  RLocationObjectManipulator class is used to create, edit, copy and delete 
 *  location context objects and tags and relationships between them 
 *  and media items in the MdE database.
 *
 *  @lib LocationManager.lib
 *  @since S60 3.2
 */
NONSHARABLE_CLASS( RLocationObjectManipulator ) : public RLocationManager
    {

public:	
	/**
	 * Creates a new location object in MdE database with given 
	 * location data. Relationship is created between the location 
	 * object and objects whose ID is given in the ID array.
	 * @since S60 3.2
     * @param aLocationData, Location data consist info for GPS 
     * 		  and network data
     * @param aObjectId, Create relationships with location data and 
     * 		  given media object ID
     * @return KErrNone if successful, otherwise one of the other 
     *         system-wide error codes.
	 */
	IMPORT_C TInt CreateLocationObject( TLocationData& aLocationData,
										TItemId aObjectId );
	
	/**
	 * Creates a new location object in MdE database.
	 * Relationship is created between the location objects whose ID is given.
	 * Location data is taken from location trail.
	 * @since S60 3.2
     * @param aObjectId, Create relationships with location data and 
     * 		  given media object ID
     * @return KErrNone if successful, otherwise one of the other 
     *         system-wide error codes.
	 */
	IMPORT_C TInt LocationSnapshot( TItemId aObjectId );
	
	/**
	 * Deletes the relationship between an object and 
	 * the location context object associated with it.
 	 * @since S60 3.2
     * @param aObjId, Remove relationship from given media object ID
     * @return KErrNone if successful, otherwise one of the other 
     *         system-wide error codes.
	 */
	IMPORT_C TInt RemoveLocationObject( TItemId aObjId );
	
	/**
	 * Copies location data of a media object to one or more 
	 * media objects. If the target media object doesn’t have 
	 * a location object associated to it, one will be created.
 	 * @since S60 3.2
     * @param aSourceId, source media object ID
     * @param aTargetIds, target media object ID
     * @param aStatus Asynchronous request status
	 */
	IMPORT_C void CopyLocationData (TItemId aSourceId, 
									RArray<TItemId>& aTargetIds,
									TRequestStatus& aStatus);
	/**
	 * Copies location data of a media object to one or more 
	 * media objects. If the target media object doesn’t have 
	 * a location object associated to it, one will be created.
  	 * @since S60 3.2
     * @param aSourceURI, source media object URI
     * @param aTargetURIs, target media object URI
     * @param aStatus Asynchronous request status
	 */
	IMPORT_C void CopyLocationData (TDesC& aSourceURI, 
									RPointerArray<TDesC>& aTargetURIs,
									TRequestStatus& aStatus);
    };
    
    
#endif // R_RLOCATIONOBJECTMANIPULATOR_H

//End of File
