package husacct.define.presentation.draganddrop.customdroptargetlisterner;
import husacct.define.domain.services.stateservice.StateService;
import husacct.define.presentation.draganddrop.customtransferhandlers.ModuleTrasferhandler;
import husacct.define.presentation.moduletree.AnalyzedModuleTree;
import husacct.define.presentation.tables.JTableSoftwareUnits;
import husacct.define.task.DefinitionController;
import husacct.define.task.SoftwareUnitController;
import husacct.define.task.components.AnalyzedModuleComponent;
import java.awt.datatransfer.UnsupportedFlavorException;
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.io.IOException;
import java.util.ArrayList;
import javax.swing.tree.TreePath;
public class SoftwareUnitTableDropListener implements DropTargetListener {
private JTableSoftwareUnits softwareUnitTable;
private DropTarget target;
public SoftwareUnitTableDropListener(JTableSoftwareUnits table) {
this.softwareUnitTable=table;
this.target= new DropTarget(table, this);
}
@Override
public void dragEnter(DropTargetDragEvent dtde) {
// TODO Auto-generated method stub
}
@Override
public void dragExit(DropTargetEvent dte) {
// TODO Auto-generated method stub
}
@Override
public void dragOver(DropTargetDragEvent arg) {
try {
AnalyzedModuleTree palo = (AnalyzedModuleTree)arg.getTransferable().getTransferData(ModuleTrasferhandler.moduleFlavours[0]);
if (palo!=null) {
arg.acceptDrag(1);
} else {
arg.rejectDrag();
}
} catch (UnsupportedFlavorException e) {
arg.rejectDrag();
} catch (IOException e) {
arg.rejectDrag();
}
}
@Override
public void drop(DropTargetDropEvent arg) {
try {
AnalyzedModuleTree palo = (AnalyzedModuleTree)arg.getTransferable().getTransferData(ModuleTrasferhandler.moduleFlavours[0]);
ArrayList<AnalyzedModuleComponent> tobesaved = new ArrayList<AnalyzedModuleComponent>();
for (TreePath pathe : palo.getSelectionPaths()) {
AnalyzedModuleComponent top= (AnalyzedModuleComponent)pathe.getLastPathComponent();
//hot fix if have time will be better implemented
String type = top.getType().toLowerCase().trim();
boolean res =((!type.equals("root")&&!type.equals("application")&&!type.equals("externalpackage")));
if (res) {
AnalyzedModuleComponent referencedUnit= StateService.instance().getAnalyzedSoftWareUnit(top.getUniqueName());
if (!referencedUnit.isMapped()) {
tobesaved.add(referencedUnit);
}
}
}
long selectedModuleID =DefinitionController.getInstance().getSelectedModuleId();
SoftwareUnitController controller = new SoftwareUnitController(selectedModuleID);
controller.save(tobesaved);
DefinitionController.getInstance().notifyObservers();
} catch (UnsupportedFlavorException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void dropActionChanged(DropTargetDragEvent dtde) {
// TODO Auto-generated method stub
}
}