package husacct.define.presentation.draganddrop.customdroptargetlisterner;
import husacct.define.presentation.moduletree.AnalyzedModuleTree;
import husacct.define.presentation.utils.DragAndDropHelper;
import husacct.define.task.DefinitionController;
import husacct.define.task.components.AbstractDefineComponent;
import husacct.define.task.components.AnalyzedModuleComponent;
import java.awt.Point;
import java.awt.datatransfer.DataFlavor;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetContext;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.util.ArrayList;
import javax.swing.JTree;
import javax.swing.tree.TreePath;
public class SoftwareUnitDropListerner implements DropTargetListener {
private AnalyzedModuleTree tree;
private DropTarget target;
public SoftwareUnitDropListerner(AnalyzedModuleTree tr) {
this.tree = tr;
this.target = new DropTarget(tree, this);
}
private AbstractDefineComponent getNodeForEvent(DropTargetDragEvent dtde) {
Point p = dtde.getLocation();
DropTargetContext dtc = dtde.getDropTargetContext();
JTree tree = (JTree) dtc.getComponent();
TreePath path = tree.getClosestPathForLocation(p.x, p.y);
return (AbstractDefineComponent) path.getLastPathComponent();
}
@Override
public void dragEnter(DropTargetDragEvent arg) {
try {
Point p = arg.getLocation();
TreePath path = tree.getPathForLocation(p.x, p.y);
AnalyzedModuleComponent check = (AnalyzedModuleComponent) path
.getLastPathComponent();
String type = check.getType().toLowerCase();
if (type.equals("root") || type.equals("application")
|| type.equals("externalpackage")) {
arg.rejectDrag();
}
} catch (Exception e) {
arg.rejectDrag();
}
}
@Override
public void dragExit(DropTargetEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void dragOver(DropTargetDragEvent arg) {
try {
} catch (Exception e) {
arg.rejectDrag();
}
arg.acceptDrag(1);
}
@Override
public void drop(DropTargetDropEvent arg) {
try {
String result = ((String) arg.getTransferable().getTransferData(
DataFlavor.stringFlavor));
Object[] namesAndTypes = DragAndDropHelper.interpretObjects(result);
ArrayList<String> names = (ArrayList<String>) namesAndTypes[0];
ArrayList<String> types = (ArrayList<String>) namesAndTypes[1];
DefinitionController.getInstance().removeSoftwareUnits(names, types);
} catch (Exception e) {
}
}
@Override
public void dropActionChanged(DropTargetDragEvent arg0) {
}
}