Allow null as parent when moving derivatives
authorPatrick Plitzner <p.plitzner@bgbm.org>
Tue, 27 Oct 2015 14:35:25 +0000 (15:35 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Tue, 27 Oct 2015 14:35:25 +0000 (15:35 +0100)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/MoveDerivateOperation.java

index 93107ebfe0781ea3402d489115f7d4ef7a5410e4..b1426ddb673af35d7b75cbb7597c9257b95a9d5b 100644 (file)
@@ -9,6 +9,8 @@
 */
 package eu.etaxonomy.taxeditor.editor.view.derivate.operation;
 
+import java.util.UUID;
+
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.operations.IUndoContext;
 import org.eclipse.core.runtime.IAdaptable;
@@ -71,6 +73,10 @@ public class MoveDerivateOperation extends AbstractPostOperation<CdmBase>  {
 
         fromNode = draggedNode.getParent();
         if(moveTreeNode(draggedNode, fromNode, targetNode)){
+            //special case if derivative with no parent was moved
+            if(fromNode==null && draggedNode!=null && draggedNode.getValue()!=null){
+                derivateView.remove(draggedNode.getValue());
+            }
             //update DerivateView
             derivateView.getConversationHolder().commit();
             LocalSelectionTransfer.getTransfer().setSelection(null);
@@ -96,10 +102,12 @@ public class MoveDerivateOperation extends AbstractPostOperation<CdmBase>  {
             DerivedUnit draggedSpecimen = (DerivedUnit) draggedNodeValue;
             SpecimenOrObservationBase<?> targetSpecimen = (SpecimenOrObservationBase<?>) targetNodeValue;
             //check if type is a sub derivate type
-            if(fromParentSpecimen instanceof SpecimenOrObservationBase<?>
-            && fromNode!=null
-            && !fromNode.equals(targetNode)){//don't drag on direct parent node)
-                return occurrenceService.moveDerivate(((SpecimenOrObservationBase<?>)fromParentSpecimen).getUuid(),
+            if(fromNode==null || !fromNode.equals(targetNode)){//don't drag on direct parent node)
+                UUID fromUuid = null;
+                if(fromParentSpecimen!=null){
+                    fromUuid = ((SpecimenOrObservationBase<?>)fromParentSpecimen).getUuid();
+                }
+                return occurrenceService.moveDerivate(fromUuid,
                         targetSpecimen.getUuid(),
                         draggedSpecimen.getUuid()).isOk();
             }