ref #9710: do not use cdm objects for dds and descriptions in character matrix
authorKatja Luther <k.luther@bgbm.org>
Wed, 15 Sep 2021 11:00:43 +0000 (13:00 +0200)
committerKatja Luther <k.luther@bgbm.org>
Wed, 15 Sep 2021 11:00:43 +0000 (13:00 +0200)
27 files changed:
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CellSelectionListener.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrix.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixBottomToolbar.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixConfigLabelAccumulator.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixPart.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixToolbar.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/ColumnGroupWrapper.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/DescriptionTreeFormat.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/MatrixRowComparator.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/MatrixUtility.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/SpecimenColumnPropertyAccessor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/categorical/CategoricalComboBoxDataProvider.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/categorical/CategoricalDataCellEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/categorical/CategoricalDataDisplayConverter.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/handler/AggregationHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/handler/CreateDefaultTaxonDescriptionHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/handler/CreateTaxonDescriptionHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/handler/DeleteDescriptionHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/handler/GeneratePolytomousKeyHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/quantitative/QuantitativeDataDialog.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/quantitative/QuantitativeDataDialogComposite.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/quantitative/QuantitativeDataDialogEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/quantitative/QuantitativeDataEditModeDisplayConverter.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/supplementalInfo/SupplementalInfoDisplayConverter.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/handler/OpenDefinedTermEditorHandlerE4.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/wizard/CdmCheckBoxTreeViewer.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/e4/details/DetailsViewerE4.java

index 177f385f7b4aca45b90d37b287c4c1a3540fdac9..bfef7ad1d4972a484601ae80de102d414af4de7d 100644 (file)
@@ -23,7 +23,6 @@ import org.eclipse.nebula.widgets.nattable.selection.event.RowSelectionEvent;
 
 import eu.etaxonomy.cdm.api.service.dto.DescriptionBaseDto;
 import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;
