ref #7674 Add aggregated description directly to matrix after creation
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / descriptiveDataSet / matrix / CharacterMatrixBottomToolbar.java
index f0a55938800eea747cbf819a471377b0a187b774..4a24e2f7f2d1ae30733aa8f341dffd271b4afdaf 100644 (file)
@@ -10,10 +10,8 @@ package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix;
 
 import java.util.ArrayList;
 import java.util.Collection;
-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;
 
@@ -31,12 +29,14 @@ import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;
+import eu.etaxonomy.cdm.api.service.dto.SpecimenRowWrapperDTO;
+import eu.etaxonomy.cdm.api.service.dto.TaxonRowWrapperDTO;
 import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.cdm.model.description.CategoricalData;
-import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.QuantitativeData;
 import eu.etaxonomy.cdm.model.description.SpecimenDescription;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.cdm.persistence.dto.SpecimenNodeWrapper;
@@ -80,23 +80,25 @@ public class CharacterMatrixBottomToolbar extends Composite{
                 if(dialog.open()==Window.OK){
                     Collection<SpecimenNodeWrapper> wrappers = dialog.getSpecimen();
                     for (SpecimenNodeWrapper wrapper : wrappers) {
-                        SpecimenDescription description = CdmStore.getService(IDescriptiveDataSetService.class)
-                                .findDescriptionForDescriptiveDataSet(matrix.getDescriptiveDataSet().getUuid(),
+                        SpecimenDescription specimenDescription = CdmStore.getService(IDescriptiveDataSetService.class)
+                                .findSpecimenDescription(matrix.getDescriptiveDataSet().getUuid(),
                                         wrapper.getUuidAndTitleCache().getUuid());
-                        // description elements
-                        Map<Feature, DescriptionElementBase> featureToElementMap = new HashMap<>();
-                        Set<DescriptionElementBase> elements = description.getElements();
-                        for (DescriptionElementBase descriptionElementBase : elements) {
-                            Feature feature = descriptionElementBase.getFeature();
-                            featureToElementMap.put(feature, descriptionElementBase);
-                        }
-                        RowWrapperDTO rowWrapper = CdmStore.getService(IDescriptiveDataSetService.class).createSpecimenRowWrapper(description, matrix.getDescriptiveDataSet());
+                        SpecimenRowWrapperDTO rowWrapper = CdmStore.getService(IDescriptiveDataSetService.class)
+                                .createSpecimenRowWrapper(specimenDescription, matrix.getDescriptiveDataSet(), true);
                         if(rowWrapper==null){
-                            error += description;
+                            error += specimenDescription;
                             continue;
                         }
+                        //add specimen description
                         matrix.getDescriptions().add(rowWrapper);
-                        matrix.getDescriptiveDataSet().addDescription(description);
+                        matrix.getDescriptiveDataSet().addDescription(specimenDescription);
+                        matrix.getCdmEntitiySession().load(specimenDescription, true);
+
+                        //add taxon description
+                        TaxonRowWrapperDTO taxonDescription = rowWrapper.getDefaultTaxonDescription();
+                        matrix.getDescriptiveDataSet().addDescription(taxonDescription.getDescription());
+                        matrix.getCdmEntitiySession().load(taxonDescription.getDescription(), true);
+
                         matrix.setDirty();
                         matrix.getSpecimenCache().remove(wrapper);
                     }
@@ -125,7 +127,7 @@ public class CharacterMatrixBottomToolbar extends Composite{
                 }
                 toRemove.forEach(rowToRemove->{
                     matrix.getDescriptions().remove(rowToRemove);
-                    matrix.getDescriptiveDataSet().removeDescription(rowToRemove.getSpecimenDescription());
+                    matrix.getDescriptiveDataSet().removeDescription(rowToRemove.getDescription());
                     matrix.setDirty();
                 });
             }
@@ -162,8 +164,10 @@ public class CharacterMatrixBottomToolbar extends Composite{
                 List<UUID> descriptionUuids = new ArrayList<>();
                 matrix.getDescriptiveDataSet().getDescriptions().forEach(desc->descriptionUuids.add(desc.getUuid()));
                 UpdateResult result = CdmStore.getService(IDescriptionService.class).aggregateDescription(taxonUuid, descriptionUuids, matrix.getDescriptiveDataSet().getLabel(), matrix.getDescriptiveDataSet().getUuid());
+                TaxonDescription taxonDescription = (TaxonDescription) result.getCdmEntity();
+                TaxonRowWrapperDTO taxonRowWrapper = CdmStore.getService(IDescriptiveDataSetService.class).createTaxonRowWrapper(taxonDescription, matrix.getDescriptiveDataSet());
+                matrix.getDescriptions().add(taxonRowWrapper);
                 matrix.addUpdateResult(result);
-                matrix.setDirty();
 
                 aggregateCategorcialHistogram(matrix.getFeatureToHistogramMap());
                 aggregateQuantitativeSummary(matrix.getFeatureToQuantDataStatisticsMap());
@@ -175,8 +179,9 @@ public class CharacterMatrixBottomToolbar extends Composite{
     @SuppressWarnings("unchecked")
     private void aggregateCategorcialHistogram(Map<Feature, CategoricalDataHistogram> featureToHistogramMap) {
         featureToHistogramMap.clear();
-        matrix.getDescriptions()
-                .forEach(o -> o.getSpecimenDescription().getElements().stream()
+        matrix.getDescriptions().stream()
+        .filter(desc->desc instanceof SpecimenRowWrapperDTO)
+                .forEach(o -> ((SpecimenRowWrapperDTO) o).getDescription().getElements().stream()
                         .filter(descriptionElement -> descriptionElement instanceof CategoricalData)
                         .forEach(categoricalData -> {
                             Feature feature = ((CategoricalData) categoricalData).getFeature();
@@ -193,8 +198,9 @@ public class CharacterMatrixBottomToolbar extends Composite{
     @SuppressWarnings("unchecked")
     private void aggregateQuantitativeSummary(Map<Feature, QuantitativeDataStatistics> featureToQuantDataStatisticsMap) {
         featureToQuantDataStatisticsMap.clear();
-        matrix.getDescriptions()
-        .forEach(o -> o.getSpecimenDescription().getElements().stream()
+        matrix.getDescriptions().stream()
+        .filter(desc->desc instanceof SpecimenRowWrapperDTO)
+        .forEach(o -> ((SpecimenRowWrapperDTO) o).getDescription().getElements().stream()
                 .filter(descriptionElement -> descriptionElement instanceof QuantitativeData)
                 .forEach(quantData -> {
                     Feature feature = ((QuantitativeData) quantData).getFeature();