Package org.eclipse.gef.dnd

# Class AbstractTransferDropTargetListener

java.lang.Object
org.eclipse.gef.dnd.AbstractTransferDropTargetListener

All Implemented Interfaces:
  `EventListener`, `TransferDropTargetListener`, `TransferDropTargetListener`, `DropTargetListener`, `SWTEventListener`

Direct Known Subclasses:
  `TemplateTransferDropTargetListener`

public abstract class AbstractTransferDropTargetListener extends Object implements TransferDropTargetListener
An abstract implementation of TransferDropTargetListener for use with `EditPartViewer`s. The Viewer's `Control` should be the Drop target. In order to communicate with EditParts in a consistent way, DropTargetEvents are processed into `Requests`.

Dropping is inherently a targeting interaction. This class handles calculating the target EditPart. It also handles common targeting behavior, such as interacting with the target EditPart or its ancestors to achieve things like auto-scroll/auto-expose.

## Constructor Summary

Constructors
Constructor
Description
`AbstractTransferDropTargetListener(EditPartViewer viewer)`
Constructs a new AbstractTransferDropTargetListener and sets the EditPartViewer.
`AbstractTransferDropTargetListener(EditPartViewer viewer, Transfer xfer)`
Constructs a new AbstractTransferDropTargetListener and sets the EditPartViewer and Transfer.

## Method Summary

Modifier and Type
Method
Description
`protected Request`
`createTargetRequest()`
Creates and returns the `Request` that will be sent to the targeted EditPart.
`void`
`dragEnter(DropTargetEvent event)`
Stores the information about the current DropTargetEvent.
`void`
`dragLeave(DropTargetEvent event)`
Stores the information about the current DropTargetEvent and then calls `unload()`.
`void`
`dragOperationChanged(DropTargetEvent event)`
Stores the information about the current DropTargetEvent and then calls `handleDragOperationChanged()`.
`void`
`dragOver(DropTargetEvent event)`
Stores the information about the current DropTargetEvent and then calls `handleDragOver()`.
`void`
`drop(DropTargetEvent event)`
Stores the information about the current DropTargetEvent and then calls `handleDrop()`, followed by `unload()`.
`void`
`dropAccept(DropTargetEvent event)`
Stores the current `DropTargetEvent` and does nothing.
`protected void`
`eraseTargetFeedback()`
Calls `eraseTargetFeedback(Request)` on the current target, using the target Request.
`protected Command`
`getCommand()`
Returns the current command from the target EditPart.
`DropTargetEvent`
`getCurrentEvent()`
Returns the current `DropTargetEvent`.
`protected org.eclipse.draw2d.geometry.Point`
`getDropLocation()`
Returns the current mouse location, as a `Point`.
`protected Collection<EditPart>`
`getExclusionSet()`
Returns a Collection of `EditParts` that are to be excluded when searching for the target EditPart.
`protected EditPart`
`getTargetEditPart()`
Returns the current target `EditPart`.
`protected Request`
`getTargetRequest()`
Returns the target `Request`.
`Transfer`
`getTransfer()`
`protected EditPartViewer`
`getViewer()`
Returns the `EditPartViewer` that is the target of the drop.
`protected void`
`handleDragOperationChanged()`
Called when the user changes the Drag operation.
`protected void`
`handleDragOver()`
Called whenever the User drags over the target.
`protected void`
`handleDrop()`
Updates the target Request and target EditPart, and performs the drop.
`protected void`
`handleEnteredEditPart()`
Called when a new target EditPart has been entered.
`protected void`
`handleExitingEditPart()`
Called as the current target EditPart is being exited.
`protected void`
`handleHover()`
Called when the mouse hovers during drag and drop.
`protected void`
`handleHoverStop()`
Called when the mouse resumes motion after having hovered.
`boolean`
`isEnabled(DropTargetEvent event)`
Returns `true` if this TransferDropTargetListener is enabled for the specified `DropTargetEvent`.
`protected boolean`
`isEnablementDeterminedByCommand()`
Returns `true` if `isEnabled(DropTargetEvent)` is determined by asking the potential target for a Command.
`protected void`
`setAutoexposeHelper(AutoexposeHelper helper)`
Sets the current autoexpose helper.
`void`
`setCurrentEvent(DropTargetEvent currentEvent)`
Sets the current DropTargetEvent.
`protected void`
`setEnablementDeterminedByCommand(boolean value)`
Determines if the target editpart should be asked for a Command during `isEnabled(DropTargetEvent)`.
`protected void`
`setTargetEditPart(EditPart ep)`
Sets the target `EditPart`.
`protected void`
`setTransfer(Transfer xfer)`
Sets the Tranfer type that this listener can handle.
`protected void`
`setViewer(EditPartViewer viewer)`
Sets the EditPartViewer.
`protected void`
`showTargetFeedback()`
Asks the target `EditPart` to show target feedback if it is not `null`.
`protected void`
`unload()`
Erases target feedback and sets the request to `null`.
`protected void`
`updateAutoexposeHelper()`
Updates the active `AutoexposeHelper`.
`protected void`
`updateTargetEditPart()`
Updates the target EditPart.
`protected abstract void`
`updateTargetRequest()`
Subclasses must implement this to update the target Request.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### AbstractTransferDropTargetListener

