selected classification is set by default to the classification of the selected taxon...
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / handler / ChangeAcceptedTaxonToSynonymHandler.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.editor.name.handler;
5
6 import java.util.ArrayList;
7 import java.util.List;
8 import java.util.UUID;
9
10 import org.apache.log4j.Logger;
11 import org.eclipse.core.commands.AbstractHandler;
12 import org.eclipse.core.commands.ExecutionEvent;
13 import org.eclipse.core.commands.ExecutionException;
14 import org.eclipse.core.commands.IHandler;
15 import org.eclipse.core.commands.common.NotDefinedException;
16 import org.eclipse.swt.widgets.Display;
17 import org.eclipse.ui.PartInitException;
18 import org.eclipse.ui.handlers.HandlerUtil;
19
20 import eu.etaxonomy.cdm.model.common.CdmBase;
21 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
22 import eu.etaxonomy.taxeditor.editor.EditorUtil;
23 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
24 import eu.etaxonomy.taxeditor.editor.Page;
25 import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
26 import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
27 import eu.etaxonomy.taxeditor.editor.name.operation.ChangeAcceptedTaxonToSynonymOperation;
28 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
29 import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
30
31 /**
32 * <p>ChangeAcceptedTaxonToSynonymHandler class.</p>
33 *
34 * @author n.hoffmann
35 * @created Jan 4, 2010
36 * @version 1.0
37 */
38 public class ChangeAcceptedTaxonToSynonymHandler extends AbstractHandler
39 implements IHandler, IPostOperationEnabled {
40 private static final Logger logger = Logger
41 .getLogger(ChangeAcceptedTaxonToSynonymHandler.class);
42 private ChangeAcceptedTaxonToSynonymOperation operation;
43
44 private UUID newAcceptedTaxonNodeUuid;
45 private TaxonNameEditor editor;
46
47 /* (non-Javadoc)
48 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
49 */
50 /** {@inheritDoc} */
51 public Object execute(ExecutionEvent event) throws ExecutionException {
52
53 editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(
54 Page.NAME);
55 TaxonNode oldAcceptedTaxonNode = ((TaxonEditorInput) editor.getEditorInput()).getTaxonNode();
56
57 // Choose new accepted taxon
58 List<UUID> excludeTaxa = new ArrayList<UUID>();
59 excludeTaxa.add(oldAcceptedTaxonNode.getUuid());
60 TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event),
61 editor.getConversationHolder(),
62 "Choose the accepted taxon",
63 excludeTaxa,
64 null,
65 oldAcceptedTaxonNode.getClassification());
66
67 if (newAcceptedTaxonNode == null) {
68 return null;
69 }
70
71 newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();
72
73 try {
74 operation = new ChangeAcceptedTaxonToSynonymOperation(event.getCommand().getName(),
75 editor.getUndoContext(), oldAcceptedTaxonNode, newAcceptedTaxonNode, this, editor);
76 EditorUtil.executeOperation(operation);
77
78 } catch (NotDefinedException e) {
79 logger.warn("Command name not set");
80 }
81
82 return null;
83
84 }
85
86 /* (non-Javadoc)
87 * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
88 */
89 /** {@inheritDoc} */
90 public boolean postOperation(CdmBase objectAffectedByOperation) {
91 Display.getDefault().asyncExec(new Runnable(){
92
93 public void run() {
94 EditorUtil.close(editor.getMultiPageTaxonEditor());
95
96 try {
97 MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);
98 if(possibleOpenEditor != null){
99 EditorUtil.close(possibleOpenEditor);
100 }
101 EditorUtil.openTaxonNode(newAcceptedTaxonNodeUuid);
102 } catch (PartInitException e) {
103 EditorUtil.error(this.getClass(), e);
104 throw new RuntimeException(e);
105 } catch (Exception e) {
106 EditorUtil.warningDialog("Could not create Taxon", this, e.getMessage());
107 }
108 }
109
110 });
111
112
113 return true;
114 }
115
116 /**
117 * <p>onComplete</p>
118 *
119 * @return a boolean.
120 */
121 public boolean onComplete() {
122 // TODO Auto-generated method stub
123 return false;
124 }
125 }