cleanup
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / handler / MoveTaxonHandler.java
index d275e3c90408ae57ad0ff5773090e68b63468734..09557cccde7ead14e9a46c6511284bcc8c75ad80 100644 (file)
 package eu.etaxonomy.taxeditor.navigation.navigator.handler;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 import java.util.UUID;
 
 import org.eclipse.core.commands.AbstractHandler;
@@ -24,9 +26,11 @@ import org.eclipse.ui.handlers.HandlerUtil;
 
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
 import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator;
+import eu.etaxonomy.taxeditor.navigation.navigator.TreeNodeDropAdapter.MovingType;
 import eu.etaxonomy.taxeditor.navigation.navigator.operation.MoveTaxonOperation;
 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
@@ -44,11 +48,8 @@ public class MoveTaxonHandler extends AbstractHandler implements IPostOperationE
 
        private TaxonNode parentTaxonNode;
        protected IWorkbenchPage activePage;
-       /* (non-Javadoc)
-        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
-        */
-       /** {@inheritDoc} */
 
+       /** {@inheritDoc} */
        @Override
     public Object execute(ExecutionEvent event) throws ExecutionException {
                activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
@@ -56,38 +57,42 @@ public class MoveTaxonHandler extends AbstractHandler implements IPostOperationE
 
                TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event);
 
-               Iterator selectionIterator = selection.iterator();
-               TaxonNode taxonNode = null;
-               UUID taxonNodeUUID = null;
+               Iterator<?> selectionIterator = selection.iterator();
+               Set<TaxonNode> taxonNodes = new HashSet<TaxonNode>();
+               TaxonNode taxonNode= null;
+               Set<UUID> taxonNodeUUIDs = new HashSet<UUID>();
                // do not show the current selection
                List<UUID> excludeTaxa = new ArrayList<UUID>();
 
+               //if (selection.size() == 1){
 
-               if (selection.size() == 1){
+               while (selectionIterator.hasNext()){
                        Object object = selectionIterator.next();
                        if(object instanceof TaxonNode){
-                               taxonNode = HibernateProxyHelper.deproxy(object,TaxonNode.class);
-                               taxonNodeUUID = taxonNode.getUuid();
+                           taxonNode = HibernateProxyHelper.deproxy(object,TaxonNode.class);
+                               taxonNodes.add(taxonNode);
+                               taxonNodeUUIDs.add(taxonNode.getUuid());
                                excludeTaxa.add(taxonNode.getTaxon().getUuid());
                        }
-               } else{
+               }
+               /*} else{
                        if( MessageDialog.openConfirm(HandlerUtil.getActiveShell(event), "Moving taxon", "The operation move accepted taxon to other parent is available only for a single taxon.")){
                                return null;
                        }
-               }
-
+               }*/
 
 
 //             TaxonNode taxonNode = (TaxonNode) selection.getFirstElement();
-               if (taxonNode != null){
-                       boolean moveToNewParent = true;
+               if (taxonNodes.size() >= 1){
+                   Classification classification = taxonNodes.iterator().next().getClassification();
+                       MovingType moveToNewParent = MovingType.CHILD;
                        if (PreferencesUtil.getSortNodesNaturally()){
                                if(!MessageDialog.openQuestion(null, "Target node", "The choosen target node should be the parent?")){
-                                       moveToNewParent = false;
+                                       moveToNewParent = MovingType.BEHIND;
                                }
-                               parentTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), taxonNavigator.getConversationHolder(), "Choose the taxon above the moved taxon.", excludeTaxa, null, null);
+                               parentTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), taxonNavigator.getConversationHolder(), "Choose the taxon above the moved taxon.", excludeTaxa, null, classification);
                        }else{
-                               parentTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), taxonNavigator.getConversationHolder(), "Choose new parent", excludeTaxa, null, null);
+                               parentTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), taxonNavigator.getConversationHolder(), "Choose new parent", excludeTaxa, null, classification);
                        }
                        if(parentTaxonNode != null){
                                if(NavigationUtil.isDirty(parentTaxonNode)){
@@ -96,21 +101,18 @@ public class MoveTaxonHandler extends AbstractHandler implements IPostOperationE
                                        return null;
                                }
 
-                               AbstractPostOperation operation = new MoveTaxonOperation
+
+                               AbstractPostOperation<?> operation = new MoveTaxonOperation
                                                ("Move taxon to new parent", NavigationUtil.getUndoContext(),
-                                                               taxonNode, parentTaxonNode, taxonNavigator, taxonNavigator, moveToNewParent); //$NON-NLS-1$
+                                                               taxonNodeUUIDs, parentTaxonNode, taxonNavigator, taxonNavigator, moveToNewParent); //$NON-NLS-1$
                                NavigationUtil.executeOperation(operation);
                                taxonNavigator.refresh();
 
                        }
                }
-
                return null;
        }
 
-       /* (non-Javadoc)
-        * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
-        */
        /** {@inheritDoc} */
        @Override
     public boolean postOperation(CdmBase objectAffectedByOperation) {