ref #8450 Create and cache label for quantitative data in row wrapper
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / descriptiveDataSet / matrix / SpecimenColumnPropertyAccessor.java
index 99243a8f87d57a1dc2760e27c635d89451574c0e..72bd65ff33b0b794a88bee202e9737fcd6e82caa 100644 (file)
@@ -8,15 +8,26 @@
 */
 package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
 import org.eclipse.nebula.widgets.nattable.data.IColumnPropertyAccessor;
 
+import eu.etaxonomy.cdm.api.service.ITermService;
 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.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.State;
+import eu.etaxonomy.cdm.model.term.DefinedTermBase;
+import eu.etaxonomy.cdm.persistence.dto.TermDto;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
- * Property accesor class which maps setting and getting data for
+ * Property accessor class which maps setting and getting data for
  * each row in the character matrix
  * @author pplitzner
  * @since Nov 26, 2017
@@ -30,10 +41,6 @@ public class SpecimenColumnPropertyAccessor implements IColumnPropertyAccessor<O
         this.matrix = matrix;
     }
 
-
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public Object getDataValue(Object rowObject, int columnIndex) {
         if(rowObject instanceof SpecimenRowWrapperDTO){
@@ -57,14 +64,15 @@ public class SpecimenColumnPropertyAccessor implements IColumnPropertyAccessor<O
                 break;
             }
             Feature feature = matrix.getIndexToFeatureMap().get(columnIndex);
-            return rowWrapper.getDataValueForFeature(feature);
-        } else if(rowObject instanceof TaxonRowWrapperDTO){
+            return rowWrapper.getDisplayDataForFeature(feature);
+        }
+        else if(rowObject instanceof TaxonRowWrapperDTO){
             TaxonRowWrapperDTO taxonWrapper = (TaxonRowWrapperDTO)rowObject;
             if(columnIndex==0){
                 return taxonWrapper.getDescription();
             }
             Feature feature = matrix.getIndexToFeatureMap().get(columnIndex);
-            return taxonWrapper.getDataValueForFeature(feature);
+            return taxonWrapper.getDisplayDataForFeature(feature);
 
         }
         else if (columnIndex == 0) {
@@ -73,37 +81,39 @@ public class SpecimenColumnPropertyAccessor implements IColumnPropertyAccessor<O
         return null;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public void setDataValue(Object rowObject, int columnIndex, Object newValue) {
         if(rowObject instanceof RowWrapperDTO){
             RowWrapperDTO rowWrapper = (RowWrapperDTO)rowObject;
+            matrix.addRowToSave(rowWrapper);
             Feature feature = matrix.getIndexToFeatureMap().get(columnIndex);
-            rowWrapper.setDataValueForFeature(feature, newValue);
+            if(feature.isSupportsCategoricalData()
+                    && newValue instanceof Collection
+                    && ((Collection) newValue).stream().allMatch(o->o instanceof TermDto)){
+                List<TermDto> dtos = (List<TermDto>)newValue;
+                List<UUID> termUuids = dtos.stream().map(dto->dto.getUuid()).collect(Collectors.toList());
+                List<DefinedTermBase> terms = CdmStore.getService(ITermService.class).load(termUuids, null);
+                List<State> states = new ArrayList<>();
+                for (DefinedTermBase definedTermBase : terms) {
+                    if(definedTermBase instanceof State){
+                        states.add((State) definedTermBase);
+                    }
+                }
+                rowWrapper.setDataValueForCategoricalData(feature, states);
+            }
         }
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public int getColumnCount() {
         return matrix.getPropertyToLabelMap().size();
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public String getColumnProperty(int columnIndex) {
         return matrix.getPropertyToLabelMap().get(columnIndex);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public int getColumnIndex(String propertyName){
         return matrix.getPropertyToLabelMap().indexOf(propertyName);