/**
* Copyright (C) 2001-2017 by RapidMiner and the contributors
*
* Complete list of developers available at our web site:
*
* http://rapidminer.com
*
* This program is free software: you can redistribute it and/or modify it under the terms of the
* GNU Affero General Public License as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License along with this program.
* If not, see http://www.gnu.org/licenses/.
*/
package com.rapidminer.gui.flow.processrendering.view;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.util.TooManyListenersException;
import javax.swing.TransferHandler;
import javax.swing.event.EventListenerList;
/**
* Drop target helper class for {@link ProcessRendererView}.
*
* @author Simon Fischer
* @since 6.4.0
*
*/
class ProcessRendererDropTarget extends DropTarget {
private static final long serialVersionUID = 1L;
private EventListenerList dropTragetListenerList;
private ProcessRendererView view;
public ProcessRendererDropTarget(final ProcessRendererView view, final DropTargetListener dropTargetListener) {
super(view, TransferHandler.COPY_OR_MOVE | TransferHandler.LINK, null);
this.view = view;
try {
super.addDropTargetListener(dropTargetListener);
} catch (TooManyListenersException tmle) {
}
}
@Override
public void addDropTargetListener(final DropTargetListener dtl) throws TooManyListenersException {
if (dropTragetListenerList == null) {
dropTragetListenerList = new EventListenerList();
}
dropTragetListenerList.add(DropTargetListener.class, dtl);
}
@Override
public void removeDropTargetListener(final DropTargetListener dtl) {
if (dropTragetListenerList != null) {
dropTragetListenerList.remove(DropTargetListener.class, dtl);
}
}
@Override
public void dragEnter(final DropTargetDragEvent e) {
super.dragEnter(e);
if (dropTragetListenerList != null) {
Object[] listeners = dropTragetListenerList.getListenerList();
for (int i = listeners.length - 2; i >= 0; i -= 2) {
if (listeners[i] == DropTargetListener.class) {
((DropTargetListener) listeners[i + 1]).dragEnter(e);
}
}
}
}
@Override
public void dragOver(final DropTargetDragEvent e) {
super.dragOver(e);
if (dropTragetListenerList != null) {
Object[] listeners = dropTragetListenerList.getListenerList();
for (int i = listeners.length - 2; i >= 0; i -= 2) {
if (listeners[i] == DropTargetListener.class) {
((DropTargetListener) listeners[i + 1]).dragOver(e);
}
}
}
}
@Override
public void dragExit(final DropTargetEvent e) {
super.dragExit(e);
view.getModel().setImportDragged(false);
view.getModel().fireMiscChanged();
if (dropTragetListenerList != null) {
Object[] listeners = dropTragetListenerList.getListenerList();
for (int i = listeners.length - 2; i >= 0; i -= 2) {
if (listeners[i] == DropTargetListener.class) {
((DropTargetListener) listeners[i + 1]).dragExit(e);
}
}
}
}
@Override
public void drop(final DropTargetDropEvent e) {
super.drop(e);
view.getModel().setImportDragged(false);
view.getModel().fireMiscChanged();
if (dropTragetListenerList != null) {
Object[] listeners = dropTragetListenerList.getListenerList();
for (int i = listeners.length - 2; i >= 0; i -= 2) {
if (listeners[i] == DropTargetListener.class) {
((DropTargetListener) listeners[i + 1]).drop(e);
}
}
}
}
@Override
public void dropActionChanged(final DropTargetDragEvent e) {
super.dropActionChanged(e);
if (dropTragetListenerList != null) {
Object[] listeners = dropTragetListenerList.getListenerList();
for (int i = listeners.length - 2; i >= 0; i -= 2) {
if (listeners[i] == DropTargetListener.class) {
((DropTargetListener) listeners[i + 1]).dropActionChanged(e);
}
}
}
}
}