-// $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