Performance tweak for specimen editor
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / DerivateDragListener.java
index 1099c62bc5860c88e07c9fbeb42ac6d4c92fddab..e96e5badff0627d016287900d2a1a63a0dc9a7e2 100644 (file)
@@ -11,13 +11,11 @@ package eu.etaxonomy.taxeditor.editor.view.derivate;
 
 import org.eclipse.jface.util.LocalSelectionTransfer;
 import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.TreeNode;
-import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.dnd.DragSourceAdapter;
 import org.eclipse.swt.dnd.DragSourceEvent;
 
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 
 /**
  * @author pplitzner
@@ -26,35 +24,32 @@ import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
  */
 public class DerivateDragListener extends DragSourceAdapter{
 
-    private final Viewer viewer;
+    private final DerivateView derivateView;
 
     /**
-     * @param viewer
+     * @param derivateView
      */
-    public DerivateDragListener(Viewer viewer) {
-        this.viewer = viewer;
+    public DerivateDragListener(DerivateView derivateView) {
+        this.derivateView = derivateView;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.swt.dnd.DragSourceAdapter#dragSetData(org.eclipse.swt.dnd.DragSourceEvent)
-     */
     @Override
     public void dragSetData(DragSourceEvent event) {
         if (LocalSelectionTransfer.getTransfer().isSupportedType(event.dataType)) {
-            LocalSelectionTransfer.getTransfer().setSelection(viewer.getSelection());
+            DerivateViewSelection derivateViewSelection = new DerivateViewSelection(derivateView.getViewer().getSelection(), derivateView);
+            LocalSelectionTransfer.getTransfer().setSelection(derivateViewSelection);
         }
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.swt.dnd.DragSourceAdapter#dragStart(org.eclipse.swt.dnd.DragSourceEvent)
-     */
     @Override
     public void dragStart(DragSourceEvent event) {
-        ISelection selection = viewer.getSelection();
-        if(selection instanceof IStructuredSelection
-                && ((IStructuredSelection) selection).size()==1
-                && ((IStructuredSelection) selection).getFirstElement() instanceof TreeNode
-                && ((TreeNode) ((IStructuredSelection) selection).getFirstElement()).getValue() instanceof SpecimenOrObservationBase<?>){
+        if(derivateView.isDirty()){
+            event.doit = false;
+            MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
+            return;
+        }
+        ISelection selection = derivateView.getViewer().getSelection();
+        if(EditorUtil.getTreeNodeOfSelection(selection)!=null){
             event.doit = true;
         }
         else{