ca896c33cba837baa77c6de12e9148c2496a6325
[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.dialogs.filteredSelection.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), editor.getConversationHolder(), "Choose the accepted taxon", excludeTaxa, null, null);
61
62 if (newAcceptedTaxonNode == null) {
63 return null;
64 }
65
66 newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();
67
68 try {
69 operation = new ChangeAcceptedTaxonToSynonymOperation(event.getCommand().getName(),
70 editor.getUndoContext(), oldAcceptedTaxonNode, newAcceptedTaxonNode, this, editor);
71 EditorUtil.executeOperation(operation);
72
73 } catch (NotDefinedException e) {
74 logger.warn("Command name not set");
75 }
76
77 return null;
78
79 }
80
81 /* (non-Javadoc)
82 * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
83 */
84 /** {@inheritDoc} */
85 public boolean postOperation(CdmBase objectAffectedByOperation) {
86 Display.getDefault().asyncExec(new Runnable(){
87
88 public void run() {
89 EditorUtil.close(editor.getMultiPageTaxonEditor());
90
91 try {
92 MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);
93 if(possibleOpenEditor != null){
94 EditorUtil.close(possibleOpenEditor);
95 }
96 EditorUtil.openTaxonNode(newAcceptedTaxonNodeUuid);
97 } catch (PartInitException e) {
98 EditorUtil.error(this.getClass(), e);
99 throw new RuntimeException(e);
100 } catch (Exception e) {
101 EditorUtil.warningDialog("Could not create Taxon", this, e.getMessage());
102 }
103 }
104
105 });
106
107
108 return true;
109 }
110
111 /**
112 * <p>onComplete</p>
113 *
114 * @return a boolean.
115 */
116 public boolean onComplete() {
117 // TODO Auto-generated method stub
118 return false;
119 }
120 }