2 * Copyright (C) 2015 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.taxeditor
.navigation
.navigator
.operation
;
11 import java
.util
.HashSet
;
13 import java
.util
.UUID
;
15 import org
.eclipse
.core
.runtime
.IAdaptable
;
16 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
17 import org
.eclipse
.e4
.ui
.model
.application
.MApplication
;
18 import org
.eclipse
.e4
.ui
.model
.application
.ui
.basic
.MPart
;
19 import org
.eclipse
.e4
.ui
.workbench
.modeling
.EPartService
;
20 import org
.eclipse
.swt
.widgets
.Display
;
22 import eu
.etaxonomy
.cdm
.api
.application
.CdmApplicationState
;
23 import eu
.etaxonomy
.cdm
.api
.application
.CdmChangeEvent
.Action
;
24 import eu
.etaxonomy
.cdm
.api
.service
.DeleteResult
;
25 import eu
.etaxonomy
.cdm
.api
.service
.ITaxonNodeService
;
26 import eu
.etaxonomy
.cdm
.api
.service
.UpdateResult
;
27 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
28 import eu
.etaxonomy
.cdm
.model
.metadata
.SecReferenceHandlingEnum
;
29 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
30 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
31 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonNode
;
32 import eu
.etaxonomy
.taxeditor
.editor
.EditorUtil
;
33 import eu
.etaxonomy
.taxeditor
.editor
.name
.e4
.TaxonNameEditorE4
;
34 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
35 import eu
.etaxonomy
.taxeditor
.navigation
.l10n
.Messages
;
36 import eu
.etaxonomy
.taxeditor
.operation
.CdmUpdateOperation
;
44 public class ChangeAcceptedTaxonToSynonymOperation
extends CdmUpdateOperation
{
46 private Set
<UUID
> oldTaxonNodeUuids
= new HashSet();
47 private final UUID newAcceptedTaxonNodeUuid
;
48 private UUID secundumUuid
;
49 private boolean setNameInSource
;
50 private SecReferenceHandlingEnum secHandling
;
51 private DeleteResult deleteResult
;
54 private final static String LABEL
= Messages
.RemotingChangeAcceptedTaxonToSynonymOperation_CHANGE_OP
;
59 public ChangeAcceptedTaxonToSynonymOperation(Object source
,
61 Set
<UUID
> oldTaxonNodeUuids
,
62 UUID newAcceptedTaxonNodeUuid
,
64 SecReferenceHandlingEnum secHandling
,
65 EPartService partService
,
67 MApplication application
,
68 boolean setNameInSource
) {
69 super(LABEL
, Action
.Update
, source
, async
, partService
, activePart
, application
);
70 this.oldTaxonNodeUuids
.addAll(oldTaxonNodeUuids
);
71 this.newAcceptedTaxonNodeUuid
= newAcceptedTaxonNodeUuid
;
72 this.setNameInSource
= setNameInSource
;
73 this.secundumUuid
= newSecUuid
;
74 this.secHandling
= secHandling
;
81 public ChangeAcceptedTaxonToSynonymOperation(Object source
,
83 UUID oldTaxonNodeUuid
,
84 UUID newAcceptedTaxonNodeUuid
,
86 SecReferenceHandlingEnum secHandling
,
87 EPartService partService
,
89 MApplication application
,
90 boolean setNameInSource
) {
91 super(LABEL
, Action
.Update
, source
, async
, partService
, activePart
, application
);
92 this.oldTaxonNodeUuids
.add(oldTaxonNodeUuid
);
93 this.newAcceptedTaxonNodeUuid
= newAcceptedTaxonNodeUuid
;
94 this.setNameInSource
= setNameInSource
;
95 this.secundumUuid
= newSecUuid
;
96 this.secHandling
= secHandling
;
102 public ChangeAcceptedTaxonToSynonymOperation(Object source
,
104 UUID oldTaxonNodeUuid
,
105 UUID newAcceptedTaxonNodeUuid
,
107 SecReferenceHandlingEnum secHandling
,
108 boolean setNameInSource
) {
109 super(LABEL
, Action
.Update
, source
, async
);
110 this.oldTaxonNodeUuids
.add(oldTaxonNodeUuid
);
111 this.newAcceptedTaxonNodeUuid
= newAcceptedTaxonNodeUuid
;
112 this.setNameInSource
= setNameInSource
;
113 this.secundumUuid
= newSecUuid
;
114 this.secHandling
= secHandling
;
118 * @see eu.etaxonomy.taxeditor.operation.CdmUpdateOperation#doUpdateExecute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
121 protected UpdateResult
doUpdateExecute(IProgressMonitor monitor
, IAdaptable info
) throws Exception
{
123 if (this.oldTaxonNodeUuids
.size() == 1){
124 updateResult
= CdmApplicationState
.getService(ITaxonNodeService
.class).makeTaxonNodeASynonymOfAnotherTaxonNode(oldTaxonNodeUuids
.iterator().next(),
125 newAcceptedTaxonNodeUuid
,
130 setNameInSource
);//TODO
132 updateResult
= CdmApplicationState
.getService(ITaxonNodeService
.class).makeTaxonNodeSynonymsOfAnotherTaxonNode(oldTaxonNodeUuids
,
133 newAcceptedTaxonNodeUuid
,
138 setNameInSource
);//TODO
140 boolean oldTaxaPublished
= true;
141 for (CdmBase delObject
:((DeleteResult
)updateResult
).getDeletedObjects()){
142 if (delObject
instanceof TaxonBase
){
143 oldTaxaPublished
&= ((TaxonBase
)delObject
).isPublish();
146 Taxon newTaxon
= null;
147 for (CdmBase updatedObject
: updateResult
.getUpdatedObjects()){
148 if (updatedObject
instanceof Taxon
){
149 for (TaxonNode node
: ((Taxon
)updatedObject
).getTaxonNodes()){
150 if (node
.getUuid().equals(newAcceptedTaxonNodeUuid
)){
151 newTaxon
= (Taxon
)updatedObject
;
158 if (newTaxon
!= null && oldTaxaPublished
!= newTaxon
.isPublish()){
159 MessagingUtils
.warningDialog("Publish flag", null, Messages
.RemotingChangeAcceptedTaxonToSynonym_warning_publish
);
166 private void updateNameEditor(){
167 if (partService
!= null){
168 Display
.getDefault().asyncExec(new Runnable() {
172 for (MPart part
: partService
.getParts()){
173 Object object
= part
.getObject();
174 boolean setFocus
= false;
175 if (part
== activePart
){
178 if (part
.getContributionURI().endsWith("TaxonNameEditorE4")){
181 if (object
instanceof TaxonNameEditorE4
){
182 Set
<TaxonNode
> nodes
= ((TaxonNameEditorE4
)object
).getTaxon().getTaxonNodes();
183 for (TaxonNode node
: nodes
){
184 if (node
.getUuid().equals(newAcceptedTaxonNodeUuid
)){
185 EditorUtil
.updateEditor(node
, (TaxonNameEditorE4
)object
);