Merge branch 'release/4.6.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / DerivateDropListener.java
index 6bc403d1b07bf5b1babc37a816dbd608922fe439..a38272e989ddf02759ae1d873f7714cfd5da6451 100644 (file)
@@ -1,4 +1,3 @@
-// $Id$
 /**
 * Copyright (C) 2014 EDIT
 * European Distributed Institute of Taxonomy
@@ -9,22 +8,19 @@
 */
 package eu.etaxonomy.taxeditor.editor.view.derivate;
 
+import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.util.LocalSelectionTransfer;
-import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TreeNode;
 import org.eclipse.jface.viewers.ViewerDropAdapter;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
 import org.eclipse.swt.dnd.TransferData;
 
-import eu.etaxonomy.cdm.api.service.IOccurrenceService;
-import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
-import eu.etaxonomy.cdm.model.molecular.DnaSample;
-import eu.etaxonomy.cdm.model.molecular.Sequence;
-import eu.etaxonomy.cdm.model.molecular.SingleRead;
-import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.l10n.Messages;
+import eu.etaxonomy.taxeditor.editor.view.derivate.operation.MoveDerivateOperation;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
-import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 
 /**
  * @author pplitzner
@@ -35,86 +31,42 @@ public class DerivateDropListener extends ViewerDropAdapter {
 
     private final DerivateView derivateView;
 
-    /**
-     * @param derivateView
-     */
     protected DerivateDropListener(DerivateView derivateView) {
         super(derivateView.getViewer());
         this.derivateView = derivateView;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.jface.viewers.ViewerDropAdapter#performDrop(java.lang.Object)
-     */
     @Override
     public boolean performDrop(Object data) {
         if(derivateView.isDirty()){
-            AbstractUtility.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
+            MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
             return false;
         }
         Object target = getCurrentTarget();
-        if(target instanceof TreeNode && data instanceof IStructuredSelection){
+        if(target instanceof TreeNode && data instanceof DerivateViewSelection){
+            DerivateViewSelection derivateViewSelection = (DerivateViewSelection)data;
             TreeNode targetNode = (TreeNode) target;
-            TreeNode draggednode = EditorUtil.getTreeNodeValueOfSelection((IStructuredSelection) data);
-            if(draggednode!=null){
-                if(moveTreeNode(draggednode, targetNode)){
-                    derivateView.update();
-                    LocalSelectionTransfer.getTransfer().setSelection(null);
-                    return true;
-                }
+            TreeNode draggedNode = EditorUtil.getTreeNodeOfSelection(derivateViewSelection.getSelection());
+            if(draggedNode!=null){
+                MoveDerivateOperation moveDerivateOperation = new MoveDerivateOperation(String.format(Messages.DerivateDropListener_MOVE_TO, derivateView.getLabelProvider().getDerivateText(draggedNode), derivateView.getLabelProvider().getDerivateText(targetNode)), EditorUtil.getUndoContext(), derivateView, draggedNode, targetNode);
+                return AbstractUtility.executeOperation(moveDerivateOperation).equals(Status.OK_STATUS)?true:false;
             }
         }
         return false;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.jface.viewers.ViewerDropAdapter#validateDrop(java.lang.Object, int, org.eclipse.swt.dnd.TransferData)
-     */
     @Override
     public boolean validateDrop(Object target, int operation, TransferData transferType) {
         return LocalSelectionTransfer.getTransfer().isSupportedType(transferType) && target instanceof TreeNode;
     }
 
     /**
-     * @param value
-     * @return
+     * {@inheritDoc}
      */
-    private boolean moveTreeNode(TreeNode from, TreeNode to) {
-        Object fromValue = from.getValue();
-        Object toValue = to.getValue();
-        TreeNode fromParentNode = from.getParent();
-        Object fromParentSpecimen = fromParentNode.getValue();
-
-        // drag'n'drop for SpecimenOrObservationBase
-        if(fromValue instanceof DerivedUnit && toValue instanceof SpecimenOrObservationBase<?>){
-            DerivedUnit draggedSpecimen = (DerivedUnit) fromValue;
-            SpecimenOrObservationBase<?> targetSpecimen = (SpecimenOrObservationBase<?>) toValue;
-            //check if type is a sub derivate type
-            if(!fromParentNode.equals(to)//don't drag on direct parent node
-                    && fromParentSpecimen instanceof SpecimenOrObservationBase<?>){
-                CdmStore.getService(IOccurrenceService.class).moveDerivate((SpecimenOrObservationBase<?>)fromParentSpecimen, targetSpecimen, draggedSpecimen);
-                return true;
-            }
-        }
-
-        // drag'n'drop for SingleRead
-        else if(fromValue instanceof SingleRead && toValue instanceof Sequence){
-            SingleRead singleRead = (SingleRead) fromValue;
-            if(fromParentSpecimen instanceof Sequence){
-                CdmStore.getService(ISequenceService.class).moveSingleRead((Sequence)fromParentSpecimen, (Sequence)toValue, singleRead);
-            }
-            return true;
-        }
-
-        // drag'n'drop for Sequence
-        else if(fromValue instanceof Sequence && toValue instanceof DnaSample ){
-            Sequence sequence = (Sequence)fromValue;
-            if(fromParentSpecimen instanceof DnaSample){
-                CdmStore.getService(IOccurrenceService.class).moveSequence((DnaSample)fromParentSpecimen, (DnaSample)toValue, sequence);
-                return true;
-            }
-        }
-        return false;
+    @Override
+    public void dragOver(DropTargetEvent event) {
+        super.dragOver(event);
+        event.feedback = DND.FEEDBACK_SELECT | DND.FEEDBACK_SCROLL;
     }
 
 }