public AbstractTransferDropTargetListener(EditPartViewer viewer)
Constructs a new AbstractTransferDropTargetListener and sets the EditPartViewer. If you use this constructor, you must set the Transfer yourself using `setTransfer(Transfer)`.

Parameters:
  `viewer` - the EditPartViewer

### AbstractTransferDropTargetListener

public AbstractTransferDropTargetListener(EditPartViewer viewer, Transfer xfer)
Constructs a new AbstractTransferDropTargetListener and sets the EditPartViewer and Transfer. The Viewer's Control should be the Drop target.

Parameters:
  `viewer` - the EditPartViewer
  `xfer` - the Transfer

## Method Details

### createTargetRequest

protected Request createTargetRequest()
Creates and returns the `Request` that will be sent to the targeted EditPart. Subclasses can override to create specialized requests.

Returns:
  the `Request` to be used with the target EditPart

### dragEnter

public void dragEnter(DropTargetEvent event)
Stores the information about the current DropTargetEvent. This method may not be called on the listener, because the listener may not be made active until after the mouse has entered the drop target.

Specified by:
  `dragEnter` in interface `DropTargetListener`
See Also:
  - `DropTargetListener.dragEnter(DropTargetEvent)`

### dragLeave

public void dragLeave(DropTargetEvent event)
Stores the information about the current DropTargetEvent and then calls `unload()`. Subclasses should override `unload()` to perform actions for this event. For some reason, SWT also calls `dragLeave()` when the actual drop is performed, even though the mouse has not left the drop target.

Specified by:
  `dragLeave` in interface `DropTargetListener`
See Also:
  - `DropTargetListener.dragLeave(DropTargetEvent)`

### dragOperationChanged

public void dragOperationChanged(DropTargetEvent event)
Stores the information about the current DropTargetEvent and then calls `handleDragOperationChanged()`. Subclasses should override `handleDragOperationChanged()` to perform actions for this event.

Specified by:
  `dragOperationChanged` in interface `DropTargetListener`
See Also:
  - `DropTargetListener.dragOperationChanged(DropTargetEvent)`

### dragOver

public void dragOver(DropTargetEvent event)
Stores the information about the current DropTargetEvent and then calls `handleDragOver()`. Subclasses should override `handleDragOver()` to perform actions for this event.

Specified by:
  `dragOver` in interface `DropTargetListener`
See Also:
  - `DropTargetListener.dragOver(org.eclipse.swt.dnd.DropTargetEvent)`

### drop

public void drop(DropTargetEvent event)
Stores the information about the current DropTargetEvent and then calls `handleDrop()`, followed by `unload()`. Subclasses should override these methods to perform actions for this event.

Specified by:
  `drop` in interface `DropTargetListener`
See Also:
  - `DropTargetListener.drop(DropTargetEvent)`

### dropAccept

public void dropAccept(DropTargetEvent event)
Stores the current `DropTargetEvent` and does nothing. By default, the drop is accepted.

Specified by:
  `dropAccept` in interface `DropTargetListener`
See Also:
  - `DropTargetListener.dropAccept(DropTargetEvent)`

### eraseTargetFeedback

protected void eraseTargetFeedback()
Calls `eraseTargetFeedback(Request)` on the current target, using the target Request. Does nothing if there is no target, or if the target has not been requested to show target feedback.

### getCommand

protected Command getCommand()
Returns the current command from the target EditPart.

Returns:
  The current command from the target EditPart

### getCurrentEvent

public DropTargetEvent getCurrentEvent()
Returns the current `DropTargetEvent`.

Returns:
  the current event

### getDropLocation

protected org.eclipse.draw2d.geometry.Point getDropLocation()
Returns the current mouse location, as a `Point`. The location is relative to the control's client area.

Returns:
  the drop location

### getExclusionSet

protected Collection<EditPart> getExclusionSet()
Returns a Collection of `EditParts` that are to be excluded when searching for the target EditPart.

Returns:
  A Collection of EditParts to be excluded

### getTargetEditPart

protected EditPart getTargetEditPart()
Returns the current target `EditPart`.

Returns:
  the target EditPart

### getTargetRequest

