import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.description.DescriptionBase;
import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
-import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.description.MeasurementUnit;
import eu.etaxonomy.cdm.model.description.SpecimenDescription;
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
-import eu.etaxonomy.cdm.model.term.TermNode;
-import eu.etaxonomy.cdm.model.term.TermTree;
+import eu.etaxonomy.cdm.persistence.dto.DescriptiveDataSetBaseDto;
+import eu.etaxonomy.cdm.persistence.dto.FeatureDto;
import eu.etaxonomy.cdm.persistence.dto.SpecimenNodeWrapper;
import eu.etaxonomy.cdm.persistence.dto.TermDto;
+import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
+import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;
import eu.etaxonomy.taxeditor.editor.l10n.Messages;
// private Collection<RowWrapperDTO<?>> rowsToSave = new HashSet<>();
private HashMap<UUID, RowWrapperDTO<?>> rowsToMerge = new HashMap<>();
- private Map<Integer, Feature> indexToFeatureMap = new HashMap<>();
+ private Map<Integer, FeatureDto> indexToFeatureMap = new HashMap<>();
- private Map<Feature, List<TermDto>> categoricalFeatureToStateMap = new HashMap<>();
+ private Map<UUID, List<TermDto>> categoricalFeatureToStateMap = new HashMap<>();
private LinkedMap<String, String> propertyToLabelMap = new LinkedMap<>();
private Collection<SpecimenNodeWrapper> specimenCache = null;
- private Map<Feature, CategoricalDataHistogram> featureToHistogramMap = new HashMap<>();
+ private Map<FeatureDto, CategoricalDataHistogram> featureToHistogramMap = new HashMap<>();
private ListDataProvider<Object> bodyDataProvider;
private FreezeLayer freezeLayer;
- private List<Feature> features;
+ private List<FeatureDto> features;
private CharacterMatrixPart part;
GridDataFactory.fillDefaults().grab(true, true).applyTo(natTable);
//update label to current dataset
- toolbar.getWsLabel().setText(getDescriptiveDataSet().getLabel());
+ toolbar.getWsLabel().setText(getDescriptiveDataSet().getTitleCache());
toolbar.getWsLabel().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
toolbar.getWsLabel().getParent().layout();
getNatTableState().remove(PersistenceDialog.ACTIVE_VIEW_CONFIGURATION_KEY);
}
- private List<Feature> initFeatureList(TermNode<Feature> node){
- List<Feature> features = new ArrayList<>();
- List<TermNode<Feature>> childNodes = node.getChildNodes();
- for (TermNode<Feature> childNode : childNodes) {
+ private List<FeatureDto> initFeatureList(TermNodeDto node){
+ List<FeatureDto> features = new ArrayList<>();
+ List<TermNodeDto> childNodes = node.getChildren();
+ for (TermNodeDto childNode : childNodes) {
if (childNode != null){
- features.add(childNode.getTerm());
+ features.add((FeatureDto) childNode.getTerm());
features.addAll(initFeatureList(childNode));
}
}
public void initDescriptiveDataSet(){
//get features/columns stored in descriptive dataset
- TermTree<Feature> tree = getDescriptiveDataSet().getDescriptiveSystem();
+ TermTreeDto tree = getDescriptiveDataSet().getDescriptiveSystem();
features = initFeatureList(tree.getRoot());
- Set<Feature> duplicateFeatures = features.stream().filter(i -> Collections.frequency(features, i) >1)
+ Set<FeatureDto> duplicateFeatures = features.stream().filter(i -> Collections.frequency(features, i) >1)
.collect(Collectors.toSet());
if (!duplicateFeatures.isEmpty()) {
throw new IllegalArgumentException("Duplicate features found: "
- + duplicateFeatures.stream().map(feature -> feature.getLabel()).collect(Collectors.joining(",")));
+ + duplicateFeatures.stream().map(feature -> feature.getRepresentation_L10n()).collect(Collectors.joining(",")));
}
//init state data for categorical features
- features.forEach(feature->fetchSupportedStates(feature));
+// features.forEach(feature->fetchSupportedStates(feature));
+ fetchSupportedStates(features);
descriptions = new BasicEventList<>();
}
- private void fetchSupportedStates(Feature feature) {
- List<TermDto> supportedStates = CdmStore.getService(IDescriptiveDataSetService.class).getSupportedStatesForFeature(feature.getUuid());
- categoricalFeatureToStateMap.put(feature, supportedStates);
+ private void fetchSupportedStates(List<FeatureDto> features) {
+ Set<UUID> featureUuids = new HashSet<>();
+ features.forEach(i->featureUuids.add(i.getUuid()));
+ categoricalFeatureToStateMap = CdmStore.getService(IDescriptiveDataSetService.class).getSupportedStatesForFeature(featureUuids);
+
}
treeFormat = new DescriptionTreeFormat(getDescriptiveDataSet());
TreeList<Object> treeList = new TreeList(sortedList, treeFormat, TreeList.NODES_START_COLLAPSED);
// wrap the SortedList with the TreeList
- treeFormat = new DescriptionTreeFormat(getDescriptiveDataSet());
+// treeFormat = new DescriptionTreeFormat(getDescriptiveDataSet());
/**
* data provider
propertyToLabelMap.put(IDENTIFIER_COLUMN, Messages.CharacterMatrix_IDENTIFIER);
propertyToLabelMap.put(COUNTRY_COLUMN, Messages.CharacterMatrix_COUNTRY);
for(int i=0;i<features.size();i++){
- Feature feature = features.get(i);
+ FeatureDto feature = features.get(i);
initLabels(i, feature);
}
// assemble the column groups
LinkedList<ColumnGroupWrapper> columnGroups = new LinkedList<>();
- List<TermNode<Feature>> rootChildren = getDescriptiveDataSet().getDescriptiveSystem().getRootChildren();
+ List<TermNodeDto> rootChildren = getDescriptiveDataSet().getDescriptiveSystem().getRoot().getChildren();
buildHeader(rootChildren, columnGroups);
bodyLayer = new MatrixBodyLayerStack(eventLayer, columnGroups);
ColumnGroupHeaderLayer groupLayerLevel1 = null;
ColumnGroupGroupHeaderLayer groupLayerLevel2 = null;
groupLayerLevel1 = new ColumnGroupHeaderLayer(columnHeaderLayer, selectionLayer, groupLevel1.getModel());
- for (Entry<TermNode<Feature>, TreeSet<Integer>> entry: groupLevel1.getColumnGroupToIndexMap().entrySet()) {
- TermNode<Feature> group = entry.getKey();
+ for (Entry<TermNodeDto, TreeSet<Integer>> entry: groupLevel1.getColumnGroupToIndexMap().entrySet()) {
+ TermNodeDto group = entry.getKey();
TreeSet<Integer> indexList = entry.getValue();
int[] intArray = indexList.stream().mapToInt(Integer::intValue).toArray();
groupLayerLevel1.addColumnsIndexesToGroup(group.getTerm().getTitleCache(), intArray);
if(columnGroups.size()>1){
ColumnGroupWrapper groupLevel2 = columnGroups.get(1);
groupLayerLevel2 = new ColumnGroupGroupHeaderLayer(groupLayerLevel1, selectionLayer, groupLevel2.getModel());
- for (Entry<TermNode<Feature>, TreeSet<Integer>> entry: groupLevel2.getColumnGroupToIndexMap().entrySet()) {
- TermNode<Feature> group = entry.getKey();
+ for (Entry<TermNodeDto, TreeSet<Integer>> entry: groupLevel2.getColumnGroupToIndexMap().entrySet()) {
+ TermNodeDto group = entry.getKey();
TreeSet<Integer> indexList = entry.getValue();
int[] intArray = indexList.stream().mapToInt(Integer::intValue).toArray();
groupLayerLevel2.addColumnsIndexesToGroup(group.getTerm().getTitleCache(), intArray);
}
- private TreeSet<Integer> recurseChildIndexes(TermNode<Feature> node){
+ private TreeSet<Integer> recurseChildIndexes(TermNodeDto node){
TreeSet<Integer> childIndexes = new TreeSet<>();
- if(node.getChildCount()>0){
- List<TermNode<Feature>> childNodes = node.getChildNodes();
- for (TermNode<Feature> childNode: childNodes) {
+ if(node.getChildren().size() >0){
+ List<TermNodeDto> childNodes = node.getChildren();
+ for (TermNodeDto childNode: childNodes) {
if (childNode != null){
childIndexes.addAll(recurseChildIndexes(childNode));
}
return childIndexes;
}
- private void buildHeader(List<TermNode<Feature>> nodes, LinkedList<ColumnGroupWrapper> columnGroups){
- Map<TermNode<Feature>, TreeSet<Integer>> columnGroupToIndexMap = new HashMap<>();
- List<TermNode<Feature>> childNodes = new ArrayList<>();
- for (TermNode<Feature> node : nodes) {
+ private void buildHeader(List<TermNodeDto> nodes, LinkedList<ColumnGroupWrapper> columnGroups){
+ Map<TermNodeDto, TreeSet<Integer>> columnGroupToIndexMap = new HashMap<>();
+ List<TermNodeDto> childNodes = new ArrayList<>();
+ for (TermNodeDto node : nodes) {
if (node != null){
TreeSet<Integer> childIndexes = recurseChildIndexes(node);
if(childIndexes.size()>1){
// filter out groups that only have one member
columnGroupToIndexMap.put(node, childIndexes);
}
- childNodes.addAll(node.getChildNodes());
+ childNodes.addAll(node.getChildren());
}
}
if(!columnGroupToIndexMap.isEmpty()){
}
}
- private void initLabels(int index, Feature feature) {
+ private void initLabels(int index, FeatureDto feature) {
indexToFeatureMap.put(index+LEADING_COLUMN_COUNT, feature);
- String label = feature.getLabel();
+ String label = feature.getTitleCache();
String property = feature.getUuid().toString();
//show unit for quantitative data
if(feature.isSupportsQuantitativeData()){
- Set<MeasurementUnit> recommendedMeasurementUnits = feature.getRecommendedMeasurementUnits();
+ Set<TermDto> recommendedMeasurementUnits = feature.getRecommendedMeasurementUnits();
// if(recommendedMeasurementUnits.size()>1){
// MessagingUtils.warningDialog(Messages.CharacterMatrix_INIT_PROBLEM, CharacterMatrix.class,
// String.format(Messages.CharacterMatrix_INIT_PROBLEM_MESSAGE, feature.getLabel()));
// }
if(recommendedMeasurementUnits.size()==1){
- MeasurementUnit unit = recommendedMeasurementUnits.iterator().next();
+ TermDto unit = recommendedMeasurementUnits.iterator().next();
label += " ["+unit.getIdInVocabulary()+"]"; //$NON-NLS-1$ //$NON-NLS-2$
}
}
}
- public List<TermDto> getSupportedStatesForCategoricalFeature(Feature feature){
- return categoricalFeatureToStateMap.get(feature);
+ public List<TermDto> getSupportedStatesForCategoricalFeature(UUID featureUuid){
+ return categoricalFeatureToStateMap.get(featureUuid);
}
public Set<DescriptionBase> getDescriptionsToSave() {
this.descriptionsToSave.add(descriptionToSave);
}
- public Map<Integer, Feature> getIndexToFeatureMap() {
+ public Map<Integer, FeatureDto> getIndexToFeatureMap() {
return indexToFeatureMap;
}
return descriptions;
}
- public DescriptiveDataSet getDescriptiveDataSet() {
+ public DescriptiveDataSetBaseDto getDescriptiveDataSet() {
return part.getDescriptiveDataSet();
}
- public void setDescriptiveDataSet(DescriptiveDataSet dataSet) {
+ public void setDescriptiveDataSet(DescriptiveDataSetBaseDto dataSet) {
part.setDescriptiveDataSet(dataSet);
}
if (this.rowsToMerge == null){
this.rowsToMerge = new HashMap<>();
}
- this.rowsToMerge.put(rowToMerge.getDescription().getDescription().getUuid(), rowToMerge);
+ this.rowsToMerge.put(rowToMerge.getDescription().getDescriptionUuid(), rowToMerge);
}
public Properties getNatTableState() {
return new File(WorkbenchUtility.getBaseLocation(), CHARACTER_MATRIX_STATE_PROPERTIES);
}
- public List<Feature> getFeatures() {
+ public List<FeatureDto> getFeatures() {
return features;
}
- public Map<Feature, CategoricalDataHistogram> getFeatureToHistogramMap() {
+ public Map<FeatureDto, CategoricalDataHistogram> getFeatureToHistogramMap() {
return featureToHistogramMap;
}
}
dataSet = this.getCdmEntitiySession().load(dataSet, true);
// update local dataset
- this.setDescriptiveDataSet(dataSet);
+ DescriptiveDataSetBaseDto dto = DescriptiveDataSetBaseDto.fromDescriptiveDataSet(dataSet);
+ this.setDescriptiveDataSet(dto);
//these descriptions are already updated
for (SpecimenRowWrapperDTO row: specimenToAdd){
- this.rowsToMerge.remove(row.getDescription().getDescription().getUuid());
+ this.rowsToMerge.remove(row.getDescription().getDescriptionUuid());
}
specimenToAdd.clear();
return resultMap;
}
+ @Override
+ public void dispose () {
+ super.dispose();
+ descriptions.dispose();
+ descriptions = null;
+ this.natTable.dispose();
+ this.natTable = null;
+ categoricalFeatureToStateMap = null;
+ rowsToMerge.clear();
+ rowsToMerge = null;
+ indexToFeatureMap = null;
+ propertyToLabelMap = null;
+ specimenCache = null;
+ featureToHistogramMap = null;
+ bodyDataProvider = null;
+ freezeLayer = null;
+ features = null;
+ topMostLayer.dispose();
+ topMostLayer = null;
+ configRegistry = null;
+ bodyLayer.dispose();
+ bodyLayer = null;
+ toolbar.dispose();
+ toolbar = null;
+ treeFormat = null;
+ descriptionUuidsToDelete = null;
+ specimenToAdd = null;
+ mouseEventMatcher = null;
+ descriptionsToSave = null;
+ menuService = null;
+ sync = null;
+ part = null;
+
+ }
}