/****************************************************************************
 * Copyright (c) 2004 Composent, Inc. and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Composent, Inc. - initial API and implementation
 *****************************************************************************/

package org.eclipse.ecf.presence.ui.dnd;

import org.eclipse.ecf.presence.roster.IRosterItem;
import org.eclipse.swt.dnd.TransferData;

/**
 * Roster viewer drop target.  This interface defines the 
 * required methods for implementers of the rosterViewerDropTarget
 * extension point.
 */
public interface IRosterViewerDropTarget {

	/**
	 * Validates dropping on the given roster item. This method is called whenever some 
	 * aspect of the drop operation changes.
	 * 
	 * @param rosterItem the roster item that the mouse is currently hovering over, or
	 *   <code>null</code> if the mouse is hovering over empty space
	 * @param operation the current drag operation (copy, move, etc.)
	 * @param transferData the current transfer type
	 * @return <code>true</code> if the drop is valid, and <code>false</code>
	 *   otherwise
	 */
	public boolean validateDrop(IRosterItem rosterItem, int operation, TransferData transferData);

	/**
	 * Performs any work associated with the drop.
	 *
	 * @param data the drop data
	 * @return <code>true</code> if the drop was successful, and 
	 *   <code>false</code> otherwise
	 */

	public boolean performDrop(Object data);
}
