ref #6547: update taxonnavigator when closing node wizard
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / operation / MoveTaxonOperation.java
index 56ce064a52673e5c5558b88de653decdcac38c8b..29733421681c08a3bc1452a4d4001c4008d96a22 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.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.l10n.Messages;
+import eu.etaxonomy.taxeditor.navigation.navigator.e4.TreeNodeDropAdapterE4.MovingType;
 import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * Change the taxonomic parent of a given taxon.
@@ -40,67 +41,66 @@ 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 Map<TaxonNode, ITaxonTreeNode> oldParentTreeNodes;
 
-       private Set<TaxonNode> taxonNodes;
-
-       /**
-        * <p>Constructor for MoveTaxonOperation.</p>
-        *
-        * @param label a {@link java.lang.String} object.
-        * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
-        * @param taxonNodes a {@link java.util.Set} object.
-        * @param newParentTreeNode a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
-        * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
-        * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object.
-        */
+       private final Set<UUID> taxonNodesUuid;
+       private final MovingType moveToParentNode;
        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)
-        * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
-        */
        /** {@inheritDoc} */
        @Override
        public IStatus execute(IProgressMonitor monitor, IAdaptable info)
                        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) {
-                       MessagingUtils.warningDialog("Illegal ancestry", this, e.getMessage());
+               switch(this.moveToParentNode){
+               case CHILD:
+                   CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(this.taxonNodesUuid,newParentTreeNode.getUuid(), 0);
+                   break;
+               case PREVIOUS:
+                   CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(this.taxonNodesUuid,newParentTreeNode.getUuid(), 1);
+                   break;
+               case BEHIND:
+                   CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(this.taxonNodesUuid,newParentTreeNode.getUuid(), 2);
+                   break;
                }
+
+//             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);
        }
 
-       /* (non-Javadoc)
-        * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
-        */
        /** {@inheritDoc} */
        @Override
        public IStatus redo(IProgressMonitor monitor, IAdaptable info)
@@ -108,14 +108,11 @@ public class MoveTaxonOperation extends AbstractPersistentPostOperation {
                return execute(monitor, info);
        }
 
-       /* (non-Javadoc)
-        * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
-        */
        /** {@inheritDoc} */
        @Override
        public IStatus undo(IProgressMonitor monitor, IAdaptable info)
                        throws ExecutionException {
-               MessagingUtils.warn(this.getClass(), "Not implemented yet.");
+               MessagingUtils.warn(this.getClass(), Messages.MoveTaxonOperation_NOT_IMPLEMENTED);
 
                // iterate over oldParentTreeNodes, delete each TaxonNode from its actual parent and add to its former parent