import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import ca.odell.glazedlists.SortedList;
import ca.odell.glazedlists.TreeList;
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
+import eu.etaxonomy.cdm.api.service.IVocabularyService;
import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;
import eu.etaxonomy.cdm.api.service.dto.SpecimenRowWrapperDTO;
import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
import eu.etaxonomy.cdm.model.description.State;
import eu.etaxonomy.cdm.model.term.FeatureNode;
import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.TermVocabulary;
import eu.etaxonomy.cdm.persistence.dto.SpecimenNodeWrapper;
+import eu.etaxonomy.cdm.persistence.dto.TermDto;
import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;
import eu.etaxonomy.taxeditor.editor.l10n.Messages;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
private Map<Integer, Character> indexToCharacterMap = new HashMap<>();
- private Map<Feature, List<State>> categoricalFeatureToStateMap = new HashMap<>();
+ private Map<Feature, List<TermDto>> categoricalFeatureToStateMap = new HashMap<>();
private LinkedMap<String, String> propertyToLabelMap = new LinkedMap<>();
characters = initCharacterList(tree.getRoot());
//init state data for categorical features
- characters.forEach(character->
- {
- if(character.isSupportsCategoricalData()){
- List<State> supportedStates = new ArrayList<>();
- character.getSupportedCategoricalEnumerations().forEach(voc->supportedStates.addAll(voc.getTerms()));
- Collections.sort(supportedStates, (state1, state2)->state1.getLabel().compareTo(state2.getLabel()));
- categoricalFeatureToStateMap.put(character, supportedStates);
- }
- });
+ characters.forEach(character->fetchSupportedStates(character));
+
descriptions = new BasicEventList<>();
}
+ private void fetchSupportedStates(Character character) {
+ if(character.isSupportsCategoricalData()){
+ List<TermDto> supportedStates = new ArrayList<>();
+ Set<TermVocabulary<State>> supportedCategoricalEnumerations = character.getSupportedCategoricalEnumerations();
+ for (TermVocabulary<State> termVocabulary : supportedCategoricalEnumerations) {
+ supportedStates.addAll(CdmStore.getService(IVocabularyService.class).getTerms(termVocabulary.getUuid()));
+ }
+// Collections.sort(supportedStates, (state1, state2)->state1.getLabel().compareTo(state2.getLabel()));
+ categoricalFeatureToStateMap.put(character, supportedStates);
+ }
+ }
+
private void createLayers(boolean treeView) {
SortedList<Object> sortedList = new SortedList<>(descriptions, new MatrixRowComparator());
// wrap the SortedList with the TreeList
createTable(isTreeView, freezeLayer.isFrozen());
}
- public List<State> getSupportedStatesForCategoricalFeature(Feature feature){
+ public List<TermDto> getSupportedStatesForCategoricalFeature(Feature feature){
return categoricalFeatureToStateMap.get(feature);
}
*/
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 accessor class which maps setting and getting data for
if(rowObject instanceof RowWrapperDTO){
RowWrapperDTO rowWrapper = (RowWrapperDTO)rowObject;
Feature feature = matrix.getIndexToCharacterMap().get(columnIndex);
- rowWrapper.setDataValueForFeature(feature, newValue);
+ if(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.setDataValueForFeature(feature, states);
+ }
}
}
import eu.etaxonomy.cdm.model.description.CategoricalData;
import eu.etaxonomy.cdm.model.description.State;
+import eu.etaxonomy.cdm.persistence.dto.TermDto;
+import eu.etaxonomy.cdm.remote.l10n.TermRepresentation_L10n;
/**
* Converts CategoricalData and States of one cell of the character matrix to a
else if(canonicalValue instanceof State){
return ((State) canonicalValue).getLabel();
}
+ else if(canonicalValue instanceof TermDto){
+ ((TermDto) canonicalValue).localize(new TermRepresentation_L10n());
+ return ((TermDto) canonicalValue).getRepresentation_L10n();
+ }
else if (canonicalValue instanceof Collection) {
// Collection.toString() will add [ and ] around
// the values in the Collection