Merge branch 'release/5.18.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / operation / ChangeSynonymToAcceptedTaxonOperation.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.taxeditor.editor.name.operation;
11
12 import java.util.Set;
13
14 import org.eclipse.core.commands.ExecutionException;
15 import org.eclipse.core.commands.operations.IUndoContext;
16 import org.eclipse.core.runtime.IAdaptable;
17 import org.eclipse.core.runtime.IProgressMonitor;
18 import org.eclipse.core.runtime.IStatus;
19
20 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
21 import eu.etaxonomy.cdm.api.service.ITaxonService;
22 import eu.etaxonomy.cdm.api.service.UpdateResult;
23 import eu.etaxonomy.cdm.api.service.exception.HomotypicalGroupChangeException;
24 import eu.etaxonomy.cdm.model.name.TaxonName;
25 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
26 import eu.etaxonomy.cdm.model.taxon.Synonym;
27 import eu.etaxonomy.cdm.model.taxon.Taxon;
28 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
29 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
30 import eu.etaxonomy.taxeditor.model.MessagingUtils;
31 import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation;
32 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
33 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
34 import eu.etaxonomy.taxeditor.store.CdmStore;
35
36 /**
37 * Change the taxonomic parent of a given taxon.
38 *
39 * @author n.hoffmann
40 * @created 16.01.2009
41 */
42 public class ChangeSynonymToAcceptedTaxonOperation extends AbstractPersistentPostOperation {
43
44 private final Synonym synonym;
45 private final ITaxonTreeNode parentNode;
46
47 private TaxonNode newNode;
48
49 //private final Set<TaxonName> namesInHomotypicGroup;
50
51 /**
52 * <p>Constructor for ChangeSynonymToAcceptedTaxonOperation.</p>
53 *
54 * @param label a {@link java.lang.String} object.
55 * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
56 * @param taxon a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
57 * @param parentNode a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
58 * @param synonym a {@link eu.etaxonomy.cdm.model.taxon.Synonym} object.
59 * @param synonymsInHomotypicalGroup an array of {@link eu.etaxonomy.cdm.model.taxon.Synonym} objects.
60 * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
61 * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object.
62 */
63 public ChangeSynonymToAcceptedTaxonOperation(String label,
64 IUndoContext undoContext,
65 Taxon taxon,
66 ITaxonTreeNode parentNode,
67 Synonym synonym,
68 Set<TaxonName> namesInHomotypicalGroup,
69 IPostOperationEnabled postOperationEnabled,
70 IConversationEnabled conversationEnabled,
71 ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
72 super(label, undoContext, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled);
73
74 this.element = taxon;
75 this.parentNode = parentNode;
76 this.synonym = synonym;
77 //this.namesInHomotypicGroup = namesInHomotypicalGroup;
78 }
79
80 @Override
81 public IStatus execute(IProgressMonitor monitor, IAdaptable info)
82 throws ExecutionException {
83
84
85 UpdateResult result;
86 try {
87 result = CdmStore.getService(ITaxonService.class).changeSynonymToAcceptedTaxon(synonym.getUuid(),
88 element.getUuid(),
89 parentNode.getUuid(),
90 true);
91 if (result.isAbort()){
92
93 MessagingUtils.warningDialog(Messages.ChangeSynonymToAcceptedTaxonOperation_INCONSISTENT_DATA, getClass(), result.toString());
94 return postExecute(null);
95 }
96 newNode = (TaxonNode) result.getCdmEntity();
97 if (!newNode.getTaxon().getSec().equals(newNode.getParent().getTaxon().getSec())){
98 MessagingUtils.warningDialog(Messages.ChangeSynonymToAcceptedTaxonOperation_DifferentSec, getClass(), Messages.ChangeSynonymToAcceptedTaxonOperation_DifferentSec_Message);
99
100 }
101 } catch (HomotypicalGroupChangeException e) {
102 // TODO Auto-generated catch block
103 e.printStackTrace();
104 }
105
106
107 monitor.worked(20);
108 //newTaxon = (Taxon) CdmStore.getService(ITaxonService.class).merge(newTaxon);
109 //element.removeSynonym(synonym);
110
111
112 /*if(namesInHomotypicGroup != null){
113 Taxon taxon = newNode.getTaxon();
114 for (TaxonNameBase synonymName : namesInHomotypicGroup){
115 taxon.addHomotypicSynonymName(synonymName, null, null);
116
117 }
118 }*/
119 //newNode = CdmStore.getService(ITaxonNodeService.class).merge(newNode);
120
121 monitor.worked(40);
122
123 return postExecute(newNode);
124 }
125
126 @Override
127 public IStatus redo(IProgressMonitor monitor, IAdaptable info)
128 throws ExecutionException {
129 return execute(monitor, info);
130 }
131
132 @Override
133 public IStatus undo(IProgressMonitor monitor, IAdaptable info)
134 throws ExecutionException {
135
136 // TODO implement - biggest problem is that any window open for new taxon must be closed first
137 MessagingUtils.warn(this.getClass(), Messages.ChangeSynonymToAcceptedTaxonOperation_NOT_IMPLEMENTED);
138
139 return postExecute(element);
140 }
141
142 }