allow multiple selection for moving taxonnodes
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / e4 / handler / RemotingMoveTaxonNodeHandlerE4.java
index 2bfc6fac586c3b025475c2023a4a0c567ad3d186..69ccfbd9e788c944b14efafffa3210e296a2f343 100644 (file)
@@ -8,8 +8,9 @@
  */
 package eu.etaxonomy.taxeditor.navigation.navigator.e4.handler;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
 import java.util.UUID;
 
 import javax.inject.Named;
@@ -26,7 +27,6 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TreeSelection;
 import org.eclipse.swt.widgets.Shell;
 
-import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
@@ -36,7 +36,6 @@ import eu.etaxonomy.taxeditor.navigation.navigator.e4.TreeNodeDropAdapterE4.Movi
 import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingMoveTaxonOperation;
 import eu.etaxonomy.taxeditor.operation.e4.RemotingCdmHandlerE4;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
-import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
 
 /**
@@ -46,7 +45,7 @@ import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
  */
 public class RemotingMoveTaxonNodeHandlerE4 extends RemotingCdmHandlerE4 {
 
-    private TaxonNodeDto oldTaxonNode;
+    private Set<UUID> oldTaxonNodeUUIDs = new HashSet<>();
 
     public RemotingMoveTaxonNodeHandlerE4() {
         super(TaxonNavigatorLabels.MOVE_TAXON_LABEL);
@@ -58,11 +57,11 @@ public class RemotingMoveTaxonNodeHandlerE4 extends RemotingCdmHandlerE4 {
             MPart activePart,
             MHandledMenuItem menuItem) {
         // check that only a single taxon tree node has been selected
-        if(selection.size() > 1) {
-            return new Status(IStatus.ERROR,
-                    "unknown", //$NON-NLS-1$
-                    TaxonNavigatorLabels.SINGLE_TAXON_SELECTION_MESSAGE);
-        }
+//        if(selection.size() > 1) {
+//            return new Status(IStatus.ERROR,
+//                    "unknown", //$NON-NLS-1$
+//                    TaxonNavigatorLabels.SINGLE_TAXON_SELECTION_MESSAGE);
+//        }
 
         // check for no taxon tree node selected
         if(selection.size() == 0) {
@@ -71,13 +70,17 @@ public class RemotingMoveTaxonNodeHandlerE4 extends RemotingCdmHandlerE4 {
                     TaxonNavigatorLabels.NO_TAXON_SELECTION_MESSAGE);
         }
         // check that selected object is a taxon node
-        Object obj = selection.iterator().next();
-        if(obj instanceof TaxonNodeDto) {
-            oldTaxonNode = (TaxonNodeDto)obj;
-        } else {
-            return new Status(IStatus.ERROR,
-                    "unknown", //$NON-NLS-1$
-                    TaxonNavigatorLabels.SELECTED_OBJECT_NOT_TREE_NODE_MESSAGE);
+        Object obj ;
+        Iterator iter = selection.iterator();
+        while (iter.hasNext()){
+            obj = iter.next();
+            if(obj instanceof TaxonNodeDto) {
+                oldTaxonNodeUUIDs.add(((TaxonNodeDto)obj).getUuid());
+            } else {
+                return new Status(IStatus.ERROR,
+                        "unknown", //$NON-NLS-1$
+                        TaxonNavigatorLabels.SELECTED_OBJECT_NOT_TREE_NODE_MESSAGE);
+            }
         }
         return Status.OK_STATUS;
     }
@@ -88,10 +91,6 @@ public class RemotingMoveTaxonNodeHandlerE4 extends RemotingCdmHandlerE4 {
             MPart activePart,
             MHandledMenuItem menuItem) {
         TaxonNode parentTaxonNode;
-
-        List<UUID> excludeTaxa = new ArrayList<UUID>();
-        excludeTaxa.add(oldTaxonNode.getTaxonUuid());
-
         MovingType moveToNewParent = MovingType.CHILD;
 
         if (PreferencesUtil.getSortNodesNaturally()){
@@ -100,9 +99,9 @@ public class RemotingMoveTaxonNodeHandlerE4 extends RemotingCdmHandlerE4 {
             parentTaxonNode = TaxonNodeSelectionDialog.select(shell,
 //                    new ConversationHolderMock(),
                     Messages.RemotingMoveTaxonNodeHandler_CHOOSE_TAXON,
-                    excludeTaxa,
+                    oldTaxonNodeUUIDs,
                     null,
-                    oldTaxonNode.getClassificationUUID());
+                    null, true);
             String[] buttonLables = {Messages.RemotingMoveTaxonNodeHandler_CHILD, Messages.RemotingMoveTaxonNodeHandler_BEHIND,Messages.RemotingMoveTaxonNodeHandler_CANCEL};
             MessageDialog dialog = new MessageDialog(null, Messages.RemotingMoveTaxonNodeHandler_TARGET_NODE, null, Messages.RemotingMoveTaxonNodeHandler_TARGET_NODE_MESSAGE, MessageDialog.QUESTION_WITH_CANCEL, buttonLables, 0);
             dialog.open();
@@ -116,9 +115,9 @@ public class RemotingMoveTaxonNodeHandlerE4 extends RemotingCdmHandlerE4 {
             parentTaxonNode = TaxonNodeSelectionDialog.select(shell,
 //                    new ConversationHolderMock(),
                     Messages.RemotingMoveTaxonNodeHandler_CHOOSE_PARENT,
-                    excludeTaxa,
-                    CdmStore.getService(ITaxonNodeService.class).find(oldTaxonNode.getUuid()),
-                    oldTaxonNode.getClassificationUUID());
+                    oldTaxonNodeUUIDs,
+                    null,
+                    null, true);
         }
 
 
@@ -132,7 +131,7 @@ public class RemotingMoveTaxonNodeHandlerE4 extends RemotingCdmHandlerE4 {
 
             return new RemotingMoveTaxonOperation(getTrigger(),
                     false,
-                    oldTaxonNode.getUuid(),
+                    oldTaxonNodeUUIDs,
                     parentTaxonNode.getUuid(),
                     moveToNewParent);
         }
@@ -143,8 +142,8 @@ public class RemotingMoveTaxonNodeHandlerE4 extends RemotingCdmHandlerE4 {
     @CanExecute
     private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection, MHandledMenuItem menuItem){
         boolean canExecute = false;
-        canExecute = selection.getFirstElement() instanceof TaxonNodeDto;
-
+        canExecute = (selection.getFirstElement() instanceof TaxonNodeDto) && ((TaxonNodeDto)selection.getFirstElement()).getTaxonUuid()  != null;
+        menuItem.setVisible(canExecute);
         return canExecute;
     }