ref #9710: update the dtos after merge
authorKatja Luther <k.luther@bgbm.org>
Tue, 17 Aug 2021 12:15:53 +0000 (14:15 +0200)
committerKatja Luther <k.luther@bgbm.org>
Tue, 17 Aug 2021 12:15:53 +0000 (14:15 +0200)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixPart.java

index 147bedd8d6a6c0fb59d6e063e200fd7276406616..8b64b8b3579dea44ee03b00c59e66a644eba422f 100644 (file)
@@ -15,6 +15,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.UUID;
 import java.util.stream.Collectors;
 
@@ -53,6 +54,7 @@ import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.term.TermType;
+import eu.etaxonomy.cdm.persistence.dto.MergeResult;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;
 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
@@ -200,7 +202,7 @@ public class CharacterMatrixPart implements IE4SavablePart, IConversationEnabled
     public void save(IProgressMonitor monitor) {
 
 
-        matrix.addSpecimensToDescriptiveDataSet();
+        HashMap<UUID, DescriptionBase> descriptionResults = matrix.addSpecimensToDescriptiveDataSet();
         //newly added descriptions should not be saved again.
 //        descriptions.removeAll(matrix.getRowsToSave().values());
         // save edited descriptions
@@ -216,12 +218,20 @@ public class CharacterMatrixPart implements IE4SavablePart, IConversationEnabled
             matrix.getDescriptionsToDelete().clear();
 
         }
-        CdmStore.getService(IDescriptionService.class).merge(new ArrayList<>(matrix.getDescriptionsToSave()), true);
+
+        List<MergeResult<DescriptionBase>> resultsFromSave = CdmStore.getService(IDescriptionService.class).merge(new ArrayList<>(matrix.getDescriptionsToSave()), true);
+        for (MergeResult<DescriptionBase> result: resultsFromSave){
+            Set<DescriptionBase> newEntities = result.getNewEntities();
+            for(DescriptionBase newEntity: newEntities){
+                descriptionResults.put(newEntity.getUuid(), newEntity);
+            }
+
+        }
         matrix.getDescriptionsToSave().clear();
         UpdateResult results = CdmStore.getService(IDescriptionService.class).mergeDescriptions(descriptionsToMerge, matrix.getDescriptiveDataSet().getUuid());
         matrix.getRowsToMerge().clear();
         conversation.commit();
-        HashMap<UUID, DescriptionBase> descriptionResults = new HashMap<>();
+
         for (CdmBase result: results.getUpdatedObjects()){
             if (result instanceof DescriptionBase){
                 descriptionResults.put(result.getUuid(), (DescriptionBase)result);