ref #9668: hotfix for secundum handling when swap syn and accepted
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / operation / SwapSynonymAndAcceptedOperation.java
index 67aec56b955e198c3079b0af92aeebf92b6356f9..87b5ed73be6ce128bc01b670461b5c69be89c695 100644 (file)
@@ -9,7 +9,9 @@
 package eu.etaxonomy.taxeditor.editor.name.operation;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.operations.IUndoContext;
@@ -19,8 +21,12 @@ import org.eclipse.core.runtime.IStatus;
 
 import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
+import eu.etaxonomy.cdm.model.media.ExternalLink;
+import eu.etaxonomy.cdm.model.media.ExternalLinkType;
+import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation;
@@ -62,12 +68,40 @@ public class SwapSynonymAndAcceptedOperation extends AbstractPostTaxonOperation
                        throws ExecutionException {
 
                monitor.worked(20);
-
                UpdateResult result = CdmStore.getService(ITaxonService.class).swapSynonymAndAcceptedTaxon(synonym.getUuid(), element.getUuid(), setNameInSource, false);//TODO
-               element = (Taxon)result.getCdmEntity();
-               List<String> propertyPath = new ArrayList<>();
-               propertyPath.add("synonyms");
+               element = (Taxon)CdmStore.getService(ITaxonService.class).load(result.getCdmEntity().getUuid());
+               Synonym newSyn = null;
+               if (!result.getUpdatedObjects().isEmpty()){
+                   newSyn = (Synonym)CdmStore.getService(ITaxonService.class).load(result.getUpdatedObjects().iterator().next().getUuid());
+               }
+               Reference accRef = element.getSec();
+               String accMicroRef = element.getSecMicroReference();
+               Set<ExternalLink> accLinks = new HashSet<>();
+
+               for (ExternalLink link: element.getSecSource().getLinks()){
+            accLinks.add(ExternalLink.NewInstance(ExternalLinkType.Unknown, link.getUri()));
+        }
+               if (newSyn != null ){
+               element.setSec(newSyn.getSec());
+               element.setSecMicroReference(newSyn.getSecMicroReference());
+               element.getSecSource().getLinks().clear();
+               for (ExternalLink link: newSyn.getSecSource().getLinks()){
+                   element.getSecSource().addLink(ExternalLink.NewInstance(ExternalLinkType.Unknown, link.getUri()));
+               }
+               newSyn.setSec(accRef);
+               newSyn.setSecMicroReference(accMicroRef);
+               newSyn.getSecSource().getLinks().clear();
+               for (ExternalLink link: accLinks){
+                newSyn.getSecSource().addLink(link);
+            }
+               }
+
+
+               List<TaxonBase> mergeList = new ArrayList<>();
+               mergeList.add(element);
+               mergeList.add(newSyn);
 
+               CdmStore.getService(ITaxonService.class).merge(mergeList, true);
                monitor.worked(40);
 
                return postExecute(element);