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;
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;
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);