X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/52198e036c623ac9913d3af540774ac1bb6122fd..200e853051d0d68a418515d40acbdc69625919cd:/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/DeleteHandler.java diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/DeleteHandler.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/DeleteHandler.java index a1a4425b5..bafa4430c 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/DeleteHandler.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/DeleteHandler.java @@ -1,4 +1,3 @@ -// $Id$ /** * Copyright (C) 2007 EDIT * European Distributed Institute of Taxonomy @@ -17,10 +16,7 @@ import java.util.Set; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.commands.IHandler; import org.eclipse.core.commands.common.NotDefinedException; -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.IEditorInput; @@ -29,13 +25,21 @@ import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.handlers.HandlerUtil; +import eu.etaxonomy.cdm.api.service.config.NodeDeletionConfigurator.ChildHandling; +import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator; +import eu.etaxonomy.cdm.api.service.config.TaxonNodeDeletionConfigurator; +import eu.etaxonomy.cdm.model.common.ITreeNode; +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.TaxonEditorInput; +import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.navigation.NavigationUtil; +import eu.etaxonomy.taxeditor.navigation.l10n.Messages; import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator; import eu.etaxonomy.taxeditor.navigation.navigator.operation.DeleteOperation; import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; +import eu.etaxonomy.taxeditor.ui.dialog.configurator.deleteConfigurator.DeleteConfiguratorDialog; /** *

DeleteTreeNodeHandler class.