protected Request getTargetRequest()
Returns the target `Request`. If the target Request is `null`, `createTargetRequest()` is called and the newly created Request is returned.

Returns:
  the target Request

### getTransfer

public Transfer getTransfer()

Specified by:
  `getTransfer` in interface `TransferDropTargetListener`
See Also:
  - `TransferDropTargetListener.getTransfer()`

### getViewer

protected EditPartViewer getViewer()
Returns the `EditPartViewer` that is the target of the drop.

Returns:
  the EditPartViewer

### handleDragOperationChanged

protected void handleDragOperationChanged()
Called when the user changes the Drag operation. By default, target feedback is erased. The target Request and target EditPart are updated, and target feedback is re-displayed on the new target.

### handleDragOver

protected void handleDragOver()
Called whenever the User drags over the target. By default, the target Request and target EditPart are updated, feedback is shown, and auto-expose occurs.

### handleDrop

protected void handleDrop()
Updates the target Request and target EditPart, and performs the drop. By default, the drop is performed by asking the target EditPart for a Command using the target Request. This Command is then executed on the CommandStack.

If there is no target EditPart or no executable Command, the event's `detail` field is set to `DND.DROP_NONE`.

### handleEnteredEditPart

protected void handleEnteredEditPart()
Called when a new target EditPart has been entered. By default, the new target is asked to show feedback.

### handleExitingEditPart

protected void handleExitingEditPart()
Called as the current target EditPart is being exited. By default, the target is asked to erase feedback.

### handleHover

protected void handleHover()
Called when the mouse hovers during drag and drop.

### handleHoverStop

protected void handleHoverStop()
Called when the mouse resumes motion after having hovered.

### isEnabled

public boolean isEnabled(DropTargetEvent event)
Returns `true` if this TransferDropTargetListener is enabled for the specified `DropTargetEvent`. By default, this is calculated by comparing the event's `dataTypes` with the `Transfer's` supported types ( `Transfer.isSupportedType(TransferData)`). If a dataType is supported, an attempt is made to find a target `EditPart` at the current drop location. If a target `EditPart` is found, `true` is returned, and the DropTargetEvent's `DropTargetEvent.currentDataType` is set to the dataType that matched.

Specified by:
  `isEnabled` in interface `TransferDropTargetListener`
Parameters:
  `event` - the DropTargetEvent
Returns:
  `true` if this TransferDropTargetListener is enabled for the given DropTargetEvent

### isEnablementDeterminedByCommand

protected boolean isEnablementDeterminedByCommand()
Returns `true` if `isEnabled(DropTargetEvent)` is determined by asking the potential target for a Command.

Returns:
  `true` if the target will be queried for a `Command`
Since:
  3.1

### setAutoexposeHelper

protected void setAutoexposeHelper(AutoexposeHelper helper)
Sets the current autoexpose helper.

Parameters:
  `helper` - the autoexpose helper

### setEnablementDeterminedByCommand

protected void setEnablementDeterminedByCommand(boolean value)
Determines if the target editpart should be asked for a Command during `isEnabled(DropTargetEvent)`. For most DND operations, the data is not available, thus asking for a command would not make sense. The default value is `false`.

Parameters:
  `value` - `true` if a
Since:
  3.1

### setCurrentEvent

public void setCurrentEvent(DropTargetEvent currentEvent)
Sets the current DropTargetEvent.

Parameters:
  `currentEvent` - the DropTargetEvent

### setTargetEditPart

protected void setTargetEditPart(EditPart ep)
Sets the target `EditPart`. If the target is changing, `handleExitingEditPart()` is called before the target changes, and `handleEnteredEditPart()` is called afterwards.

Parameters:
  `ep` - the new target EditPart

### setTransfer

protected void setTransfer(Transfer xfer)
Sets the Tranfer type that this listener can handle.

Parameters:
  `xfer` - the Transfer

### setViewer

protected void setViewer(EditPartViewer viewer)
Sets the EditPartViewer.

Parameters:
  `viewer` - the EditPartViewer

### showTargetFeedback

protected void showTargetFeedback()
Asks the target `EditPart` to show target feedback if it is not `null`.

See Also:
  - `EditPart.showTargetFeedback(Request)`

### unload

protected void unload()
Erases target feedback and sets the request to `null`.

### updateAutoexposeHelper

protected void updateAutoexposeHelper()
Updates the active `AutoexposeHelper`. Does nothing if there is still an active helper. Otherwise, obtains a new helper (possible `null`) at the current mouse location and calls `setAutoexposeHelper(AutoexposeHelper)`.

### updateTargetEditPart

protected void updateTargetEditPart()
Updates the target EditPart.

### updateTargetRequest

protected abstract void updateTargetRequest()
Subclasses must implement this to update the target Request.