*/
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
this.matrix = matrix;
}
-
- /**
- * {@inheritDoc}
- */
@Override
public Object getDataValue(Object rowObject, int columnIndex) {
if(rowObject instanceof SpecimenRowWrapperDTO){
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) {
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);