ref #9861: check applicability of feature
authorKatja Luther <k.luther@bgbm.org>
Wed, 1 Dec 2021 12:44:48 +0000 (13:44 +0100)
committerKatja Luther <k.luther@bgbm.org>
Wed, 1 Dec 2021 12:44:48 +0000 (13:44 +0100)
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/CharacterMatrixConfigLabelAccumulator.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/categorical/CategoricalDataCellEditor.java

index 6c97a5f8ccd61d30a46bb41600f5a19a942c8c86..c37afcedc6b87bbeeddc45d11cc537545edbb26b 100644 (file)
@@ -173,6 +173,7 @@ public class CharacterMatrix extends Composite {
     private HashMap<UUID, RowWrapperDTO<?>> rowsToMerge = new HashMap<>();
 
     private Map<Integer, FeatureDto> indexToFeatureMap = new HashMap<>();
+    private Map<UUID, Integer> featureToIndexMap = new HashMap<>();
 
     private Map<UUID, List<TermDto>> categoricalFeatureToStateMap = new HashMap<>();
 
@@ -680,7 +681,7 @@ public class CharacterMatrix extends Composite {
 
     private void initLabels(int index, FeatureDto feature) {
         indexToFeatureMap.put(index+LEADING_COLUMN_COUNT, feature);
-
+        featureToIndexMap.put(feature.getUuid(), index+LEADING_COLUMN_COUNT);
         String label = feature.getTitleCache();
         String property = feature.getUuid().toString();
         //show unit for quantitative data
@@ -794,7 +795,15 @@ public class CharacterMatrix extends Composite {
         return indexToFeatureMap;
     }
 
-    public LinkedMap<String, String> getPropertyToLabelMap() {
+    public Map<UUID, Integer> getFeatureToIndexMap() {
+               return featureToIndexMap;
+       }
+
+       public void setFeatureToIndexMap(Map<UUID, Integer> featureToIndexMap) {
+               this.featureToIndexMap = featureToIndexMap;
+       }
+
+       public LinkedMap<String, String> getPropertyToLabelMap() {
         return propertyToLabelMap;
     }
 
@@ -937,6 +946,15 @@ public class CharacterMatrix extends Composite {
 
         }
     }
+    
+    @Inject
+    @Optional
+    private void updateMatrix(@UIEventTopic(WorkbenchEventConstants.REFRESH_MATRIX)UUID uuid){
+        if(uuid!= null && uuid.equals(part.getDescriptiveDataSet().getUuid())){
+           this.specimenCache = null;
+
+        }
+    }
 
     public void addRowsToMatrix(Collection<SpecimenNodeWrapper> wrappers){
 
index b00cc602890e6e68b6991c0214e2b90b5c467703..80a6c72829c28038d9779fe389a0fa6e05d83e5c 100644 (file)
@@ -8,6 +8,7 @@
 */
 package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix;
 
+import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.Set;
 
@@ -20,9 +21,13 @@ 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.StateDataDto;
 import eu.etaxonomy.cdm.api.service.dto.TaxonRowWrapperDTO;
 import eu.etaxonomy.cdm.persistence.dto.FeatureDto;
+import eu.etaxonomy.cdm.persistence.dto.FeatureStateDto;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
+import eu.etaxonomy.cdm.persistence.dto.TermDto;
+import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
 
 /**
  * @author pplitzner
@@ -124,6 +129,9 @@ public class CharacterMatrixConfigLabelAccumulator implements IConfigLabelAccumu
                    if (hasMoreThanOneValue(feature, (RowWrapperDTO)rowObject)){
                        isEditable = false;
                    }
+                   if (!isApplicableCheck(feature, (RowWrapperDTO)rowObject)){
+                       isEditable = false;
+                   }
             }
 
             if(feature.isSupportsCategoricalData()){
@@ -188,6 +196,49 @@ public class CharacterMatrixConfigLabelAccumulator implements IConfigLabelAccumu
         
        
     }
+    
+    private boolean isApplicableCheck(FeatureDto feature, RowWrapperDTO<?> rowWrapperDTO) {
+        TermTreeDto tree = matrix.getDescriptiveDataSet().getDescriptiveSystem();
+        boolean isApplicableCheck = true;
+        if (tree.getOnlyApplicable().containsKey(feature.getUuid())){
+               
+               for (FeatureStateDto featureStateDto:tree.getOnlyApplicable().get(feature.getUuid())){
+                       FeatureDto dto = featureStateDto.getFeature();
+                       TermDto stateDto = featureStateDto.getState();
+                       Set<DescriptionElementDto> descEls = rowWrapperDTO.getDataValueForFeature(dto.getUuid());
+                       if (descEls != null){
+                               for (DescriptionElementDto el:descEls){
+                                       if (el instanceof CategoricalDataDto){
+                                               for (StateDataDto stateData:((CategoricalDataDto) el).getStates()){
+                                                       isApplicableCheck &= stateData.getState().getUuid().equals(stateDto.getUuid());
+                                               }
+                                       }
+                               }
+                       }
+               }
+               
+        }
+        if (tree.getInapplicableMap().containsKey(feature.getUuid())){
+               
+               for (FeatureStateDto featureStateDto:tree.getInapplicableMap().get(feature.getUuid())){
+                       FeatureDto dto = featureStateDto.getFeature();
+                       TermDto stateDto = featureStateDto.getState();
+                       Set<DescriptionElementDto> descEls = rowWrapperDTO.getDataValueForFeature(dto.getUuid());
+                       if (descEls != null){
+                               for (DescriptionElementDto el:descEls){
+                                       if (el instanceof CategoricalDataDto){
+                                               for (StateDataDto stateData:((CategoricalDataDto) el).getStates()){
+                                                       isApplicableCheck &= !stateData.getState().getUuid().equals(stateDto.getUuid());
+                                               }
+                                       }
+                               }
+                       }
+               }
+               
+        }
+        return isApplicableCheck;
+   
+}
 
 
     private boolean hasDefaultValue(FeatureDto feature, DescriptionBaseDto defaultDescription) {
index b3e7dce4f73e5f1238d0addb94ea2383b69e0416..ef348b79c466f6eaeed808e1bc40ae5d55b154b5 100644 (file)
@@ -76,6 +76,7 @@ public class CategoricalDataCellEditor extends ComboBoxCellEditor{
 
     @Override
     protected Control activateCell(Composite parent, Object originalCanonicalValue) {
+       
         if(matrix.getBodyDataProvider().getRowObject(this.getRowIndex()) instanceof RowWrapperDTO){
             NatCombo natCombo = (NatCombo) super.activateCell(parent, originalCanonicalValue);
             natCombo.addSelectionListener(new SelectionListener() {