@@ -44,10 +48,19 @@ import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; * @created 06.04.2009 * @version 1.0 */ -public class DeleteHandler extends AbstractHandler implements IHandler{ +public class DeleteHandler extends AbstractHandler{ - private IWorkbenchPage activePage; - private TaxonNavigator taxonNavigator; + protected static final String SKIP = Messages.DeleteHandler_SKIP; + protected static final String MOVE_CHILDREN_TO_PARENT_NODE = Messages.DeleteHandler_MOVE_TO_PARENT; + protected static final String DELETE_ALL_CHILDREN = Messages.DeleteHandler_DELETE_ALL; + protected static final String THERE_ARE_CHILDNODES_WHICH_WILL_BE_DELETED_TOO = Messages.DeleteHandler_THERE_ARE_CHILDNODES; + protected static final String THE_TREE_HAS_CHILDREN_THEY_WILL_BE_DELETED_TOO = Messages.DeleteHandler_THERE_ARE_CHILDREN; + protected static final String DO_YOU_REALLY_WANT_TO_DELETE_THE_SELECTED_NODE_S = Messages.DeleteHandler_DELETE_NODE; + protected static final String DO_YOU_REALLY_WANT_TO_DELETE_THE_CLASSIFICATION = Messages.DeleteHandler_DELETE_CLASSIFICATION; + protected static final String CONFIRM_DELETION = Messages.DeleteHandler_CONFIRM_DELETE; + + protected IWorkbenchPage activePage; + protected TaxonNavigator taxonNavigator; /** {@inheritDoc} */ @Override @@ -59,11 +72,10 @@ public class DeleteHandler extends AbstractHandler implements IHandler{ TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event); - String plural = selection.size() > 1 ? "s" : ""; + // Prompt user for confirmation - if(! MessageDialog.openConfirm(HandlerUtil.getActiveShell(event), "Confirm Deletion", "Are you sure you want to delete the selected node" + plural +"?")){ - return null; - } + + Iterator selectionIterator = selection.iterator(); Set treeNodes = new HashSet(); @@ -74,44 +86,139 @@ public class DeleteHandler extends AbstractHandler implements IHandler{ treeNodes.add((ITaxonTreeNode) object); } } - + boolean allEditorsClosed = true; + for (ITaxonTreeNode treeNode : treeNodes){ + if(treeNode instanceof TaxonNode) { + allEditorsClosed &= closeObsoleteEditor((TaxonNode) treeNode); + } + } AbstractPostOperation operation = null; - try { - operation = new DeleteOperation( - event.getCommand().getName(), NavigationUtil.getUndoContext(), - treeNodes, taxonNavigator, taxonNavigator); + TaxonDeletionConfigurator config = new TaxonDeletionConfigurator(); + config.setDeleteInAllClassifications(false); - IStatus status = NavigationUtil.executeOperation(operation); + if (treeNodes.size() == 1 ){ + try { + ITaxonTreeNode treeNode = treeNodes.iterator().next(); + ITaxonTreeNode taxonNode =treeNode; + TaxonNodeDeletionConfigurator configNodes = new TaxonNodeDeletionConfigurator(); - // FIXME is there a better place for this code? - if (status == Status.OK_STATUS){ - for (ITaxonTreeNode treeNode : treeNodes){ - if(treeNode instanceof TaxonNode) { - closeObsoleteEditor((TaxonNode) treeNode); + //configNodes.setDeleteTaxon(false); + 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 null; + } + } 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 null; + } + } else { + + if (taxonNode.hasChildNodes()){ + DeleteConfiguratorDialog dialog = new DeleteConfiguratorDialog( + config, + HandlerUtil.getActiveShell(event), + CONFIRM_DELETION, + null, + DO_YOU_REALLY_WANT_TO_DELETE_THE_SELECTED_NODE_S+THERE_ARE_CHILDNODES_WHICH_WILL_BE_DELETED_TOO, + MessageDialog.WARNING, new String[] { DELETE_ALL_CHILDREN, + MOVE_CHILDREN_TO_PARENT_NODE, SKIP }, 0); + int dialog_result = dialog.open(); + + if (dialog_result == 0){ + //delete all children + configNodes.setChildHandling(ChildHandling.DELETE); + config.setTaxonNodeConfig(configNodes); + } else if (dialog_result == 1){ + //move children + configNodes.setChildHandling(ChildHandling.MOVE_TO_PARENT); + config.setTaxonNodeConfig(configNodes); + } else if (dialog_result == 2){ + //skip + return null; + + } + }else{ + if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(configNodes, HandlerUtil.getActiveShell(event), CONFIRM_DELETION, DO_YOU_REALLY_WANT_TO_DELETE_THE_SELECTED_NODE_S)){ + return null; + } + config.setTaxonNodeConfig(configNodes); } } + + if (allEditorsClosed){ + /*if(! MessageDialog.openConfirm(HandlerUtil.getActiveShell(event), "Confirm Deletion", "Do you really want to delete the selected nodes?")){ + return null; + }*/ + + operation = new DeleteOperation(event.getCommand().getName(), + NavigationUtil.getUndoContext(), + taxonNode, + config, + taxonNavigator, + taxonNavigator, + taxonNavigator); + + NavigationUtil.executeOperation(operation); + + //} + } + + + + } catch (NotDefinedException e) { + MessagingUtils.warn(getClass(), "Command name not set"); //$NON-NLS-1$ + } catch (Exception e){ + MessagingUtils.error(getClass(), e); } + } else{ + try{ + if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(config, HandlerUtil.getActiveShell(event), CONFIRM_DELETION, DO_YOU_REALLY_WANT_TO_DELETE_THE_SELECTED_NODE_S)){ + return null; + } + if (allEditorsClosed){ + + operation = new DeleteOperation(event.getCommand().getName(), + NavigationUtil.getUndoContext(), + treeNodes, + new TaxonDeletionConfigurator(), + taxonNavigator, + taxonNavigator, + taxonNavigator); - } catch (NotDefinedException e) { - NavigationUtil.warn(getClass(), "Command name not set"); + NavigationUtil.executeOperation(operation); + + } + }catch (NotDefinedException e) { + MessagingUtils.warn(getClass(), Messages.DeleteHandler_9); + } catch (Exception e){ + MessagingUtils.error(getClass(), e); + } } return null; } - private void closeObsoleteEditor(TaxonNode taxonNode){ + protected boolean closeObsoleteEditor(TaxonNode taxonNode){ + boolean result = true; for (IEditorReference ref : activePage.getEditorReferences()) { try { + String treeIndex = ((ITreeNode)taxonNode).treeIndex(); + + IEditorInput input = ref.getEditorInput(); if (input instanceof TaxonEditorInput) { TaxonNode node = ((TaxonEditorInput) input).getTaxonNode(); - if (taxonNode.equals(node)) { - activePage.closeEditor(ref.getEditor(false), false); + //if node is a child of taxonNode then close the editor + if( ((ITreeNode) node).treeIndex().startsWith(treeIndex)){ + //if (taxonNode.equals(node)) { + result &= activePage.closeEditor(ref.getEditor(false), true); + } } } catch (PartInitException e) { continue; } } + return result; } }