smaller changes for drag & dop with natural order in taxonnavigator
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / operation / MoveTaxonOperation.java
index 87df0560eeb31d7313dc83b478ea83196c7c670e..ecd062b5cc7f908ae5a34a378783d206bb3953a0 100644 (file)
@@ -9,9 +9,8 @@
 
 package eu.etaxonomy.taxeditor.navigation.navigator.operation;
 
-import java.util.HashMap;
-import java.util.Map;
 import java.util.Set;
+import java.util.UUID;
 
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.operations.IUndoContext;
@@ -21,12 +20,14 @@ import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
+import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
-import eu.etaxonomy.cdm.model.taxon.IllegalAncestryException;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.navigation.navigator.TreeNodeDropAdapter.MovingType;
 import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
-import eu.etaxonomy.taxeditor.store.StoreUtil;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * Change the taxonomic parent of a given taxon.
@@ -40,14 +41,14 @@ public class MoveTaxonOperation extends AbstractPersistentPostOperation {
        /**
         * A reference to the new taxonomical parent.
         */
-       private ITaxonTreeNode newParentTreeNode;
+       private final ITaxonTreeNode newParentTreeNode;
        /**
         * A reference to the former taxonomical parents
         */
-       private Map<TaxonNode, ITaxonTreeNode> oldParentTreeNodes;
-
-       private Set<TaxonNode> taxonNodes;
+       //private Map<TaxonNode, ITaxonTreeNode> oldParentTreeNodes;
 
+       private final Set<UUID> taxonNodesUuid;
+       private final MovingType moveToParentNode;
        /**
         * <p>Constructor for MoveTaxonOperation.</p>
         *
@@ -59,18 +60,19 @@ public class MoveTaxonOperation extends AbstractPersistentPostOperation {
         * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object.
         */
        public MoveTaxonOperation(String label, IUndoContext undoContext,
-                       Set<TaxonNode> taxonNodes, ITaxonTreeNode newParentTreeNode, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {
+                       Set<UUID> taxonNodesUUIDToMove, ITaxonTreeNode newParentTreeNode, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled, MovingType moveToParentNode) {
                super(label, undoContext, postOperationEnabled, conversationEnabled);
 
-               this.taxonNodes = taxonNodes;
+               this.taxonNodesUuid = taxonNodesUUIDToMove;
+               /*for (TaxonNode node:taxonNodes){
+                       this.taxonNodes.add(service.load(node.getUuid()));
+               }*/
 
                this.newParentTreeNode = newParentTreeNode;
-
+               this.moveToParentNode = moveToParentNode;
                // Save old parent ITaxonTreeNodes for undo
-               oldParentTreeNodes = new HashMap<TaxonNode, ITaxonTreeNode>();
-               for(TaxonNode taxonNode : taxonNodes){
-                       this.oldParentTreeNodes.put(taxonNode, taxonNode.getParent());
-               }
+
+               //this.parentNode = taxonNode.getParent();
        }
 
        /* (non-Javadoc)
@@ -82,17 +84,27 @@ public class MoveTaxonOperation extends AbstractPersistentPostOperation {
                        throws ExecutionException {
                bind();
                monitor.worked(20);
-
-               try {
-                       for (TaxonNode taxonNode : taxonNodes){
-                               TaxonNode newTaxonNode = newParentTreeNode.addChildNode(taxonNode,
-                                               newParentTreeNode.getReference(), newParentTreeNode.getMicroReference());
-                               taxonNodes.add(newTaxonNode);
-                               monitor.worked(2);
-                       }
-               } catch(IllegalAncestryException e) {
-                       StoreUtil.warningDialog("Illegal ancestry", this, e.getMessage());
+               UpdateResult result;
+               switch(this.moveToParentNode){
+               case CHILD:
+                   result = CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(this.taxonNodesUuid,newParentTreeNode.getUuid(), 0);
+               case PREVIOUS:
+                   result = CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(this.taxonNodesUuid,newParentTreeNode.getUuid(), 1);
+               case BEHIND:
+                   result = CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(this.taxonNodesUuid,newParentTreeNode.getUuid(), 2);
                }
+
+//             try {
+//                     for (TaxonNode taxonNode : taxonNodes){
+//                             TaxonNode newTaxonNode = newParentTreeNode.addChildNode(taxonNode,
+//                                             newParentTreeNode.getReference(), newParentTreeNode.getMicroReference());
+//                             //taxonNodes.add(newTaxonNode);
+//
+//                             monitor.worked(2);
+//                     }
+//             } catch(IllegalAncestryException e) {
+//                     MessagingUtils.warningDialog("Illegal ancestry", this, e.getMessage());
+//             }
                monitor.worked(40);
 
                return postExecute(null);
@@ -115,7 +127,7 @@ public class MoveTaxonOperation extends AbstractPersistentPostOperation {
        @Override
        public IStatus undo(IProgressMonitor monitor, IAdaptable info)
                        throws ExecutionException {
-               StoreUtil.warn(this.getClass(), "Not implemented yet.");
+               MessagingUtils.warn(this.getClass(), "Not implemented yet.");
 
                // iterate over oldParentTreeNodes, delete each TaxonNode from its actual parent and add to its former parent