Merge branch 'release/4.6.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / handler / RemotingDeleteTaxonNodeHandler.java
1 /**
2 * Copyright (C) 2015 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.taxeditor.navigation.navigator.handler;
10
11 import java.util.HashSet;
12 import java.util.Iterator;
13 import java.util.Set;
14
15 import org.eclipse.core.commands.ExecutionEvent;
16 import org.eclipse.core.commands.operations.AbstractOperation;
17 import org.eclipse.core.runtime.IStatus;
18 import org.eclipse.core.runtime.Status;
19 import org.eclipse.jface.dialogs.MessageDialog;
20 import org.eclipse.jface.viewers.TreeSelection;
21 import org.eclipse.ui.IWorkbenchPage;
22 import org.eclipse.ui.handlers.HandlerUtil;
23
24 import eu.etaxonomy.cdm.api.application.CdmApplicationState;
25 import eu.etaxonomy.cdm.api.service.config.NodeDeletionConfigurator.ChildHandling;
26 import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;
27 import eu.etaxonomy.cdm.api.service.config.TaxonNodeDeletionConfigurator;
28 import eu.etaxonomy.cdm.model.taxon.Classification;
29 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
30 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
31 import eu.etaxonomy.taxeditor.editor.EditorUtil;
32 import eu.etaxonomy.taxeditor.model.MessagingUtils;
33 import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
34 import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigatorLabels;
35 import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingDeleteTaxonNodeOperation;
36 import eu.etaxonomy.taxeditor.operation.RemotingCdmHandler;
37 import eu.etaxonomy.taxeditor.ui.dialog.configurator.deleteConfigurator.DeleteConfiguratorDialog;
38
39 /**
40 * @author cmathew
41 * @date 22 Jun 2015
42 *
43 */
44 public class RemotingDeleteTaxonNodeHandler extends RemotingCdmHandler {
45
46 private TaxonDeletionConfigurator config;
47 private Set<ITaxonTreeNode> treeNodes;
48
49 public RemotingDeleteTaxonNodeHandler() {
50 super(TaxonNavigatorLabels.DELETE_TAXON_NODE_LABEL);
51 }
52
53 @Override
54 public IStatus allowOperations(ExecutionEvent event) {
55 TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event);
56
57 Iterator<?> selectionIterator = selection.iterator();
58 treeNodes = new HashSet<ITaxonTreeNode>();
59
60 while (selectionIterator.hasNext()){
61 Object object = selectionIterator.next();
62 if(object instanceof ITaxonTreeNode) {
63 treeNodes.add((ITaxonTreeNode) object);
64 }
65 }
66 boolean allEditorsClosed = true;
67 IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
68 for (ITaxonTreeNode treeNode : treeNodes) {
69 if(treeNode instanceof TaxonNode) {
70 allEditorsClosed &= EditorUtil.closeObsoleteEditor((TaxonNode) treeNode, activePage);
71 }
72 }
73 if(!allEditorsClosed) {
74 return new Status(IStatus.WARNING,
75 "unknown", //$NON-NLS-1$
76 TaxonNavigatorLabels.RELATED_EDITOR_NOT_CLOSED_MESSAGE);
77 }
78
79 config = new TaxonDeletionConfigurator();
80
81 if (treeNodes.size() == 1 ){
82 ITaxonTreeNode treeNode = treeNodes.iterator().next();
83 ITaxonTreeNode taxonNode = treeNode;
84 if (taxonNode instanceof Classification){
85 taxonNode = CdmApplicationState.getCurrentAppConfig().getClassificationService().load(taxonNode.getUuid());
86 }else{
87 taxonNode = CdmApplicationState.getCurrentAppConfig().getTaxonNodeService().load(taxonNode.getUuid());
88 }
89 if (taxonNode == null){
90 MessagingUtils.informationDialog(Messages.RemotingDeleteTaxonNodeHandler_NODE_DELETED, Messages.RemotingDeleteTaxonNodeHandler_NODE_DELETED_MESSAGE);
91 return Status.CANCEL_STATUS;
92
93 }
94 TaxonNodeDeletionConfigurator configNodes = new TaxonNodeDeletionConfigurator();
95 if (taxonNode instanceof Classification) {
96 String message;
97 if (taxonNode.hasChildNodes()) {
98 message = DeleteHandler.DO_YOU_REALLY_WANT_TO_DELETE_THE_CLASSIFICATION+DeleteHandler.THE_TREE_HAS_CHILDREN_THEY_WILL_BE_DELETED_TOO;
99 } else {
100 message = DeleteHandler.DO_YOU_REALLY_WANT_TO_DELETE_THE_CLASSIFICATION;
101 }
102 if (!DeleteConfiguratorDialog.openConfirm(
103 HandlerUtil.getActiveShell(event), DeleteHandler.CONFIRM_DELETION,
104 message)) {
105 return Status.CANCEL_STATUS;
106 }
107 }
108 else {
109
110 if (taxonNode.hasChildNodes()){
111 DeleteConfiguratorDialog dialog = new DeleteConfiguratorDialog(
112 config,
113 HandlerUtil.getActiveShell(event),
114 DeleteHandler.CONFIRM_DELETION,
115 null,
116 DeleteHandler.DO_YOU_REALLY_WANT_TO_DELETE_THE_SELECTED_NODE_S+DeleteHandler.THERE_ARE_CHILDNODES_WHICH_WILL_BE_DELETED_TOO,
117 MessageDialog.WARNING, new String[] { DeleteHandler.DELETE_ALL_CHILDREN,
118 DeleteHandler.MOVE_CHILDREN_TO_PARENT_NODE, DeleteHandler.SKIP }, 0);
119 int result = dialog.open();
120
121 if (result == 0){
122 //delete all children
123 configNodes.setChildHandling(ChildHandling.DELETE);
124 config.setTaxonNodeConfig(configNodes);
125 } else if (result == 1){
126 //move children
127 configNodes.setChildHandling(ChildHandling.MOVE_TO_PARENT);
128 config.setTaxonNodeConfig(configNodes);
129 } else if (result == 2){
130 return Status.CANCEL_STATUS;
131 }
132 } else{
133 if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(configNodes, HandlerUtil.getActiveShell(event), DeleteHandler.CONFIRM_DELETION, DeleteHandler.DO_YOU_REALLY_WANT_TO_DELETE_THE_SELECTED_NODE_S)){
134 return Status.CANCEL_STATUS;
135 }
136 config.setTaxonNodeConfig(configNodes);
137 }
138 }
139 }
140 return Status.OK_STATUS;
141 }
142
143 @Override
144 public AbstractOperation prepareOperation(ExecutionEvent event) {
145 return new RemotingDeleteTaxonNodeOperation(event.getTrigger(),
146 false,
147 treeNodes,
148 config);
149 }
150
151 @Override
152 public void onComplete() {
153 }
154
155 }