Merge branch 'release/4.0.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / operation / MoveSynonymToAnotherAcceptedTaxonOperation.java
1 package eu.etaxonomy.taxeditor.editor.name.operation;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.UUID;
6
7 import org.eclipse.core.commands.ExecutionException;
8 import org.eclipse.core.commands.operations.IUndoContext;
9 import org.eclipse.core.runtime.IAdaptable;
10 import org.eclipse.core.runtime.IProgressMonitor;
11 import org.eclipse.core.runtime.IStatus;
12
13 import eu.etaxonomy.cdm.api.service.ITaxonService;
14 import eu.etaxonomy.cdm.api.service.UpdateResult;
15 import eu.etaxonomy.cdm.api.service.exception.HomotypicalGroupChangeException;
16 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
17 import eu.etaxonomy.cdm.model.taxon.Synonym;
18 import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;
19 import eu.etaxonomy.cdm.model.taxon.Taxon;
20 import eu.etaxonomy.taxeditor.editor.EditorUtil;
21 import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
22 import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation;
23 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
24 import eu.etaxonomy.taxeditor.store.CdmStore;
25
26 public class MoveSynonymToAnotherAcceptedTaxonOperation extends
27 AbstractPostTaxonOperation {
28
29 /**
30 * The synonym to be moved.
31 */
32 private final Synonym synonym;
33
34 private final Taxon oldTaxon;
35
36
37 /**
38 * <p>Constructor for MoveSynonymToAnotherAcceptedTaxon.</p>
39 *
40 * @param label a {@link java.lang.String} object.
41 * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
42 * @param taxon a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
43 * @param synonym a {@link eu.etaxonomy.cdm.model.taxon.Synonym} object.
44
45 * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
46 */
47 public MoveSynonymToAnotherAcceptedTaxonOperation(String label, IUndoContext undoContext,
48 UUID oldTaxonUUID, UUID synonymUUID, Taxon taxon, IPostOperationEnabled postOperationEnabled) {
49
50 super(label, undoContext, taxon, postOperationEnabled);
51 List<String> propertyPaths = new ArrayList<String>();
52 propertyPaths.add("synonymRelations");
53 this.element = (Taxon) CdmStore.getService(ITaxonService.class).load(taxon.getUuid(),propertyPaths);
54 this.oldTaxon = (Taxon) CdmStore.getService(ITaxonService.class).load(oldTaxonUUID);
55 this.synonym = (Synonym) CdmStore.getService(ITaxonService.class).load(synonymUUID);
56 if(synonym == null){
57 throw new IllegalArgumentException(
58 "A null synonym was provided.");
59 }
60 }
61
62 @Override
63 public IStatus execute(IProgressMonitor monitor, IAdaptable info)
64 throws ExecutionException {
65
66 // Get synonym name
67 TaxonNameBase<?, ?> synonymName = synonym.getName();
68 monitor.worked(20);
69
70
71
72 // Switch groups
73
74 monitor.worked(40);
75 SynonymRelationship synRel = synonym.getSynonymRelations().iterator().next();
76
77
78
79 ((TaxonNameEditor)EditorUtil.getActiveMultiPageTaxonEditor().getActiveEditor()).getConversationHolder().commit();
80 UpdateResult result;
81
82
83 try {
84 result = CdmStore.getService(ITaxonService.class).moveSynonymToAnotherTaxon(synRel,
85 this.element.getUuid(),
86 true,
87 synRel.getType(),
88 null,
89 null,
90 true);
91 } catch (HomotypicalGroupChangeException e) {
92 // TODO Auto-generated catch block
93 e.printStackTrace();
94 }
95 ((TaxonNameEditor)EditorUtil.getActiveMultiPageTaxonEditor().getActiveEditor()).getConversationHolder().commit();
96
97
98
99 // Redraw editor if it exists
100 return postExecute(synRel.getSynonym());
101 }
102
103 @Override
104 public IStatus redo(IProgressMonitor monitor, IAdaptable info)
105 throws ExecutionException {
106 // TODO Auto-generated method stub
107 return null;
108 }
109
110 @Override
111 public IStatus undo(IProgressMonitor monitor, IAdaptable info)
112 throws ExecutionException {
113 // TODO Auto-generated method stub
114 return null;
115 }
116
117 }