ref #6190 removing svn property place holder in first line of code - java files
[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.navigator.TaxonNavigatorLabels;
34 import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingDeleteTaxonNodeOperation;
35 import eu.etaxonomy.taxeditor.operation.RemotingCdmHandler;
36 import eu.etaxonomy.taxeditor.ui.dialog.deleteConfigurator.DeleteConfiguratorDialog;
37
38 /**
39 * @author cmathew
40 * @date 22 Jun 2015
41 *
42 */
43 public class RemotingDeleteTaxonNodeHandler extends RemotingCdmHandler {
44
45 private TaxonDeletionConfigurator config;
46 private Set<ITaxonTreeNode> treeNodes;
47
48 public RemotingDeleteTaxonNodeHandler() {
49 super(TaxonNavigatorLabels.DELETE_TAXON_NODE_LABEL);
50 }
51
52 @Override
53 public IStatus allowOperations(ExecutionEvent event) {
54 TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event);
55
56 Iterator<?> selectionIterator = selection.iterator();
57 treeNodes = new HashSet<ITaxonTreeNode>();
58
59 while (selectionIterator.hasNext()){
60 Object object = selectionIterator.next();
61 if(object instanceof ITaxonTreeNode) {
62 treeNodes.add((ITaxonTreeNode) object);
63 }
64 }
65 boolean allEditorsClosed = true;
66 IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
67 for (ITaxonTreeNode treeNode : treeNodes) {
68 if(treeNode instanceof TaxonNode) {
69 allEditorsClosed &= EditorUtil.closeObsoleteEditor((TaxonNode) treeNode, activePage);
70 }
71 }
72 if(!allEditorsClosed) {
73 return new Status(IStatus.WARNING,
74 "unknown",
75 TaxonNavigatorLabels.RELATED_EDITOR_NOT_CLOSED_MESSAGE);
76 }
77
78 config = new TaxonDeletionConfigurator();
79
80 if (treeNodes.size() == 1 ){
81 ITaxonTreeNode treeNode = treeNodes.iterator().next();
82 ITaxonTreeNode taxonNode = treeNode;
83 if (taxonNode instanceof Classification){
84 taxonNode = CdmApplicationState.getCurrentAppConfig().getClassificationService().load(taxonNode.getUuid());
85 }else{
86 taxonNode = CdmApplicationState.getCurrentAppConfig().getTaxonNodeService().load(taxonNode.getUuid());
87 }
88 if (taxonNode == null){
89 MessagingUtils.informationDialog("Node already deleted", "The taxon node was already deleted. Please reopen the taxon navigator to refresh the view.");
90 return Status.CANCEL_STATUS;
91
92 }
93 TaxonNodeDeletionConfigurator configNodes = new TaxonNodeDeletionConfigurator();
94 if (taxonNode instanceof Classification) {
95 String message;
96 if (taxonNode.hasChildNodes()) {
97 message = "Do you really want to delete the classification? The tree has children, they will be deleted, too.";
98 } else {
99 message = "Do you really want to delete the classification?";
100 }
101 if (!DeleteConfiguratorDialog.openConfirm(
102 HandlerUtil.getActiveShell(event), "Confirm Deletion",
103 message)) {
104 return Status.CANCEL_STATUS;
105 }
106 }
107 else {
108
109 if (taxonNode.hasChildNodes()){
110 DeleteConfiguratorDialog dialog = new DeleteConfiguratorDialog(
111 config,
112 HandlerUtil.getActiveShell(event),
113 "Confirm Deletion",
114 null,
115 "Do you really want to delete the selected node? It has childnodes, they will be deleted, too.",
116 MessageDialog.WARNING, new String[] { "Delete all children",
117 "Move children to parent node", "Skip" }, 0);
118 int result = dialog.open();
119
120 if (result == 0){
121 //delete all children
122 configNodes.setChildHandling(ChildHandling.DELETE);
123 config.setTaxonNodeConfig(configNodes);
124 } else if (result == 1){
125 //move children
126 configNodes.setChildHandling(ChildHandling.MOVE_TO_PARENT);
127 config.setTaxonNodeConfig(configNodes);
128 } else if (result == 2){
129 return Status.CANCEL_STATUS;
130 }
131 } else{
132 if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(configNodes, HandlerUtil.getActiveShell(event), "Confirm Deletion", "Do you really want to delete the selected node?")){
133 return Status.CANCEL_STATUS;
134 }
135 config.setTaxonNodeConfig(configNodes);
136 }
137 }
138 }
139 return Status.OK_STATUS;
140 }
141
142 @Override
143 public AbstractOperation prepareOperation(ExecutionEvent event) {
144 return new RemotingDeleteTaxonNodeOperation(event.getTrigger(),
145 false,
146 treeNodes,
147 config);
148 }
149
150 @Override
151 public void onComplete() {
152 }
153
154 }