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