fix #5289
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / handler / RemotingDeleteTaxonNodeHandler.java
index 53d23d823d4d7134a388432fccaf96ca30ec0415..015ab99600fbcd680d44e02097a3fa1ceb77fe59 100644 (file)
-// $Id$
-/**
- * Copyright (C) 2015 EDIT
- * European Distributed Institute of Taxonomy
- * http://www.e-taxonomy.eu
- *
- * The contents of this file are subject to the Mozilla Public License Version 1.1
- * See LICENSE.TXT at the top of this package for the full license terms.
- */
-package eu.etaxonomy.taxeditor.navigation.navigator.handler;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.operations.AbstractOperation;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.TreeSelection;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;
-import eu.etaxonomy.cdm.api.service.config.TaxonNodeDeletionConfigurator;
-import eu.etaxonomy.cdm.api.service.config.NodeDeletionConfigurator.ChildHandling;
-import eu.etaxonomy.cdm.model.taxon.Classification;
-import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-import eu.etaxonomy.taxeditor.editor.EditorUtil;
-import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigatorLabels;
-import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingDeleteTaxonNodeOperation;
-import eu.etaxonomy.taxeditor.operation.RemotingCdmHandler;
-import eu.etaxonomy.taxeditor.ui.dialog.deleteConfigurator.DeleteConfiguratorDialog;
-
-/**
- * @author cmathew
- * @date 22 Jun 2015
- *
- */
-public class RemotingDeleteTaxonNodeHandler extends RemotingCdmHandler {
-
-    private TaxonDeletionConfigurator config;
-    private Set<ITaxonTreeNode> treeNodes;
-
-    /**
-     * @param label
-     */
-    public RemotingDeleteTaxonNodeHandler() {
-        super(TaxonNavigatorLabels.DELETE_TAXON_NODE_LABEL);
-    }
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#allowOperations(org.eclipse.core.commands.ExecutionEvent)
-     */
-    @Override
-    public IStatus allowOperations(ExecutionEvent event) {
-        TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event);
-
-        Iterator selectionIterator = selection.iterator();
-        treeNodes = new HashSet<ITaxonTreeNode>();
-
-        while (selectionIterator.hasNext()){
-            Object object = selectionIterator.next();
-            if(object instanceof ITaxonTreeNode) {
-                treeNodes.add((ITaxonTreeNode) object);
-            }
-        }
-        boolean allEditorsClosed = true;
-        IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
-        for (ITaxonTreeNode treeNode : treeNodes) {
-            if(treeNode instanceof TaxonNode) {
-                allEditorsClosed &= EditorUtil.closeObsoleteEditor((TaxonNode) treeNode, activePage);
-            }
-        }
-        if(!allEditorsClosed) {
-            return new Status(IStatus.WARNING,
-                    "unknown",
-                    TaxonNavigatorLabels.RELATED_EDITOR_NOT_CLOSED_MESSAGE);
-        }
-
-        config = new TaxonDeletionConfigurator();
-
-        if (treeNodes.size() == 1 ){
-
-            ITaxonTreeNode treeNode = treeNodes.iterator().next();
-            ITaxonTreeNode taxonNode = treeNode;
-            TaxonNodeDeletionConfigurator configNodes = new TaxonNodeDeletionConfigurator();
-            if (taxonNode instanceof Classification && taxonNode.hasChildNodes()){
-                if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(config, HandlerUtil.getActiveShell(event), "Confirm Deletion", "Do you really want to delete the classification? The tree has children, they will be deleted, too.")){
-                    return Status.CANCEL_STATUS;
-                }
-            } else if (taxonNode instanceof Classification && !taxonNode.hasChildNodes()){
-                if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(config, HandlerUtil.getActiveShell(event), "Confirm Deletion", "Do you really want to delete the classification?")){
-                    return Status.CANCEL_STATUS;
-                }
-            } else {
-
-                if (taxonNode.hasChildNodes()){
-                    DeleteConfiguratorDialog dialog = new DeleteConfiguratorDialog(
-                            config,
-                            HandlerUtil.getActiveShell(event),
-                            "Confirm Deletion",
-                            null,
-                            "Do you really want to delete the selected node? It has childnodes, they will be deleted, too.",
-                            MessageDialog.WARNING, new String[] { "Delete all children",
-                                "Move children to parent node", "Skip" }, 0);
-                    int result = dialog.open();
-
-                    if (result == 0){
-                        //delete all children
-                        configNodes.setChildHandling(ChildHandling.DELETE);
-                        config.setTaxonNodeConfig(configNodes);
-                    } else if (result == 1){
-                        //move children
-                        configNodes.setChildHandling(ChildHandling.MOVE_TO_PARENT);
-                        config.setTaxonNodeConfig(configNodes);
-                    } else if (result == 2){
-                        return Status.CANCEL_STATUS;
-                    }
-                } else{
-                    if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(configNodes, HandlerUtil.getActiveShell(event), "Confirm Deletion", "Do you really want to delete the selected node?")){
-                        return Status.CANCEL_STATUS;
-                    }
-                    config.setTaxonNodeConfig(configNodes);
-                }
-            }
-        }
-        return Status.OK_STATUS;
-    }
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#prepareOperation(org.eclipse.core.commands.ExecutionEvent)
-     */
-    @Override
-    public AbstractOperation prepareOperation(ExecutionEvent event) {
-        return new RemotingDeleteTaxonNodeOperation(event.getTrigger(),
-                false,
-                treeNodes,
-                config);
-    }
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#onComplete()
-     */
-    @Override
-    public void onComplete() {
-        // TODO Auto-generated method stub
-
-    }
-
-}
+// $Id$\r
+/**\r
+ * Copyright (C) 2015 EDIT\r
+ * European Distributed Institute of Taxonomy\r
+ * http://www.e-taxonomy.eu\r
+ *\r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
+package eu.etaxonomy.taxeditor.navigation.navigator.handler;\r
+\r
+import java.util.HashSet;\r
+import java.util.Iterator;\r
+import java.util.Set;\r
+\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.operations.AbstractOperation;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.jface.dialogs.MessageDialog;\r
+import org.eclipse.jface.viewers.TreeSelection;\r
+import org.eclipse.ui.IWorkbenchPage;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+import eu.etaxonomy.cdm.api.application.CdmApplicationState;\r
+import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;\r
+import eu.etaxonomy.cdm.api.service.config.TaxonNodeDeletionConfigurator;\r
+import eu.etaxonomy.cdm.api.service.config.NodeDeletionConfigurator.ChildHandling;\r
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
+import eu.etaxonomy.cdm.model.taxon.Classification;\r
+import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.model.MessagingUtils;\r
+import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigatorLabels;\r
+import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingDeleteTaxonNodeOperation;\r
+import eu.etaxonomy.taxeditor.operation.RemotingCdmHandler;\r
+import eu.etaxonomy.taxeditor.ui.dialog.deleteConfigurator.DeleteConfiguratorDialog;\r
+\r
+/**\r
+ * @author cmathew\r
+ * @date 22 Jun 2015\r
+ *\r
+ */\r
+public class RemotingDeleteTaxonNodeHandler extends RemotingCdmHandler {\r
+\r
+    private TaxonDeletionConfigurator config;\r
+    private Set<ITaxonTreeNode> treeNodes;\r
+\r
+    /**\r
+     * @param label\r
+     */\r
+    public RemotingDeleteTaxonNodeHandler() {\r
+        super(TaxonNavigatorLabels.DELETE_TAXON_NODE_LABEL);\r
+    }\r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#allowOperations(org.eclipse.core.commands.ExecutionEvent)\r
+     */\r
+    @Override\r
+    public IStatus allowOperations(ExecutionEvent event) {\r
+        TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event);\r
+\r
+        Iterator selectionIterator = selection.iterator();\r
+        treeNodes = new HashSet<ITaxonTreeNode>();\r
+\r
+        while (selectionIterator.hasNext()){\r
+            Object object = selectionIterator.next();\r
+            if(object instanceof ITaxonTreeNode) {\r
+                treeNodes.add((ITaxonTreeNode) object);\r
+            }\r
+        }\r
+        boolean allEditorsClosed = true;\r
+        IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();\r
+        for (ITaxonTreeNode treeNode : treeNodes) {\r
+            if(treeNode instanceof TaxonNode) {\r
+                allEditorsClosed &= EditorUtil.closeObsoleteEditor((TaxonNode) treeNode, activePage);\r
+            }\r
+        }\r
+        if(!allEditorsClosed) {\r
+            return new Status(IStatus.WARNING,\r
+                    "unknown",\r
+                    TaxonNavigatorLabels.RELATED_EDITOR_NOT_CLOSED_MESSAGE);\r
+        }\r
+\r
+        config = new TaxonDeletionConfigurator();\r
+\r
+        if (treeNodes.size() == 1 ){\r
+               ITaxonTreeNode treeNode = treeNodes.iterator().next();\r
+            ITaxonTreeNode taxonNode = treeNode;\r
+            taxonNode = CdmApplicationState.getCurrentAppConfig().getTaxonNodeService().load(taxonNode.getUuid());\r
+            if (taxonNode == null){\r
+               MessagingUtils.informationDialog("Node already deleted", "The taxon node was already deleted. Please reopen the taxon navigator to refresh the view.");\r
+               return Status.CANCEL_STATUS;\r
+                \r
+            }\r
+            TaxonNodeDeletionConfigurator configNodes = new TaxonNodeDeletionConfigurator();\r
+            if (taxonNode instanceof Classification && taxonNode.hasChildNodes()){\r
+                if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(config, HandlerUtil.getActiveShell(event), "Confirm Deletion", "Do you really want to delete the classification? The tree has children, they will be deleted, too.")){\r
+                    return Status.CANCEL_STATUS;\r
+                }\r
+            } else if (taxonNode instanceof Classification && !taxonNode.hasChildNodes()){\r
+                if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(config, HandlerUtil.getActiveShell(event), "Confirm Deletion", "Do you really want to delete the classification?")){\r
+                    return Status.CANCEL_STATUS;\r
+                }\r
+            } else {\r
+\r
+                if (taxonNode.hasChildNodes()){\r
+                    DeleteConfiguratorDialog dialog = new DeleteConfiguratorDialog(\r
+                            config,\r
+                            HandlerUtil.getActiveShell(event),\r
+                            "Confirm Deletion",\r
+                            null,\r
+                            "Do you really want to delete the selected node? It has childnodes, they will be deleted, too.",\r
+                            MessageDialog.WARNING, new String[] { "Delete all children",\r
+                                "Move children to parent node", "Skip" }, 0);\r
+                    int result = dialog.open();\r
+\r
+                    if (result == 0){\r
+                        //delete all children\r
+                        configNodes.setChildHandling(ChildHandling.DELETE);\r
+                        config.setTaxonNodeConfig(configNodes);\r
+                    } else if (result == 1){\r
+                        //move children\r
+                        configNodes.setChildHandling(ChildHandling.MOVE_TO_PARENT);\r
+                        config.setTaxonNodeConfig(configNodes);\r
+                    } else if (result == 2){\r
+                        return Status.CANCEL_STATUS;\r
+                    }\r
+                } else{\r
+                    if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(configNodes, HandlerUtil.getActiveShell(event), "Confirm Deletion", "Do you really want to delete the selected node?")){\r
+                        return Status.CANCEL_STATUS;\r
+                    }\r
+                    config.setTaxonNodeConfig(configNodes);\r
+                }\r
+            }\r
+        }\r
+        return Status.OK_STATUS;\r
+    }\r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#prepareOperation(org.eclipse.core.commands.ExecutionEvent)\r
+     */\r
+    @Override\r
+    public AbstractOperation prepareOperation(ExecutionEvent event) {\r
+        return new RemotingDeleteTaxonNodeOperation(event.getTrigger(),\r
+                false,\r
+                treeNodes,\r
+                config);\r
+    }\r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#onComplete()\r
+     */\r
+    @Override\r
+    public void onComplete() {\r
+        // TODO Auto-generated method stub\r
+\r
+    }\r
+\r
+}\r