Revision e13687ce
Added by Andreas Müller over 2 years ago
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/SwapSynonymAndAcceptedOperation.java | ||
---|---|---|
10 | 10 |
|
11 | 11 |
import java.util.ArrayList; |
12 | 12 |
import java.util.HashSet; |
13 |
import java.util.Iterator; |
|
14 | 13 |
import java.util.List; |
15 | 14 |
import java.util.Set; |
16 | 15 |
|
... | ... | |
24 | 23 |
import eu.etaxonomy.cdm.api.service.UpdateResult; |
25 | 24 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
26 | 25 |
import eu.etaxonomy.cdm.model.media.ExternalLink; |
27 |
import eu.etaxonomy.cdm.model.media.ExternalLinkType; |
|
28 | 26 |
import eu.etaxonomy.cdm.model.reference.Reference; |
29 | 27 |
import eu.etaxonomy.cdm.model.taxon.Synonym; |
30 | 28 |
import eu.etaxonomy.cdm.model.taxon.Taxon; |
... | ... | |
71 | 69 |
|
72 | 70 |
monitor.worked(20); |
73 | 71 |
UpdateResult result = CdmStore.getService(ITaxonService.class).swapSynonymAndAcceptedTaxon(synonym.getUuid(), element.getUuid(), setNameInSource, false);//TODO |
74 |
// element = (Taxon) result.getCdmEntity();
|
|
75 |
element = (Taxon)CdmStore.getService(ITaxonService.class).load(result.getCdmEntity().getUuid());
|
|
72 |
//note: without reload a multiple representations exceptions appears, not yet tested why
|
|
73 |
Taxon newTaxon = (Taxon)CdmStore.getService(ITaxonService.class).load(result.getCdmEntity().getUuid());
|
|
76 | 74 |
Synonym newSyn = null; |
77 |
if (!result.getUpdatedObjects().isEmpty()){ |
|
78 |
Iterator<CdmBase> it = result.getUpdatedObjects().iterator(); |
|
79 |
while(it.hasNext()){ |
|
80 |
CdmBase tb = it.next(); |
|
81 |
if (tb instanceof Synonym){ |
|
82 |
newSyn = (Synonym)tb; |
|
83 |
} |
|
75 |
for (CdmBase cdmBase : result.getUpdatedObjects()){ |
|
76 |
if (cdmBase instanceof Synonym){ |
|
77 |
newSyn = (Synonym)cdmBase; |
|
78 |
} |
|
79 |
} |
|
80 |
|
|
81 |
//for some reason simple cloning of the secundum source does not work if external links exist (throws exception because an OriginalSourceBase_id in an AuditTable (probably OriginalSourceBase_ExternalLink) becomes null) |
|
82 |
|
|
83 |
//remember oldAcc secSource info |
|
84 |
Reference oldAccRef = newTaxon.getSec(); |
|
85 |
String oldAccMicroRef = newTaxon.getSecMicroReference(); |
|
86 |
Set<ExternalLink> oldAccLinks = new HashSet<>(); |
|
87 |
if (newTaxon.getSecSource()!= null){ |
|
88 |
for (ExternalLink link: newTaxon.getSecSource().getLinks()){ |
|
89 |
oldAccLinks.add(link.clone()); |
|
84 | 90 |
} |
85 |
newSyn = (Synonym)CdmStore.getService(ITaxonService.class).load(result.getUpdatedObjects().iterator().next().getUuid()); |
|
86 | 91 |
} |
87 |
Reference accRef = element.getSec(); |
|
88 |
String accMicroRef = element.getSecMicroReference(); |
|
89 |
Set<ExternalLink> accLinks = new HashSet<>(); |
|
90 | 92 |
|
91 |
for (ExternalLink link: element.getSecSource().getLinks()){ |
|
92 |
accLinks.add(ExternalLink.NewInstance(ExternalLinkType.Unknown, link.getUri())); |
|
93 |
} |
|
94 | 93 |
if (newSyn != null ){ |
95 |
element.setSec(newSyn.getSec()); |
|
96 |
element.setSecMicroReference(newSyn.getSecMicroReference()); |
|
97 |
element.getSecSource().getLinks().clear(); |
|
98 |
for (ExternalLink link: newSyn.getSecSource().getLinks()){ |
|
99 |
element.getSecSource().addLink(ExternalLink.NewInstance(ExternalLinkType.Unknown, link.getUri())); |
|
94 |
//adapt new taxon secSource info |
|
95 |
newTaxon.setSec(newSyn.getSec()); |
|
96 |
newTaxon.setSecMicroReference(newSyn.getSecMicroReference()); |
|
97 |
if (newTaxon.getSecSource() != null){ |
|
98 |
newTaxon.getSecSource().getLinks().clear(); |
|
99 |
if (newSyn.getSecSource() != null){ |
|
100 |
for (ExternalLink link: newSyn.getSecSource().getLinks()){ |
|
101 |
newTaxon.getSecSource().addLink(link.clone()); |
|
102 |
} |
|
103 |
} |
|
100 | 104 |
} |
101 |
newSyn.setSec(accRef); |
|
102 |
newSyn.setSecMicroReference(accMicroRef); |
|
103 |
newSyn.getSecSource().getLinks().clear(); |
|
104 |
for (ExternalLink link: accLinks){ |
|
105 |
newSyn.getSecSource().addLink(link); |
|
106 |
} |
|
107 |
} |
|
108 | 105 |
|
106 |
//adapt new synonym secSource info |
|
107 |
newSyn.setSec(oldAccRef); |
|
108 |
newSyn.setSecMicroReference(oldAccMicroRef); |
|
109 |
if (newSyn.getSecSource()!= null){ |
|
110 |
newSyn.getSecSource().getLinks().clear(); |
|
111 |
for (ExternalLink link: oldAccLinks){ |
|
112 |
newSyn.getSecSource().addLink(link); |
|
113 |
} |
|
114 |
} |
|
115 |
} |
|
109 | 116 |
|
110 | 117 |
List<TaxonBase> mergeList = new ArrayList<>(); |
111 |
mergeList.add(element);
|
|
118 |
mergeList.add(newTaxon);
|
|
112 | 119 |
mergeList.add(newSyn); |
113 | 120 |
|
114 | 121 |
CdmStore.getService(ITaxonService.class).merge(mergeList, true); |
115 | 122 |
monitor.worked(40); |
116 | 123 |
|
117 |
return postExecute(element);
|
|
124 |
return postExecute(newTaxon);
|
|
118 | 125 |
} |
119 | 126 |
|
120 | 127 |
@Override |
Also available in: Unified diff
ref #9668 fix CCE due to unordered result.getUpdatedObjects() and NPE due to missing secSources and some cleanup and javadoc