-import eu.etaxonomy.cdm.model.description.DescriptionBase;
 
 /**
  * @author pplitzner
@@ -66,7 +65,7 @@ final class CellSelectionListener extends E4SelectionListener<Object> {
 
                     Object dataValue = cell.getDataValue();
                     if(dataValue!=null && dataValue instanceof DescriptionBaseDto){
-                        DescriptionBase descBase = ((DescriptionBaseDto)dataValue).getDescription();
+                        DescriptionBaseDto descBase = (DescriptionBaseDto)dataValue;
                         part.getSelectionService().setSelection(new StructuredSelection(descBase));
                         return;
                     }
@@ -79,7 +78,7 @@ final class CellSelectionListener extends E4SelectionListener<Object> {
             if(fullySelectedRowPositions.length==1){
                 Object rowObject = part.getMatrix().getBodyDataProvider().getRowObject(fullySelectedRowPositions[0]);
                 if(rowObject instanceof RowWrapperDTO){
-                    part.getSelectionService().setSelection(new StructuredSelection(((RowWrapperDTO) rowObject).getDescription().getDescription()));
+                    part.getSelectionService().setSelection(new StructuredSelection(((RowWrapperDTO) rowObject).getDescription()));
                     return;
                 }
             }
index 3da8ef618e2d939aabfc0edcdaf38ac9c71c8989..17bd0adf7eee9104f7014c766162efe574c6bcf7 100644 (file)
@@ -110,14 +110,14 @@ import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
 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;
@@ -164,9 +164,9 @@ public class CharacterMatrix extends Composite {
 //    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<>();
 
@@ -174,13 +174,13 @@ public class CharacterMatrix extends Composite {
 
     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;
 
@@ -272,7 +272,7 @@ public class CharacterMatrix extends Composite {
         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();
 
@@ -301,12 +301,12 @@ public class CharacterMatrix extends Composite {
         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));
             }
         }
@@ -315,27 +315,30 @@ public class CharacterMatrix extends Composite {
 
     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);
+
     }
 
 
@@ -347,7 +350,7 @@ public class CharacterMatrix extends Composite {
         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
@@ -402,7 +405,7 @@ public class CharacterMatrix extends Composite {
         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);
         }
 
@@ -414,7 +417,7 @@ public class CharacterMatrix extends Composite {
 
         // 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);
@@ -446,8 +449,8 @@ public class CharacterMatrix extends Composite {
             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);
@@ -459,8 +462,8 @@ public class CharacterMatrix extends Composite {
             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);
@@ -509,11 +512,11 @@ public class CharacterMatrix extends Composite {
 
     }
 
-    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));
                 }
@@ -523,17 +526,17 @@ public class CharacterMatrix extends Composite {
         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()){
@@ -657,20 +660,20 @@ public class CharacterMatrix extends Composite {
         }
     }
 
-    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$
             }
         }
@@ -756,8 +759,8 @@ public class CharacterMatrix extends Composite {
 
     }
 
-    public List<TermDto> getSupportedStatesForCategoricalFeature(Feature feature){
-        return categoricalFeatureToStateMap.get(feature);
+    public List<TermDto> getSupportedStatesForCategoricalFeature(UUID featureUuid){
+        return categoricalFeatureToStateMap.get(featureUuid);
     }
 
     public Set<DescriptionBase> getDescriptionsToSave() {
@@ -768,7 +771,7 @@ public class CharacterMatrix extends Composite {
         this.descriptionsToSave.add(descriptionToSave);
     }
 
-    public Map<Integer, Feature> getIndexToFeatureMap() {
+    public Map<Integer, FeatureDto> getIndexToFeatureMap() {
         return indexToFeatureMap;
     }
 
@@ -832,11 +835,11 @@ public class CharacterMatrix extends Composite {
         return descriptions;
     }
 
-    public DescriptiveDataSet getDescriptiveDataSet() {
+    public DescriptiveDataSetBaseDto getDescriptiveDataSet() {
         return part.getDescriptiveDataSet();
     }
 
-    public void setDescriptiveDataSet(DescriptiveDataSet dataSet) {
+    public void setDescriptiveDataSet(DescriptiveDataSetBaseDto dataSet) {
         part.setDescriptiveDataSet(dataSet);
     }
 
@@ -874,7 +877,7 @@ public class CharacterMatrix extends Composite {
         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() {
@@ -893,11 +896,11 @@ public class CharacterMatrix extends Composite {
         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;
     }
 
@@ -968,11 +971,12 @@ public class CharacterMatrix extends Composite {
         }
         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;
@@ -985,5 +989,39 @@ public class CharacterMatrix extends Composite {
 
     }
 
+    @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;
+
+    }
 
 }
index 4f0dcc20d291fcc616419a2698ee9aed9443ed08..532239a8da266f4bad6312af9b831b4391dee27b 100644 (file)
@@ -32,6 +32,7 @@ import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 
 import eu.etaxonomy.cdm.api.application.CdmApplicationState;
+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.description.AggregationMode;
@@ -40,10 +41,10 @@ import eu.etaxonomy.cdm.api.service.dto.SpecimenRowWrapperDTO;
 import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
 import eu.etaxonomy.cdm.filter.TaxonNodeFilter;
 import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
-import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.dto.DescriptiveDataSetBaseDto;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
+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;
@@ -154,9 +155,7 @@ public class CharacterMatrixBottomToolbar extends Composite{
                 if(StoreUtil.promptCheckIsDirty(matrix.getPart())){
                     return;
                 }
-                Set<TaxonNodeDto> nodeDtos = matrix.getDescriptiveDataSet().getTaxonSubtreeFilter().stream()
-                        .map(node->new TaxonNodeDto(node))
-                        .collect(Collectors.toSet());
+                Set<TaxonNodeDto> nodeDtos = matrix.getDescriptiveDataSet().getSubTreeFilter();
                 TaxonNodeDto parentDto = CdmStore.getService(ITaxonNodeService.class).findCommonParentDto(nodeDtos);
                 UUID taxonUuid = parentDto.getTaxonUuid();
                 int response = MessagingUtils.confirmDialog(
@@ -186,9 +185,9 @@ public class CharacterMatrixBottomToolbar extends Composite{
                 null, null);
         IStructuredSelection sel = matrix.getSelection();
         Object o = sel.getFirstElement();
-        TaxonNodeFilter filter = TaxonNodeFilter.NewRankInstance(matrix.getDescriptiveDataSet().getMinRank(),
-                matrix.getDescriptiveDataSet().getMaxRank());
-        for (NamedArea namedArea : matrix.getDescriptiveDataSet().getGeoFilter()) {
+        TaxonNodeFilter filter = TaxonNodeFilter.NewRankInstance(matrix.getDescriptiveDataSet().getMinRank().getUuid(),
+                matrix.getDescriptiveDataSet().getMaxRank().getUuid());
+        for (TermDto namedArea : matrix.getDescriptiveDataSet().getGeoFilter()) {
             filter = filter.orArea(namedArea.getUuid());
         }
 //        for (TaxonNode taxonNode : matrix.getDescriptiveDataSet().getTaxonSubtreeFilter()) {
@@ -198,8 +197,8 @@ public class CharacterMatrixBottomToolbar extends Composite{
         if (o instanceof TaxonNodeDto){
             filter = filter.orSubtree(CdmStore.getService(ITaxonNodeService.class).load(((TaxonNodeDto)o).getUuid()));
         }else{
-            for (TaxonNode taxonNode : matrix.getDescriptiveDataSet().getTaxonSubtreeFilter()) {
-                filter = filter.orSubtree(taxonNode);
+            for (TaxonNodeDto taxonNode : matrix.getDescriptiveDataSet().getSubTreeFilter()) {
+                filter = filter.orSubtree(taxonNode.getUuid());
             }
         }
         config.setTaxonNodeFilter(filter);
@@ -241,9 +240,11 @@ public class CharacterMatrixBottomToolbar extends Composite{
                 }
                 else if(resultObject instanceof UpdateResult){
                     DescriptiveDataSet dataSet = (DescriptiveDataSet) ((UpdateResult) resultObject).getCdmEntity();
-                    dataSet = matrix.getCdmEntitiySession().load(dataSet, true);
+//                    dataSet = matrix.getCdmEntitiySession().load(dataSet, true);
+
+                    DescriptiveDataSetBaseDto dto = CdmStore.getService(IDescriptiveDataSetService.class).getDescriptiveDataSetDtoByUuid(dataSet.getUuid());
                     // update local dataset
-                    matrix.setDescriptiveDataSet(dataSet);
+                    matrix.setDescriptiveDataSet(dto);
                     matrix.loadDescriptions(false, false);
                 }
             } catch (InterruptedException e) {
@@ -291,9 +292,12 @@ public class CharacterMatrixBottomToolbar extends Composite{
                                         .collect(Collectors.joining("\n"))));
                     }
                     DescriptiveDataSet dataSet = (DescriptiveDataSet) result.getCdmEntity();
-                    dataSet = matrix.getCdmEntitiySession().load(dataSet, true);
+//                    dataSet = matrix.getCdmEntitiySession().load(dataSet, true);
+                    // update local dataset
+                    DescriptiveDataSetBaseDto dto = CdmStore.getService(IDescriptiveDataSetService.class).getDescriptiveDataSetDtoByUuid(dataSet.getUuid());
                     // update local dataset
-                    matrix.setDescriptiveDataSet(dataSet);
+                    matrix.setDescriptiveDataSet(dto);
+//                    matrix.setDescriptiveDataSet(dataSet);
                     matrix.loadDescriptions(false, false);
                 }
             } catch (InterruptedException e) {
index 7d586bbadf9c7897e1f130080b2f1e6a8195a7fa..34d5c9bb3f57122aa4d2cb1cd970e03804ed9ea1 100644 (file)
@@ -14,16 +14,14 @@ import java.util.Set;
 import org.eclipse.nebula.widgets.nattable.layer.LabelStack;
 import org.eclipse.nebula.widgets.nattable.layer.cell.IConfigLabelAccumulator;
 
+import eu.etaxonomy.cdm.api.service.dto.CategoricalDataDto;
 import eu.etaxonomy.cdm.api.service.dto.DescriptionBaseDto;
+import eu.etaxonomy.cdm.api.service.dto.DescriptionElementDto;
+import eu.etaxonomy.cdm.api.service.dto.QuantitativeDataDto;
 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.CategoricalData;
-import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
-import eu.etaxonomy.cdm.model.description.DescriptionType;
-import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.description.QuantitativeData;
-import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.persistence.dto.FeatureDto;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 
 /**
@@ -77,7 +75,7 @@ public class CharacterMatrixConfigLabelAccumulator implements IConfigLabelAccumu
                 }
                 // check for existing default values
                 if(columnPosition>=CharacterMatrix.LEADING_COLUMN_COUNT){
-                    Feature feature = matrix.getFeatures().get(columnPosition-CharacterMatrix.LEADING_COLUMN_COUNT);
+                    FeatureDto feature = matrix.getFeatures().get(columnPosition-CharacterMatrix.LEADING_COLUMN_COUNT);
                     if(hasDefaultValue(feature, taxonRowWrapper)){
                         configLabels.addLabel(HAS_DEFAULT);
                         if(hasDefaultOverriddenValue(feature, taxonRowWrapper)){
@@ -87,10 +85,10 @@ public class CharacterMatrixConfigLabelAccumulator implements IConfigLabelAccumu
                     }
                 }
             }
-            //check for supplemental data
-            if(!taxonRowWrapper.getDescription().getDescription().getSources().isEmpty() && columnPosition==0){
-                configLabels.addLabel(CharacterMatrix.LABEL_DESCRIPTION_HAS_SUPPLEMENTAL_DATA);
-            }
+            //check for supplemental data TODO: add supplemental data to DTO
+//            if(!taxonRowWrapper.getDescription().getSources().isEmpty() && columnPosition==0){
+//                configLabels.addLabel(CharacterMatrix.LABEL_DESCRIPTION_HAS_SUPPLEMENTAL_DATA);
+//            }
             configLabels.addLabel(CharacterMatrix.LABEL_TAXON_DESCRIPTION);
         }
 
@@ -107,7 +105,7 @@ public class CharacterMatrixConfigLabelAccumulator implements IConfigLabelAccumu
             configLabels.addLabel(CharacterMatrix.COUNTRY_COLUMN);
         }
         else{
-            Feature feature = matrix.getFeatures().get(columnPosition-CharacterMatrix.LEADING_COLUMN_COUNT);
+            FeatureDto feature = matrix.getFeatures().get(columnPosition-CharacterMatrix.LEADING_COLUMN_COUNT);
             configLabels.addLabel(MatrixUtility.getProperty(feature));
             // check for default values
             if(rowObject instanceof SpecimenRowWrapperDTO){
@@ -136,48 +134,50 @@ public class CharacterMatrixConfigLabelAccumulator implements IConfigLabelAccumu
         }
     }
 
-    private boolean hasDefaultOverriddenValue(Feature feature, RowWrapperDTO<?> rowWrapper) {
-        DescriptionElementBase dataValueForFeature = rowWrapper.getDataValueForFeature(feature);
+    private boolean hasDefaultOverriddenValue(FeatureDto feature, RowWrapperDTO<?> rowWrapper) {
+        DescriptionElementDto dataValueForFeature = rowWrapper.getDataValueForFeature(feature.getUuid());
         if(dataValueForFeature!=null){
-            if(dataValueForFeature instanceof CategoricalData){
-                return !((CategoricalData) dataValueForFeature).getStatesOnly().isEmpty();
+            if(dataValueForFeature instanceof CategoricalDataDto){
+                return !((CategoricalDataDto) dataValueForFeature).getStates().isEmpty();
             }
-            else if(dataValueForFeature instanceof QuantitativeData){
-                return !((QuantitativeData) dataValueForFeature).getStatisticalValues().isEmpty();
+            else if(dataValueForFeature instanceof QuantitativeDataDto){
+                return !((QuantitativeDataDto) dataValueForFeature).getValues().isEmpty();
             }
         }
         return false;
     }
 
-    private boolean hasDefaultValue(Feature feature, RowWrapperDTO<?> rowWrapperDTO) {
+    private boolean hasDefaultValue(FeatureDto feature, RowWrapperDTO<?> rowWrapperDTO) {
         if(rowWrapperDTO instanceof SpecimenRowWrapperDTO
                 && ((SpecimenRowWrapperDTO) rowWrapperDTO).getDefaultDescription()!=null){
-            TaxonDescription taxDescription = (TaxonDescription)((SpecimenRowWrapperDTO)rowWrapperDTO).getDefaultDescription().getDescription().getDescription();
+            DescriptionBaseDto taxDescription = ((SpecimenRowWrapperDTO)rowWrapperDTO).getDefaultDescription().getDescription();
             return hasDefaultValue(feature, taxDescription);
         }
         else if(rowWrapperDTO instanceof TaxonRowWrapperDTO){
             TaxonRowWrapperDTO taxonRowWrapper = (TaxonRowWrapperDTO)rowWrapperDTO;
             Set<DescriptionBaseDto> descriptions = taxonRowWrapper.getTaxonDescriptions();
             for (DescriptionBaseDto taxonDescription : descriptions) {
-                if(matrix.getDescriptiveDataSet().getDescriptions().contains(taxonDescription)
-                        && taxonDescription.getDescription().getTypes().contains(DescriptionType.DEFAULT_VALUES_FOR_AGGREGATION)){
-                    return hasDefaultValue(feature, (TaxonDescription)taxonDescription.getDescription());
-                }
+//                if(matrix.getDescriptiveDataSet().getDescriptions().contains(taxonDescription)
+//                        && taxonDescription.getTypes().contains(DescriptionType.DEFAULT_VALUES_FOR_AGGREGATION)){
+//                    return hasDefaultValue(feature, taxonDescription);
+//                }
+                //TODO: correct implementation
+                return false;
             }
         }
         return false;
     }
 
-    private boolean hasDefaultValue(Feature feature, TaxonDescription defaultDescription) {
+    private boolean hasDefaultValue(FeatureDto feature, DescriptionBaseDto defaultDescription) {
         if(defaultDescription!=null){
-            Optional<DescriptionElementBase> descriptionElement = defaultDescription.getElements().stream()
-                    .filter(element->element.getFeature().equals(feature))
+            Optional<DescriptionElementDto> descriptionElement = defaultDescription.getElements().stream()
+                    .filter(element->element.getFeatureUuid().equals(feature.getUuid()))
                     .findAny();
-            if(descriptionElement.isPresent() && descriptionElement.get() instanceof CategoricalData){
-                return !((CategoricalData) descriptionElement.get()).getStatesOnly().isEmpty();
+            if(descriptionElement.isPresent() && descriptionElement.get() instanceof CategoricalDataDto){
+                return !((CategoricalDataDto) descriptionElement.get()).getStates().isEmpty();
             }
-            else if(descriptionElement.isPresent() && descriptionElement.get() instanceof QuantitativeData){
-                return !((QuantitativeData) descriptionElement.get()).getStatisticalValues().isEmpty();
+            else if(descriptionElement.isPresent() && descriptionElement.get() instanceof QuantitativeDataDto){
+                return !((QuantitativeDataDto) descriptionElement.get()).getValues().isEmpty();
             }
 
         }
index 041cd0c64e673629862235bc599dde92094b98d7..30158cefaafdffe162fc230db1bd2d6c322af34d 100644 (file)
@@ -11,7 +11,6 @@ package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -54,6 +53,7 @@ import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.term.TermType;
+import eu.etaxonomy.cdm.persistence.dto.DescriptiveDataSetBaseDto;
 import eu.etaxonomy.cdm.persistence.dto.MergeResult;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;
@@ -101,7 +101,7 @@ public class CharacterMatrixPart implements IE4SavablePart, IConversationEnabled
             "maxRank", //$NON-NLS-1$
     });
 
-    private DescriptiveDataSet descriptiveDataSet;
+    private DescriptiveDataSetBaseDto descriptiveDataSet;
 
     private ConversationHolder conversation;
 
@@ -144,10 +144,12 @@ public class CharacterMatrixPart implements IE4SavablePart, IConversationEnabled
         label.setText(Messages.CharacterMatrixPart_LOADING_MATRIX);
         stackLayout.topControl = label;
         ContextInjectionFactory.inject(matrix, context);
+
     }
 
     public void init(UUID descriptiveDataSetUuid, boolean treeView) {
-        this.descriptiveDataSet = CdmStore.getService(IDescriptiveDataSetService.class).load(descriptiveDataSetUuid, WS_PROPERTY_PATH);
+//        this.descriptiveDataSet = CdmStore.getService(IDescriptiveDataSetService.class).load(descriptiveDataSetUuid, WS_PROPERTY_PATH);
+        this.descriptiveDataSet = CdmStore.getService(IDescriptiveDataSetService.class).getDescriptiveDataSetDtoByUuid(descriptiveDataSetUuid);
         if(descriptiveDataSet!=null){
             if(descriptiveDataSet.getDescriptiveSystem()==null
                     || descriptiveDataSet.getDescriptiveSystem().getTermType()==null
@@ -164,7 +166,7 @@ public class CharacterMatrixPart implements IE4SavablePart, IConversationEnabled
                 return;
             }
             matrix.createTable(treeView, true, true);
-            thisPart.setLabel(descriptiveDataSet.getLabel());
+            thisPart.setLabel(descriptiveDataSet.getTitleCache());
             matrix.loadDescriptions( true, true);
         }
     }
@@ -177,11 +179,11 @@ public class CharacterMatrixPart implements IE4SavablePart, IConversationEnabled
         this.dirty.setDirty(true);
     }
 
-    public DescriptiveDataSet getDescriptiveDataSet() {
+    public DescriptiveDataSetBaseDto getDescriptiveDataSet() {
         return descriptiveDataSet;
     }
 
-    public void setDescriptiveDataSet(DescriptiveDataSet dataSet) {
+    public void setDescriptiveDataSet(DescriptiveDataSetBaseDto dataSet) {
         this.descriptiveDataSet = dataSet;
     }
 
@@ -240,11 +242,12 @@ public class CharacterMatrixPart implements IE4SavablePart, IConversationEnabled
                 descriptionResults.put(result.getUuid(), (DescriptionBase)result);
             }
         }
-        List<Object> updateRows = matrix.getDescriptions().stream().filter(row->descriptionResults.keySet().contains(((RowWrapperDTO)row).getDescription().getDescription().getUuid())).collect(Collectors.toList());
+        List<Object> updateRows = matrix.getDescriptions().stream().filter(row->descriptionResults.keySet().contains(((RowWrapperDTO)row).getDescription().getDescriptionUuid())).collect(Collectors.toList());
         for (Object updateRow: updateRows){
             if (updateRow instanceof SpecimenRowWrapperDTO){
                 SpecimenRowWrapperDTO dto = (SpecimenRowWrapperDTO)updateRow;
-                dto.getDescription().setDescription(descriptionResults.get(((SpecimenRowWrapperDTO) updateRow).getDescription().getDescription().getUuid()));
+                DescriptionBaseDto desc = DescriptionBaseDto.fromDescription(descriptionResults.get(((SpecimenRowWrapperDTO) updateRow).getDescription().getDescriptionUuid()));
+                dto.setDescription(desc);
             }
         }
 //        matrix.loadDescriptions(getDescriptiveDataSet().getUuid(), false);
@@ -277,6 +280,8 @@ public class CharacterMatrixPart implements IE4SavablePart, IConversationEnabled
             cdmEntitySession.dispose();
             cdmEntitySession = null;
         }
+        descriptiveDataSet = null;
+        this.matrix.dispose();
         dirty.setDirty(false);
     }
 
@@ -312,7 +317,8 @@ public class CharacterMatrixPart implements IE4SavablePart, IConversationEnabled
 
     @Override
     public Collection<DescriptiveDataSet> getRootEntities() {
-        return Collections.singleton(this.descriptiveDataSet);
+        //no dataset entity only dto
+        return null;
     }
 
     @Override
index 0a0df3a714ac01fbb05d0ac7392827030446ae15..3ff5489b19f109d581a3ac913d2c7b4978ad6f28 100644 (file)
@@ -87,6 +87,7 @@ public class CharacterMatrixToolbar extends Composite {
         ComboViewer comboStates = new ComboViewer(this, SWT.DROP_DOWN);
         Button btnManageState = new Button(this, SWT.PUSH);
         Button btnExcelExport = new Button(this, SWT.PUSH);
+        Button btnRefresh = new Button(this, SWT.PUSH);
 
         /**
          * Toogle tree button
@@ -255,6 +256,26 @@ public class CharacterMatrixToolbar extends Composite {
             }
         });
 
+        /**
+         * excel export
+         */
+//        btnRefresh.setToolTipText(Messages.CharacterMatrix_REFFRESH);
+        btnRefresh.setImage(ImageResources.getImage(ImageResources.REFRESH));
+        btnRefresh.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                if (matrix != null && matrix.getPart() != null){
+
+                    matrix.getPart().init(matrix.getDescriptiveDataSet().getUuid(), true);
+                    matrix.initDescriptiveDataSet();
+                    matrix.redraw();
+                }
+
+
+
+            }
+        });
+
     }
 
     private void persistTableState() {
index 0b3d459af24254d1ff3a519b3a6b0c3afb6ff60b..3a59fd0b3fd5835aa41a2626758bcc83fee5471e 100644 (file)
@@ -13,8 +13,7 @@ import java.util.TreeSet;
 
 import org.eclipse.nebula.widgets.nattable.group.ColumnGroupModel;
 
-import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.term.TermNode;
+import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
 
 /**
  * @author pplitzner
@@ -23,10 +22,10 @@ import eu.etaxonomy.cdm.model.term.TermNode;
  */
 public class ColumnGroupWrapper {
     private ColumnGroupModel model;
-    private Map<TermNode<Feature>, TreeSet<Integer>> columnGroupToIndexMap;
+    private Map<TermNodeDto, TreeSet<Integer>> columnGroupToIndexMap;
 
     public ColumnGroupWrapper(ColumnGroupModel model,
-            Map<TermNode<Feature>, TreeSet<Integer>> columnGroupToIndexMap) {
+            Map<TermNodeDto, TreeSet<Integer>> columnGroupToIndexMap) {
         this.model = model;
         this.columnGroupToIndexMap = columnGroupToIndexMap;
     }
@@ -37,10 +36,10 @@ public class ColumnGroupWrapper {
     public void setModel(ColumnGroupModel model) {
         this.model = model;
     }
-    public Map<TermNode<Feature>, TreeSet<Integer>> getColumnGroupToIndexMap() {
+    public Map<TermNodeDto, TreeSet<Integer>> getColumnGroupToIndexMap() {
         return columnGroupToIndexMap;
     }
-    public void setColumnGroupToIndexMap(Map<TermNode<Feature>, TreeSet<Integer>> columnGroupToIndexMap) {
+    public void setColumnGroupToIndexMap(Map<TermNodeDto, TreeSet<Integer>> columnGroupToIndexMap) {
         this.columnGroupToIndexMap = columnGroupToIndexMap;
     }
 
index 1ca70e7e1a278e216695faec3b4a442adb97022b..4b795074c817288d85ec614cc80fc56eb0a6a5bf 100644 (file)
@@ -19,9 +19,9 @@ import ca.odell.glazedlists.TreeList;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;
 import eu.etaxonomy.cdm.api.service.dto.SpecimenRowWrapperDTO;
-import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
-import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.persistence.dto.DescriptiveDataSetBaseDto;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
+import eu.etaxonomy.cdm.persistence.dto.TermDto;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
@@ -34,13 +34,13 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  */
  public class DescriptionTreeFormat implements TreeList.Format<Object> {
 
-     private Rank maxRank;
+     private TermDto maxRank;
 
      private Integer deepestTaxonLevel = null;
 
      private Map<UUID, TaxonNodeDto> uuidToTaxonNodeDtoMap = new HashMap<>();
 
-     public DescriptionTreeFormat(DescriptiveDataSet descriptiveDataSet) {
+     public DescriptionTreeFormat(DescriptiveDataSetBaseDto descriptiveDataSet) {
          this.maxRank = descriptiveDataSet.getMaxRank();
      }
 
@@ -75,7 +75,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
          level++;
 
          if(node!=null){
-             if(maxRank!=null && node.getRankOrderIndex()!=null && node.getRankOrderIndex()==maxRank.getOrderIndex()){
+             if(maxRank!=null && node.getRankOrderIndex()!=null && node.getRankOrderIndex().equals(maxRank.getOrderIndex())){
                  path.add(node);
                  return level;
              }
@@ -83,13 +83,16 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
              if(parentNodeDto==null){
                  parentNodeDto = CdmStore.getService(ITaxonNodeService.class).parentDto(node.getUuid());
                  if(parentNodeDto!=null){
-                     uuidToTaxonNodeDtoMap.put(node.getParentUUID(), parentNodeDto);
+                     uuidToTaxonNodeDtoMap.put(parentNodeDto.getUuid(), parentNodeDto);
                  }
              }
-             if(parentNodeDto!=null){
+             if (parentNodeDto != null){
                  level = addPathRecursive(path, parentNodeDto, level);
                  path.add(node);
              }
+
+
+
          }
          return level;
      }
index e8c6bbebf2e07de56706fccef317e84691fd41e9..b480bbff421202247ed13eda04b16f9b1ac768cd 100644 (file)
@@ -10,11 +10,9 @@ package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix;
 
 import java.util.Comparator;
 
+import eu.etaxonomy.cdm.api.service.dto.DescriptionBaseDto;
 import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;
-import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.DescriptionType;
-import eu.etaxonomy.cdm.model.description.SpecimenDescription;
-import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDtoByNameComparator;
 
@@ -79,33 +77,33 @@ public class MatrixRowComparator implements Comparator<Object>{
             else{
                 // same taxon node
             }
-            DescriptionBase description1 = rowWrapper1.getDescription().getDescription();
-            DescriptionBase description2 = rowWrapper2.getDescription().getDescription();
+            DescriptionBaseDto description1 = rowWrapper1.getDescription();
+            DescriptionBaseDto description2 = rowWrapper2.getDescription();
             //compare by taxon description type
-            if(description1 instanceof TaxonDescription){
-                if(description2 instanceof SpecimenDescription){
+            if(description1.getTaxonDto() != null){
+                if(description2.getSpecimenDto() != null){
                     return -1;
                 }
             }
             else{
-                if(description2 instanceof TaxonDescription){
+                if(description2.getTaxonDto() != null){
                     return 1;
                 }
             }
             //both descriptions are of the same type
-            if(description1 instanceof SpecimenDescription){
+            if(description1.getSpecimenDto() != null){
                 //description2 has to also be a SpecimenDescription
-                return compareSpecimenDescriptions((SpecimenDescription)description1, (SpecimenDescription)description2);
+                return compareSpecimenDescriptions(description1, description2);
             }
-            else if(description1 instanceof TaxonDescription){
+            else if(description1.getTaxonDto() != null){
                 //description2 has to also be a TaxonDescription
-                return compareTaxonDescriptions((TaxonDescription)description1, (TaxonDescription)description2);
+                return compareTaxonDescriptions(description1, description2);
             }
         }
         return o1.hashCode()-o2.hashCode();
     }
 
-    private int compareTaxonDescriptions(TaxonDescription taxonDescription1, TaxonDescription taxonDescription2) {
+    private int compareTaxonDescriptions(DescriptionBaseDto taxonDescription1, DescriptionBaseDto taxonDescription2) {
         boolean isComputed1 = taxonDescription1.getTypes().stream()
                 .anyMatch(type -> type.equals(DescriptionType.AGGREGATED_STRUC_DESC));
         boolean isComputed2 = taxonDescription2.getTypes().stream()
@@ -134,10 +132,10 @@ public class MatrixRowComparator implements Comparator<Object>{
         return taxonDescription1.hashCode()-taxonDescription2.hashCode();
     }
 
-    private int compareSpecimenDescriptions(SpecimenDescription specimenDescription1,
-            SpecimenDescription specimenDescription2) {
-        int id1 = specimenDescription1.getDescribedSpecimenOrObservation().getId();
-        int id2 = specimenDescription2.getDescribedSpecimenOrObservation().getId();
+    private int compareSpecimenDescriptions(DescriptionBaseDto specimenDescription1,
+            DescriptionBaseDto specimenDescription2) {
+        int id1 = specimenDescription1.getSpecimenDto().getId();
+        int id2 = specimenDescription2.getSpecimenDto().getId();
         return id1-id2;
     }
 
index 909d80fe3a16fe97941f28facecb418458a66078..44f33003d2a5b75447da57227558c5499994653d 100644 (file)
@@ -18,6 +18,7 @@ import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.dto.FeatureDto;
 import eu.etaxonomy.taxeditor.model.ImageResources;
 
 /**
@@ -33,8 +34,8 @@ public class MatrixUtility {
      * @param feature
      * @return
      */
-    public static String getProperty(Feature feature){
-        return feature.getLabel();
+    public static String getProperty(FeatureDto feature){
+        return feature.getTitleCache();
     }
 
     /**
@@ -70,7 +71,7 @@ public class MatrixUtility {
     }
 
     private static boolean hasType(TaxonRowWrapperDTO taxonRowWrapperDTO, DescriptionType descriptionType){
-        return taxonRowWrapperDTO.getDescription().getDescription().getTypes().stream()
+        return taxonRowWrapperDTO.getDescription().getTypes().stream()
         .anyMatch(type->type.equals(descriptionType));
     }
 
@@ -85,5 +86,10 @@ public class MatrixUtility {
     public static Image getDefaultDescriptionIcon() {
         return ImageResources.getImage(ImageResources.VALIDATE_ICON);
     }
+
+//    private static boolean hasType(TaxonRowWrapperDTO taxonRowWrapperDTO, DescriptionType descriptionType){
+//        return taxonRowWrapperDTO.getDescription().getTypes().stream()
+//        .anyMatch(type->type.equals(descriptionType));
+//    }
 }
 
index c9788856dd1eed65e431ddad828a849cc178abf7..690c2d0090ff91cd844e26cd2444b62740192938 100644 (file)
@@ -8,23 +8,16 @@
 */
 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.FeatureDto;
 import eu.etaxonomy.cdm.persistence.dto.TermDto;
-import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * Property accessor class which maps setting and getting data for
@@ -67,16 +60,19 @@ public class SpecimenColumnPropertyAccessor implements IColumnPropertyAccessor<O
             default:
                 break;
             }
-            Feature feature = matrix.getIndexToFeatureMap().get(columnIndex);
-            return rowWrapper.getDisplayDataForFeature(feature);
+            FeatureDto feature = matrix.getIndexToFeatureMap().get(columnIndex);
+            return rowWrapper.getDisplayDataForFeature(feature.getUuid());
         }
         else if(rowObject instanceof TaxonRowWrapperDTO){
             TaxonRowWrapperDTO taxonWrapper = (TaxonRowWrapperDTO)rowObject;
             if(columnIndex==0){
                 return taxonWrapper.getDescription();
             }
-            Feature feature = matrix.getIndexToFeatureMap().get(columnIndex);
-            return taxonWrapper.getDisplayDataForFeature(feature);
+            FeatureDto feature = matrix.getIndexToFeatureMap().get(columnIndex);
+            if (feature == null){
+                return null;
+            }
+            return taxonWrapper.getDisplayDataForFeature(feature.getUuid());
 
         }
         else if (columnIndex == 0) {
@@ -90,20 +86,20 @@ public class SpecimenColumnPropertyAccessor implements IColumnPropertyAccessor<O
         if(rowObject instanceof RowWrapperDTO){
             RowWrapperDTO rowWrapper = (RowWrapperDTO)rowObject;
 
-            Feature feature = matrix.getIndexToFeatureMap().get(columnIndex);
+            FeatureDto feature = matrix.getIndexToFeatureMap().get(columnIndex);
             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);
+//                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.getUuid(), dtos);
                 matrix.putRowToMerge(rowWrapper);
             }
         }
index 7a09f61c9ed32182ea64ca0b8c116d5fcd528a97..135b56f944976be5e8ed3cd4fa7109fa8d6ab21c 100644 (file)
@@ -13,7 +13,7 @@ import java.util.List;
 
 import org.eclipse.nebula.widgets.nattable.edit.editor.IComboBoxDataProvider;
 
-import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.persistence.dto.FeatureDto;
 import eu.etaxonomy.cdm.persistence.dto.TermDto;
 import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrix;
 
@@ -33,8 +33,8 @@ public class CategoricalComboBoxDataProvider implements IComboBoxDataProvider {
 
     @Override
     public List<?> getValues(int columnIndex, int rowIndex) {
-        Feature feature = matrix.getIndexToFeatureMap().get(columnIndex);
-        List<TermDto> supportedStatesForCategoricalFeature = matrix.getSupportedStatesForCategoricalFeature(feature);
+        FeatureDto feature = matrix.getIndexToFeatureMap().get(columnIndex);
+        List<TermDto> supportedStatesForCategoricalFeature = matrix.getSupportedStatesForCategoricalFeature(feature.getUuid());
         return supportedStatesForCategoricalFeature;
     }
 
index 389279a39a45fa94071f544a25af7343a1f649c4..e3d20fd230ba1056434a557f3c575f56e12eaffa 100644 (file)
@@ -16,7 +16,7 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 
 import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;
-import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.persistence.dto.FeatureDto;
 import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrix;
 
 /**
@@ -42,7 +42,7 @@ public class CategoricalDataCellEditor extends ComboBoxCellEditor{
         if(canonicalValue==null){
             Object rowWrapper = matrix.getBodyDataProvider().getRowObject(this.getRowIndex());
             if(rowWrapper instanceof RowWrapperDTO){
-                Feature feature = matrix.getIndexToFeatureMap().get(getColumnIndex());
+                FeatureDto feature = matrix.getIndexToFeatureMap().get(getColumnIndex());
                 // FIXME avoid creating empty CategoricalData
                 ((RowWrapperDTO) rowWrapper).addCategoricalData(feature);
             }
index 69b7a454a7927931876f4a240e63059f3980a3ec..74c1d052dd654b3f511e9ec1a0116e3650037612 100644 (file)
@@ -29,7 +29,7 @@ public class CategoricalDataDisplayConverter extends DisplayConverter {
     public Object canonicalToDisplayValue(Object canonicalValue) {
         if(canonicalValue instanceof TermDto){
             ((TermDto) canonicalValue).localize(new TermRepresentation_L10n());
-            return ((TermDto) canonicalValue).getRepresentation_L10n();
+            return ((TermDto) canonicalValue).getTitleCache();
         }
         else if (canonicalValue instanceof Collection) {
             // Collection.toString() will add [ and ] around
index 7bb418f4c7aec8d6813ea56f2def3e5a4e9747a6..b5613a4ab4940c085c6d72e7b6bba1f548c85392 100755 (executable)
@@ -37,9 +37,9 @@ import eu.etaxonomy.cdm.api.service.dto.TaxonRowWrapperDTO;
 import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
 import eu.etaxonomy.cdm.filter.TaxonNodeFilter;
 import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
-import eu.etaxonomy.cdm.model.location.NamedArea;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.dto.DescriptiveDataSetBaseDto;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
+import eu.etaxonomy.cdm.persistence.dto.TermDto;
 import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrix;
 import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrixPart;
 import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;
@@ -73,9 +73,9 @@ public class AggregationHandler {
                 nodeDtos.add((TaxonNodeDto)o);
             }
         }
-        TaxonNodeFilter filter = TaxonNodeFilter.NewRankInstance(matrix.getDescriptiveDataSet().getMinRank(),
-                matrix.getDescriptiveDataSet().getMaxRank());
-        for (NamedArea namedArea : matrix.getDescriptiveDataSet().getGeoFilter()) {
+        TaxonNodeFilter filter = TaxonNodeFilter.NewRankInstance(matrix.getDescriptiveDataSet().getMinRank().getUuid(),
+                matrix.getDescriptiveDataSet().getMaxRank().getUuid());
+        for (TermDto namedArea : matrix.getDescriptiveDataSet().getGeoFilter()) {
             filter = filter.orArea(namedArea.getUuid());
         }
 
@@ -85,8 +85,8 @@ public class AggregationHandler {
                 filter = filter.orSubtree(dto.getUuid());
             }
         }else{
-            for (TaxonNode taxonNode : matrix.getDescriptiveDataSet().getTaxonSubtreeFilter()) {
-                filter = filter.orSubtree(taxonNode);
+            for (TaxonNodeDto taxonNode : matrix.getDescriptiveDataSet().getSubTreeFilter()) {
+                filter = filter.orSubtree(taxonNode.getUuid());
             }
         }
         config.setTaxonNodeFilter(filter);
@@ -128,7 +128,8 @@ public class AggregationHandler {
                     DescriptiveDataSet dataSet = (DescriptiveDataSet) ((UpdateResult) resultObject).getCdmEntity();
                     dataSet = matrix.getCdmEntitiySession().load(dataSet, true);
                     // update local dataset
-                    matrix.setDescriptiveDataSet(dataSet);
+                    DescriptiveDataSetBaseDto dto = DescriptiveDataSetBaseDto.fromDescriptiveDataSet(dataSet);
+                    matrix.setDescriptiveDataSet(dto);
                     matrix.loadDescriptions(false, false);
                 }
             } catch (InterruptedException e) {
index 124dfb101d66812dbeb14e65dbd3558517d35fc7..1fa8a3b68abab116bc98a072b6c8d0e58ada25e2 100644 (file)
@@ -17,8 +17,8 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 
 import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
 import eu.etaxonomy.cdm.model.description.DescriptionType;
-import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.persistence.dto.DescriptiveDataSetBaseDto;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrixPart;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -41,7 +41,7 @@ public class CreateDefaultTaxonDescriptionHandler extends CreateTaxonDescription
         boolean canExecute = super.canExecute(activePart, menuItem);
         if(canExecute){
             CharacterMatrixPart matrixPart = (CharacterMatrixPart) activePart.getObject();
-            DescriptiveDataSet descriptiveDataSet = matrixPart.getDescriptiveDataSet();
+            DescriptiveDataSetBaseDto descriptiveDataSet = matrixPart.getDescriptiveDataSet();
             IStructuredSelection selection = ((CharacterMatrixPart)activePart.getObject()).getSelection();
             TaxonNodeDto taxonNodeDto = (TaxonNodeDto) selection.getFirstElement();
 
index d500e81911d08c45f76ee48d7c1f8ad4ff180e78..c743eb58d230511dce771971511458e2289c1b95 100644 (file)
@@ -21,7 +21,7 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
 import eu.etaxonomy.cdm.api.service.dto.TaxonRowWrapperDTO;
 import eu.etaxonomy.cdm.model.description.DescriptionType;
-import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
+import eu.etaxonomy.cdm.persistence.dto.DescriptiveDataSetBaseDto;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrixPart;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -40,7 +40,7 @@ public abstract class CreateTaxonDescriptionHandler {
         if(StoreUtil.promptCheckIsDirty(matrixPart)){
             return;
         }
-        DescriptiveDataSet descriptiveDataSet = matrixPart.getDescriptiveDataSet();
+        DescriptiveDataSetBaseDto descriptiveDataSet = matrixPart.getDescriptiveDataSet();
         TaxonNodeDto node = (TaxonNodeDto) matrixPart.getSelection().getFirstElement();
         TaxonRowWrapperDTO taxonRowWrapperDTO = CdmStore.getService(IDescriptiveDataSetService.class)
                 .createTaxonDescription(descriptiveDataSet.getUuid(), node.getUuid(), getDescriptionType());
index 58c6643cb88c32b8803c5dfa1e9b0de73886dab8..039a5615fe25b7eaf2a04f4b06a5c9c2fe5707c4 100755 (executable)
@@ -20,12 +20,11 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.widgets.Shell;
 
 import eu.etaxonomy.cdm.api.service.config.RemoveDescriptionsFromDescriptiveDataSetConfigurator;
+import eu.etaxonomy.cdm.api.service.dto.DescriptionBaseDto;
 import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;
 import eu.etaxonomy.cdm.api.service.dto.SpecimenRowWrapperDTO;
-import eu.etaxonomy.cdm.model.description.DescriptionBase;
-import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
-import eu.etaxonomy.cdm.model.description.SpecimenDescription;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.cdm.persistence.dto.DescriptiveDataSetBaseDto;
 import eu.etaxonomy.cdm.persistence.dto.SpecimenNodeWrapper;
 import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
 import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrixPart;
@@ -47,17 +46,17 @@ public class DeleteDescriptionHandler{
 //        if(StoreUtil.promptCheckIsDirty(matrixPart)){
 //            return;
 //        }
-        DescriptiveDataSet descriptiveDataSet = matrixPart.getDescriptiveDataSet();
+        DescriptiveDataSetBaseDto descriptiveDataSet = matrixPart.getDescriptiveDataSet();
         RowWrapperDTO wrapper = (RowWrapperDTO) matrixPart.getSelection().getFirstElement();
-        DescriptionBase description = wrapper.getDescription().getDescription();
+        DescriptionBaseDto description = wrapper.getDescription();
         RemoveDescriptionsFromDescriptiveDataSetConfigurator deleteConfig = new RemoveDescriptionsFromDescriptiveDataSetConfigurator();
 
         if (!DeleteConfiguratorDialog.openConfirmWithConfigurator(deleteConfig, shell, Messages.DeleteDescriptiveDataSetHandler_DELETE_TITLE,  Messages.CharacterMatrix_DELETE_DESCRIPTION)){
             return;
         }
         boolean ok = matrixPart.getMatrix().getDescriptions().remove(wrapper);
-        matrixPart.getMatrix().addDescriptionToDelete(description.getUuid(), deleteConfig);
-        if (description instanceof SpecimenDescription){
+        matrixPart.getMatrix().addDescriptionToDelete(description.getDescriptionUuid(), deleteConfig);
+        if (description.getSpecimenDto() != null){
             UuidAndTitleCache<SpecimenOrObservationBase> uuidAndTitleCache = new UuidAndTitleCache<>(((SpecimenRowWrapperDTO)wrapper).getSpecimenDto().getUuid(), ((SpecimenRowWrapperDTO)wrapper).getSpecimenDto().getId(), ((SpecimenRowWrapperDTO)wrapper).getSpecimenDto().getLabel());
             SpecimenNodeWrapper nodeWrapper = new SpecimenNodeWrapper(uuidAndTitleCache,
                     ((SpecimenRowWrapperDTO)wrapper).getType(),
@@ -80,7 +79,7 @@ public class DeleteDescriptionHandler{
             MHandledMenuItem menuItem){
 
             CharacterMatrixPart matrixPart = (CharacterMatrixPart) activePart.getObject();
-            DescriptiveDataSet descriptiveDataSet = matrixPart.getDescriptiveDataSet();
+            DescriptiveDataSetBaseDto descriptiveDataSet = matrixPart.getDescriptiveDataSet();
             IStructuredSelection selection = ((CharacterMatrixPart)activePart.getObject()).getSelection();
 
             boolean canExecute = selection.size()==1
index 7421a849ee5639e6f6b2268b1ed79a273a520b28..cf244fcf9b05d284a00513e303f287cc93e2b1ab 100755 (executable)
@@ -11,7 +11,6 @@ package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.handler;
 import java.util.List;
 import java.util.Set;
 import java.util.UUID;
-import java.util.stream.Collectors;
 
 import javax.inject.Named;
 
@@ -54,9 +53,7 @@ public class GeneratePolytomousKeyHandler {
         if(StoreUtil.promptCheckIsDirty(matrix.getPart())){
             return;
         }
-        Set<TaxonNodeDto> nodeDtos = matrix.getDescriptiveDataSet().getTaxonSubtreeFilter().stream()
-                .map(node->new TaxonNodeDto(node))
-                .collect(Collectors.toSet());
+        Set<TaxonNodeDto> nodeDtos = matrix.getDescriptiveDataSet().getSubTreeFilter();
         TaxonNodeDto parentDto = CdmStore.getService(ITaxonNodeService.class).findCommonParentDto(nodeDtos);
         UUID taxonUuid = parentDto.getTaxonUuid();
         int response = MessagingUtils.confirmDialog(
index b3e4589ef2710d74aafc28c09cbd6d32b44091d9..a3c8eb0710e8f2abb174f476e93f11e8f32b92ef 100644 (file)
@@ -26,9 +26,9 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 
+import eu.etaxonomy.cdm.api.service.dto.QuantitativeDataDto;
 import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;
-import eu.etaxonomy.cdm.model.description.QuantitativeData;
-import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
+import eu.etaxonomy.cdm.persistence.dto.TermDto;
 import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrix;
 
 /**
@@ -49,7 +49,7 @@ public class QuantitativeDataDialog extends CellEditDialog {
         this.matrix = matrix;
     }
 
-    private QuantitativeData editorValue;
+    private QuantitativeDataDto editorValue;
     private RowWrapperDTO<?> rowWrapperDTO;
 
     private QuantitativeDataDialogComposite composite;
@@ -60,7 +60,7 @@ public class QuantitativeDataDialog extends CellEditDialog {
         return composite;
     }
 
-    void setEditorValue(QuantitativeData editorValue) {
+    void setEditorValue(QuantitativeDataDto editorValue) {
         this.editorValue = editorValue;
     }
 
@@ -72,28 +72,28 @@ public class QuantitativeDataDialog extends CellEditDialog {
     public boolean close() {
         if(getReturnCode()==Window.OK){
             //clear values
-            editorValue.getStatisticalValues().clear();
+            editorValue.getValues().clear();
             //add back all values from text fields
-            Map<StatisticalMeasure, List<String>> measureToValueMap = new HashMap<>();
+            Map<TermDto, List<String>> measureToValueMap = new HashMap<>();
 
-            Map<StatisticalMeasure, List<Text>> textFields = composite.getTextFields();
-            Set<Entry<StatisticalMeasure,List<Text>>> entrySet = textFields.entrySet();
-            for (Entry<StatisticalMeasure, List<Text>> entry : entrySet) {
-                StatisticalMeasure statisticalMeasure = entry.getKey();
+            Map<TermDto, List<Text>> textFields = composite.getTextFields();
+            Set<Entry<TermDto,List<Text>>> entrySet = textFields.entrySet();
+            for (Entry<TermDto, List<Text>> entry : entrySet) {
+                TermDto statisticalMeasure = entry.getKey();
                 List<String> values = entry.getValue().stream()
                         .filter(text->text.isEnabled())
                         .map(text->text.getText())
                         .collect(Collectors.toList());
                 measureToValueMap.put(statisticalMeasure, values);
             }
-            rowWrapperDTO.setDataValueForQuantitativeData(editorValue.getFeature(), measureToValueMap, composite.getEditorValue().getUnit());
-//            if (composite.getEditorValue().getUnit() == null && (composite.getEditorValue().getFeature().getRecommendedMeasurementUnits() != null && composite.getEditorValue().getFeature().getRecommendedMeasurementUnits().size() == 1)){
-//                editorValue.setUnit(editorValue.getFeature().getRecommendedMeasurementUnits().iterator().next());
-//            }else{
-//                editorValue.setUnit(composite.getEditorValue().getUnit());
-//            }
-
-//            ((QuantitativeData)rowWrapperDTO.getDataValueForFeature(editorValue.getFeature())).setUnit(editorValue.getUnit());
+            rowWrapperDTO.setDataValueForQuantitativeData(editorValue.getFeatureDto().getUuid(), measureToValueMap, composite.getEditorValue().getMeasurementUnit());
+            if (composite.getEditorValue().getMeasurementUnit() == null && (composite.getEditorValue().getFeatureDto().getRecommendedMeasurementUnits() != null && composite.getEditorValue().getFeatureDto().getRecommendedMeasurementUnits().size() == 1)){
+                editorValue.setMeasurementUnit(editorValue.getFeatureDto().getRecommendedMeasurementUnits().iterator().next());
+            }else{
+                editorValue.setMeasurementUnit(composite.getEditorValue().getMeasurementUnit());
+            }
+
+            ((QuantitativeDataDto)rowWrapperDTO.getDataValueForFeature(editorValue.getFeatureDto().getUuid())).setMeasurementUnit(editorValue.getMeasurementUnit());
             matrix.putRowToMerge(rowWrapperDTO);
             matrix.setDirty();
         }
index 41db2e8c5fec840858d11cdfb7682a9880d942cd..54d5fa04e8a8412bcb49f0fc3ba242082f74129c 100644 (file)
@@ -28,10 +28,10 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
+import eu.etaxonomy.cdm.api.service.dto.QuantitativeDataDto;
 import eu.etaxonomy.cdm.common.CdmUtils;
-import eu.etaxonomy.cdm.model.description.MeasurementUnit;
-import eu.etaxonomy.cdm.model.description.QuantitativeData;
 import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
+import eu.etaxonomy.cdm.persistence.dto.TermDto;
 import eu.etaxonomy.taxeditor.model.ImageResources;
 
 /**
@@ -41,18 +41,18 @@ import eu.etaxonomy.taxeditor.model.ImageResources;
  */
 public class QuantitativeDataDialogComposite extends Composite {
 
-    private Map<StatisticalMeasure, List<Text>> textFieldMap = new HashMap<>();
-    QuantitativeData editorValue;
+    private Map<TermDto, List<Text>> textFieldMap = new HashMap<>();
+    QuantitativeDataDto editorValue;
     Combo unitCombo;
-    Map<MeasurementUnit, Integer> unitMap = null;
+    Map<TermDto, Integer> unitMap = null;
 
-    public QuantitativeDataDialogComposite(Character initialInput, QuantitativeData editorVal, Composite parent, int style) {
+    public QuantitativeDataDialogComposite(Character initialInput, QuantitativeDataDto editorVal, Composite parent, int style) {
         super(parent, style);
         this.editorValue = editorVal;
-        if (editorValue.getFeature().getRecommendedMeasurementUnits() != null && editorValue.getFeature().getRecommendedMeasurementUnits().size()>0){
+        if (editorValue.getFeatureDto().getRecommendedMeasurementUnits() != null && editorValue.getFeatureDto().getRecommendedMeasurementUnits().size()>0){
             unitMap = new HashMap<>();
             Integer i = 0;
-            for (MeasurementUnit unit: editorValue.getFeature().getRecommendedMeasurementUnits()){
+            for (TermDto unit: editorValue.getFeatureDto().getRecommendedMeasurementUnits()){
                 unitMap.put(unit, i);
                 i++;
             }
@@ -85,20 +85,20 @@ public class QuantitativeDataDialogComposite extends Composite {
         Label lblNewLabel = new Label(composite_2, SWT.NONE);
         lblNewLabel.setText("Measurement Unit");
         lblNewLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-        if (editorValue.getFeature().getRecommendedMeasurementUnits() != null && editorValue.getFeature().getRecommendedMeasurementUnits().size() == 1){
+        if (editorValue.getFeatureDto().getRecommendedMeasurementUnits() != null && editorValue.getFeatureDto().getRecommendedMeasurementUnits().size() == 1){
             Label lblUnit = new Label(composite_2, SWT.BORDER);
-            lblUnit.setText(editorValue.getFeature().getRecommendedMeasurementUnits().iterator().next().getLabel());
+            lblUnit.setText(editorValue.getFeatureDto().getRecommendedMeasurementUnits().iterator().next().getIdInVocabulary());
             lblUnit.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-            editorValue.setUnit(editorValue.getFeature().getRecommendedMeasurementUnits().iterator().next());
-        }else if (editorValue.getFeature().getRecommendedMeasurementUnits() != null && editorValue.getFeature().getRecommendedMeasurementUnits().size() > 1){
+            editorValue.setMeasurementUnit(editorValue.getFeatureDto().getRecommendedMeasurementUnits().iterator().next());
+        }else if (editorValue.getFeatureDto().getRecommendedMeasurementUnits() != null && editorValue.getFeatureDto().getRecommendedMeasurementUnits().size() > 1){
             unitCombo = new Combo(composite_2, SWT.NONE | SWT.READ_ONLY);
             unitCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-            for (Entry<MeasurementUnit, Integer> unit: unitMap.entrySet()){
+            for (Entry<TermDto, Integer> unit: unitMap.entrySet()){
                 unitCombo.add(unit.getKey().getTitleCache(), unit.getValue());
                 unitCombo.setData(unit.getKey().getTitleCache(), unit.getKey());
             }
-            if (editorValue.getUnit()!= null){
-                unitCombo.select(unitMap.get(editorValue.getUnit()));
+            if (editorValue.getMeasurementUnit()!= null){
+                unitCombo.select(unitMap.get(editorValue.getMeasurementUnit()));
             }
 
             unitCombo.addSelectionListener(new SelectionAdapter(){
@@ -106,30 +106,30 @@ public class QuantitativeDataDialogComposite extends Composite {
                 @Override
                 public void widgetSelected(SelectionEvent e) {
                     String name = unitCombo.getText();
-                    editorValue.setUnit((MeasurementUnit)unitCombo.getData(name));
+                    editorValue.setMeasurementUnit((TermDto)unitCombo.getData(name));
                 }
 
             });
         }
 
         //add empty text field for exact value
-        Text emptyTextField = addText(valuesComposite, StatisticalMeasure.EXACT_VALUE(), initialInput==null?null:initialInput.toString());
+        Text emptyTextField = addText(valuesComposite, TermDto.fromTerm(StatisticalMeasure.EXACT_VALUE()), initialInput==null?null:initialInput.toString());
         emptyTextField.setFocus();
         emptyTextField.setSelection(emptyTextField.getText().length());
 
         //add existing exact values
-        editorValue.getStatisticalValues().stream()
-        .filter(measure->measure.getType().equals(StatisticalMeasure.EXACT_VALUE()))
+        editorValue.getValues().stream()
+        .filter(measure->measure.getType().getUuid().equals(StatisticalMeasure.EXACT_VALUE().getUuid()))
         .forEach(exact->addText(valuesComposite, exact.getType(), exact.getValue().toString()));
 
 
 
         //add aggregation values
-        editorValue.getFeature().getRecommendedStatisticalMeasures()
+        editorValue.getFeatureDto().getRecommendedStatisticalMeasures()
         .stream()
-        .filter(sm->!sm.equals(StatisticalMeasure.EXACT_VALUE()))
+        .filter(sm->!sm.equals(TermDto.fromTerm(StatisticalMeasure.EXACT_VALUE())))
         .forEach(measure->{
-            BigDecimal specificStatisticalValue = editorValue.getSpecificStatisticalValue(measure);
+            BigDecimal specificStatisticalValue = editorValue.getSpecificStatisticalValue(measure.getUuid());
             addText(valuesComposite, measure, specificStatisticalValue!=null?specificStatisticalValue.toString():null);
         });
 
@@ -141,7 +141,7 @@ public class QuantitativeDataDialogComposite extends Composite {
         }
     }
 
-    private Text addText(Composite valuesComposite, StatisticalMeasure type, String value){
+    private Text addText(Composite valuesComposite, TermDto type, String value){
         Composite composite_2 = new Composite(valuesComposite, SWT.NONE);
         composite_2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
         GridLayout gl_composite_2 = new GridLayout(4, false);
@@ -152,7 +152,7 @@ public class QuantitativeDataDialogComposite extends Composite {
         composite_2.setLayout(gl_composite_2);
 
         Label lblNewLabel = new Label(composite_2, SWT.NONE);
-        lblNewLabel.setText(type.getLabel());
+        lblNewLabel.setText(type.getTitleCache());
 
         Text text = new Text(composite_2, SWT.BORDER);
 
@@ -200,11 +200,11 @@ public class QuantitativeDataDialogComposite extends Composite {
         .forEach(aggEntry->aggEntry.getValue().forEach(aggText->aggText.setEnabled(enabled)));
     }
 
-    public Map<StatisticalMeasure, List<Text>> getTextFields() {
+    public Map<TermDto, List<Text>> getTextFields() {
         return textFieldMap;
     }
 
-    public QuantitativeData getEditorValue() {
+    public QuantitativeDataDto getEditorValue() {
         return editorValue;
     }
 
index c109621d286b0d97c914bb87ef344b9a3368d246..acfc69eeb9d59c363409335eaa568665b217d17b 100644 (file)
@@ -19,10 +19,10 @@ import org.eclipse.nebula.widgets.nattable.widget.EditModeEnum;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 
+import eu.etaxonomy.cdm.api.service.dto.DescriptionElementDto;
+import eu.etaxonomy.cdm.api.service.dto.QuantitativeDataDto;
 import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;
-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.persistence.dto.FeatureDto;
 import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrix;
 
 /**
@@ -32,7 +32,7 @@ import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrix;
  */
 public class QuantitativeDataDialogEditor extends AbstractDialogCellEditor {
 
-    private QuantitativeData editorValue;
+    private QuantitativeDataDto editorValue;
     private RowWrapperDTO<?> rowWrapperDTO;
     private boolean closed;
     private CharacterMatrix matrix;
@@ -70,9 +70,9 @@ public class QuantitativeDataDialogEditor extends AbstractDialogCellEditor {
 
     @Override
     public void setEditorValue(Object value) {
-        ((QuantitativeDataDialog)this.dialog).setEditorValue((QuantitativeData) value);
+        ((QuantitativeDataDialog)this.dialog).setEditorValue((QuantitativeDataDto) value);
         ((QuantitativeDataDialog)this.dialog).setRowWrapper(rowWrapperDTO);
-        this.editorValue = (QuantitativeData) value;
+        this.editorValue = (QuantitativeDataDto) value;
     }
 
     @Override
@@ -92,13 +92,13 @@ public class QuantitativeDataDialogEditor extends AbstractDialogCellEditor {
             ICellEditHandler editHandler, ILayerCell cell, IConfigRegistry configRegistry) {
         this.initialInput = null;
         Object rowObject = matrix.getBodyDataProvider().getRowObject(cell.getRowIndex());
-        Feature feature = matrix.getIndexToFeatureMap().get(cell.getColumnIndex());
-        QuantitativeData quantitativeData = null;
+        FeatureDto feature = matrix.getIndexToFeatureMap().get(cell.getColumnIndex());
+        QuantitativeDataDto quantitativeData = null;
         if(rowObject instanceof RowWrapperDTO){
             rowWrapperDTO = (RowWrapperDTO<?>) rowObject;
-            DescriptionElementBase dataValueForFeature = rowWrapperDTO.getDataValueForFeature(feature);
-            if(dataValueForFeature instanceof QuantitativeData){
-                quantitativeData = (QuantitativeData) dataValueForFeature;
+            DescriptionElementDto dataValueForFeature = rowWrapperDTO.getDataValueForFeature(feature.getUuid());
+            if(dataValueForFeature instanceof QuantitativeDataDto){
+                quantitativeData = (QuantitativeDataDto) dataValueForFeature;
             }
             //create new Quantitative Data
             if (quantitativeData == null) {
index efb23dbb09b317bc7dfb336e35fc88fd2d427638..cacc81246e3fff70a2d3eef30bccf6dd27ecb271 100644 (file)
@@ -10,7 +10,7 @@ package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.quantitative;
 
 import org.eclipse.nebula.widgets.nattable.data.convert.DisplayConverter;
 
-import eu.etaxonomy.cdm.model.description.QuantitativeData;
+import eu.etaxonomy.cdm.api.service.dto.QuantitativeDataDto;
 
 /**
  * Converts QuantitativeData of one cell of the character matrix to a String.
@@ -23,7 +23,7 @@ public class QuantitativeDataEditModeDisplayConverter extends DisplayConverter {
 
     @Override
     public Object canonicalToDisplayValue(Object canonicalValue) {
-        if(canonicalValue instanceof QuantitativeData){
+        if(canonicalValue instanceof QuantitativeDataDto){
             return canonicalValue;
         }
         if(canonicalValue!=null){
index 303201ea03b5b3068fd8a5af87bf447e351048a3..6b5d1988e60f1699bbe6c48aff6e0d4f6baebf4c 100644 (file)
@@ -55,9 +55,9 @@ public class SupplementalInfoDisplayConverter extends DisplayConverter{
         else if(HibernateProxyHelper.isInstanceOf(canonicalValue, NamedArea.class)){
             displayValue = HibernateProxyHelper.deproxy(canonicalValue, NamedArea.class).getLabel();
         }else if (canonicalValue instanceof RowWrapperDTO){
-            displayValue = ((RowWrapperDTO)canonicalValue).getDescription().getDescription().getTitleCache();
+            displayValue = ((RowWrapperDTO)canonicalValue).getDescription().getTitleCache();
         }else if (canonicalValue instanceof DescriptionBaseDto){
-            displayValue = ((DescriptionBaseDto)canonicalValue).getDescription().getTitleCache();
+            displayValue = ((DescriptionBaseDto)canonicalValue).getTitleCache();
         }
 
         if(displayValue.isEmpty() && canonicalValue!=null){
index 85baded07541f2b9c570a4e2392ef57ca9846c68..e48024c370e14f47c84c8e3fcc5c2604896efe3a 100644 (file)
@@ -28,14 +28,10 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import eu.etaxonomy.cdm.api.service.ITermService;
 import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.description.MeasurementUnit;
-import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
 import eu.etaxonomy.cdm.model.term.TermType;
-import eu.etaxonomy.cdm.model.term.TermVocabulary;
 import eu.etaxonomy.cdm.persistence.dto.FeatureDto;
 import eu.etaxonomy.cdm.persistence.dto.TermDto;
-import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
 import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
 import eu.etaxonomy.taxeditor.editor.definedterm.e4.DefinedTermEditorE4;
 import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput;
@@ -125,38 +121,7 @@ public class OpenDefinedTermEditorHandlerE4 {
                        FeatureDto featureDto = null;
                        if (term instanceof Feature){
                            Feature feature = (Feature)term;
-                           Set<TermVocabularyDto> supportedCategoricalEnumerations = new HashSet<>();
-                           if (feature.getSupportedCategoricalEnumerations()!= null && !feature.getSupportedCategoricalEnumerations().isEmpty()){
-                               for (TermVocabulary voc: feature.getSupportedCategoricalEnumerations()){
-                                   supportedCategoricalEnumerations.add(TermVocabularyDto.fromVocabulary(voc));
-                               }
-                           }
-                           Set<TermVocabularyDto> recommendedModifierEnumerations = new HashSet<>();
-                           if (feature.getRecommendedModifierEnumeration()!= null && !feature.getRecommendedModifierEnumeration().isEmpty()){
-                            for (TermVocabulary voc: feature.getRecommendedModifierEnumeration()){
-                                recommendedModifierEnumerations.add(TermVocabularyDto.fromVocabulary(voc));
-                            }
-                        }
-                           Set<TermDto> recommendedMeasurementUnits = new HashSet<>();
-                        if (feature.getRecommendedMeasurementUnits()!= null && !feature.getRecommendedMeasurementUnits().isEmpty()){
-                            for (MeasurementUnit unit: feature.getRecommendedMeasurementUnits()){
-                                recommendedMeasurementUnits.add(TermDto.fromTerm(unit));
-                            }
-                        }
-                        Set<TermDto> recommendedStatisticalMeasures = new HashSet<>();
-                        if (feature.getRecommendedStatisticalMeasures()!= null && !feature.getRecommendedStatisticalMeasures().isEmpty()){
-                            for (StatisticalMeasure measures: feature.getRecommendedStatisticalMeasures()){
-                                recommendedStatisticalMeasures.add(TermDto.fromTerm(measures));
-                            }
-                        }
-
-
-                           featureDto = new FeatureDto(term.getUuid(), term.getRepresentations(), term.getPartOf() != null? term.getPartOf().getUuid(): null, term.getKindOf() != null? term.getKindOf().getUuid(): null,
-                                   term.getVocabulary()!= null? term.getVocabulary().getUuid(): null, null, term.getIdInVocabulary(), term.getVocabulary()!= null?term.getVocabulary().getRepresentations(): null, feature.isAvailableForTaxon(),
-                                   feature.isAvailableForTaxonName(),feature.isAvailableForOccurrence(), feature.getTitleCache(), feature.isSupportsCategoricalData(), feature.isSupportsQuantitativeData(),
-                                   supportedCategoricalEnumerations, recommendedModifierEnumerations, recommendedMeasurementUnits, recommendedStatisticalMeasures);
-//                        featureDto = FeatureDto.fromFeature(feature);
-
+                           featureDto = FeatureDto.fromFeature(feature);
                        }else{
                            dto = TermDto.fromTerm(term);
                        }
index 6a1bb4ca55f8444b960980cbeba1e4833bc56845..7367100253cf5992b0887f4791bc573921ce2a12 100755 (executable)
@@ -23,7 +23,6 @@ public class CdmCheckBoxTreeViewer extends CheckboxTreeViewer {
      */
     public CdmCheckBoxTreeViewer(Tree tree) {
         super(tree);
-        // TODO Auto-generated constructor stub
     }
 
     @Override
index 24a289d11a0615295d481c20e6bd22ceacda0ec5..cb806b8ed665216b0061d37575f4dbbfa3a34d1f 100755 (executable)
@@ -305,7 +305,7 @@ public class DetailsViewerE4 extends AbstractCdmDataViewer {
                     isUseDescription = true;
                 }
             }
-            if (((DescriptionElementBase)input).getInDescription().isComputed() && PreferencesUtil.isComputedDesciptionHandlingDisabled()){
+            if (((DescriptionElementBase)input).getInDescription() != null && ((DescriptionElementBase)input).getInDescription().isComputed() && PreferencesUtil.isComputedDesciptionHandlingDisabled()){
                 this.setDetailsEnabled(false);
             }
             if (isUseDescription == true && input instanceof CategoricalData) {