- added static method to DerivateLabelProvider to get the derivate text
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / DerivateDropListener.java
index d9a10fe892d5c6bd67b694dbbe61e315cde7a395..e5148ff67db0b187cbdd377c87d89f87205265e8 100644 (file)
@@ -9,23 +9,16 @@
 */
 package eu.etaxonomy.taxeditor.editor.view.derivate;
 
+import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.util.LocalSelectionTransfer;
 import org.eclipse.jface.viewers.TreeNode;
 import org.eclipse.jface.viewers.ViewerDropAdapter;
 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.cdm.model.occurrence.SpecimenOrObservationType;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.view.derivate.operation.MoveDerivateOperation;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
-import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
 
 /**
  * @author pplitzner
@@ -36,9 +29,6 @@ public class DerivateDropListener extends ViewerDropAdapter {
 
     private final DerivateView derivateView;
 
-    /**
-     * @param derivateView
-     */
     protected DerivateDropListener(DerivateView derivateView) {
         super(derivateView.getViewer());
         this.derivateView = derivateView;
@@ -57,30 +47,10 @@ public class DerivateDropListener extends ViewerDropAdapter {
         if(target instanceof TreeNode && data instanceof DerivateViewSelection){
             DerivateViewSelection derivateViewSelection = (DerivateViewSelection)data;
             TreeNode targetNode = (TreeNode) target;
-            TreeNode draggednode = EditorUtil.getTreeNodeOfSelection(derivateViewSelection.getSelection());
-            if(draggednode!=null){
-                if(moveTreeNode(draggednode, targetNode)){
-                    //update DerivateView
-                    derivateView.getConversationHolder().commit();
-                    derivateView.refreshTree();
-
-                    // update source DerivateView if dragging between different views occurred
-                    DerivateView sourceDerivateView = derivateViewSelection.getDerivateView();
-                    if(sourceDerivateView!=derivateView){
-                        sourceDerivateView.getConversationHolder().commit();
-                        sourceDerivateView.refreshTree();
-                    }
-
-                    //FIXME: way too much overhead for just refreshing the other DerivateView
-//                    CdmStore.getContextManager().notifyContextRefresh();
-                    LocalSelectionTransfer.getTransfer().setSelection(null);
-                    return true;
-                }
-                else{
-                    DerivateLabelProvider derivateLabelProvider = new DerivateLabelProvider();
-                    derivateLabelProvider.setConversation(derivateView.getConversationHolder());
-                    MessagingUtils.warningDialog("Moving derivate not possible!", derivateView, "Moving \""+derivateLabelProvider.getDerivateText(draggednode)+"\" to \""+derivateLabelProvider.getDerivateText(targetNode)+"\" is not possible!");
-                }
+            TreeNode draggedNode = EditorUtil.getTreeNodeOfSelection(derivateViewSelection.getSelection());
+            if(draggedNode!=null){
+                MoveDerivateOperation moveDerivateOperation = new MoveDerivateOperation("Moving \""+derivateView.getLabelProvider().getDerivateText(draggedNode)+"\" to \""+derivateView.getLabelProvider().getDerivateText(targetNode)+"\"", EditorUtil.getUndoContext(), derivateView, draggedNode, targetNode);
+                return AbstractUtility.executeOperation(moveDerivateOperation).equals(Status.OK_STATUS)?true:false;
             }
         }
         return false;
@@ -94,48 +64,4 @@ public class DerivateDropListener extends ViewerDropAdapter {
         return LocalSelectionTransfer.getTransfer().isSupportedType(transferType) && target instanceof TreeNode;
     }
 
-    /**
-     * @param value
-     * @return
-     */
-    private boolean moveTreeNode(TreeNode draggedNode, TreeNode targetNode) {
-        Object draggedNodeValue = draggedNode.getValue();
-        Object targetNodeValue = targetNode.getValue();
-        TreeNode fromParentNode = draggedNode.getParent();
-        Object fromParentSpecimen = null;
-        if(fromParentNode!=null){
-            fromParentSpecimen = fromParentNode.getValue();
-        }
-
-        // drag'n'drop for SpecimenOrObservationBase
-        IOccurrenceService occurrenceService = CdmStore.getService(IOccurrenceService.class);
-        if(draggedNodeValue instanceof DerivedUnit && targetNodeValue instanceof SpecimenOrObservationBase<?>){
-            DerivedUnit draggedSpecimen = (DerivedUnit) draggedNodeValue;
-            SpecimenOrObservationBase<?> targetSpecimen = (SpecimenOrObservationBase<?>) targetNodeValue;
-            //check if type is a sub derivate type
-            if(fromParentSpecimen instanceof SpecimenOrObservationBase<?>
-            && fromParentNode!=null
-            && !fromParentNode.equals(targetNode)){//don't drag on direct parent node)
-                return occurrenceService.moveDerivate((SpecimenOrObservationBase<?>)fromParentSpecimen, targetSpecimen, draggedSpecimen);
-            }
-        }
-
-        // drag'n'drop for SingleRead
-        else if(draggedNodeValue instanceof SingleRead && targetNodeValue instanceof Sequence){
-            SingleRead singleRead = (SingleRead) draggedNodeValue;
-            if(fromParentSpecimen instanceof Sequence){
-                return CdmStore.getService(ISequenceService.class).moveSingleRead((Sequence)fromParentSpecimen, (Sequence)targetNodeValue, singleRead);
-            }
-        }
-
-        // drag'n'drop for Sequence
-        else if(draggedNodeValue instanceof Sequence && targetNodeValue instanceof DnaSample && ((SpecimenOrObservationBase<?>) targetNodeValue).getRecordBasis()==SpecimenOrObservationType.DnaSample){
-            Sequence sequence = (Sequence)draggedNodeValue;
-            if(fromParentSpecimen instanceof DnaSample && ((SpecimenOrObservationBase<?>) targetNodeValue).getRecordBasis()==SpecimenOrObservationType.DnaSample){
-                return occurrenceService.moveSequence((DnaSample)fromParentSpecimen, (DnaSample)targetNodeValue, sequence);
-            }
-        }
-        return false;
-    }
-
 }