ab67cf8c6221f297bd97db55a4176b697e168e5d
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / descriptive / handler / MoveDescriptionToOtherTaxonHandler.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.editor.view.descriptive.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.common.NotDefinedException;
15 import org.eclipse.jface.viewers.ISelection;
16 import org.eclipse.jface.viewers.IStructuredSelection;
17 import org.eclipse.swt.widgets.Display;
18 import org.eclipse.ui.PartInitException;
19 import org.eclipse.ui.handlers.HandlerUtil;
20
21 import eu.etaxonomy.cdm.api.service.IDescriptionService;
22 import eu.etaxonomy.cdm.model.common.CdmBase;
23 import eu.etaxonomy.cdm.model.description.TaxonDescription;
24 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
25 import eu.etaxonomy.taxeditor.editor.EditorUtil;
26 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
27 import eu.etaxonomy.taxeditor.editor.Page;
28 import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
29 import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionToOtherTaxonOperation;
30 import eu.etaxonomy.taxeditor.model.AbstractUtility;
31 import eu.etaxonomy.taxeditor.model.MessagingUtils;
32 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
33 import eu.etaxonomy.taxeditor.store.CdmStore;
34 import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
35
36 /**
37 * <p>ChangeAcceptedTaxonToSynonymHandler class.</p>
38 *
39 * @author a.kohlbecker
40 * @created Okt. 11, 2013
41 * @version 1.0
42 *
43 */
44 public class MoveDescriptionToOtherTaxonHandler extends AbstractHandler
45 implements IPostOperationEnabled {
46 private static final Logger logger = Logger
47 .getLogger(MoveDescriptionToOtherTaxonHandler.class);
48 private MoveDescriptionToOtherTaxonOperation operation;
49
50 private UUID newAcceptedTaxonNodeUuid;
51 private TaxonNameEditor editor;
52
53 /* (non-Javadoc)
54 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
55 */
56 /** {@inheritDoc} */
57 @Override
58 public Object execute(ExecutionEvent event) throws ExecutionException {
59
60 ISelection selection = HandlerUtil.getCurrentSelection(event);
61
62 if(selection instanceof IStructuredSelection){
63
64 List<TaxonDescription> descriptions = new ArrayList<TaxonDescription>();
65
66 IStructuredSelection structuredSelection = (IStructuredSelection) selection;
67
68 for(Object element : structuredSelection.toArray()){
69 if (element instanceof TaxonDescription){
70 UUID uuid = ((TaxonDescription)element).getUuid();
71 descriptions.add((TaxonDescription) CdmStore.getService(IDescriptionService.class).load(uuid, null));
72 }
73 }
74 if(descriptions.size() == 0){
75 return null;
76 }
77
78 // Choose the target taxon
79 List<UUID> excludeTaxa = new ArrayList<UUID>();
80 editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME);
81 excludeTaxa.add(descriptions.get(0).getTaxon().getUuid());
82 TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event),
83 editor.getConversationHolder(),
84 "Choose the accepted taxon",
85 excludeTaxa,
86 null,
87 null);
88
89 if (newAcceptedTaxonNode == null) {
90 return null;
91 }
92
93 newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();
94
95 try {
96 for(TaxonDescription description : descriptions){
97 operation = new MoveDescriptionToOtherTaxonOperation(event.getCommand().getName(),
98 editor.getUndoContext(), description, newAcceptedTaxonNode, this, editor);
99 AbstractUtility.executeOperation(operation);
100 }
101
102 } catch (NotDefinedException e) {
103 logger.warn("Command name not set");
104 }
105 }
106
107 return null;
108
109 }
110
111 /* (non-Javadoc)
112 * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
113 */
114 /** {@inheritDoc} */
115 @Override
116 public boolean postOperation(CdmBase objectAffectedByOperation) {
117 Display.getDefault().asyncExec(new Runnable(){
118
119 @Override
120 public void run() {
121 AbstractUtility.close(editor.getMultiPageTaxonEditor());
122
123 try {
124 MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);
125 if(possibleOpenEditor != null){
126 AbstractUtility.close(possibleOpenEditor);
127 }
128 EditorUtil.openTaxonNode(newAcceptedTaxonNodeUuid);
129 } catch (PartInitException e) {
130 MessagingUtils.error(this.getClass(), e);
131 throw new RuntimeException(e);
132 } catch (Exception e) {
133 MessagingUtils.warningDialog("Could not create Taxon", this, e.getMessage());
134 }
135 }
136
137 });
138
139
140 return true;
141 }
142
143 /**
144 * <p>onComplete</p>
145 *
146 * @return a boolean.
147 */
148 @Override
149 public boolean onComplete() {
150 // TODO Auto-generated method stub
151 return false;
152 }
153 }