ref #9816: disable field for more than one description element
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / descriptiveDataSet / matrix / CellEditorDataConversionConfiguration.java
index fd5d39573a217a2953b9915ab67cd2a01607041b..286fbddfcf5100abdf5e19bd29ecc7aae8ce9921 100644 (file)
@@ -11,11 +11,14 @@ package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 import org.eclipse.nebula.widgets.nattable.config.AbstractRegistryConfiguration;
 import org.eclipse.nebula.widgets.nattable.config.CellConfigAttributes;
+import org.eclipse.nebula.widgets.nattable.config.EditableRule;
 import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry;
 import org.eclipse.nebula.widgets.nattable.config.IEditableRule;
+import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
 import org.eclipse.nebula.widgets.nattable.edit.EditConfigAttributes;
 import org.eclipse.nebula.widgets.nattable.edit.gui.ICellEditDialog;
 import org.eclipse.nebula.widgets.nattable.style.DisplayMode;
@@ -76,7 +79,8 @@ final class CellEditorDataConversionConfiguration extends AbstractRegistryConfig
         //make cell editable
         configRegistry.registerConfigAttribute(
                 EditConfigAttributes.CELL_EDITABLE_RULE,
-                IEditableRule.ALWAYS_EDITABLE,
+                getEditRule(matrix.getBodyDataProvider()),
+//                IEditableRule.ALWAYS_EDITABLE,
                 DisplayMode.EDIT,
                 CharacterMatrixConfigLabelAccumulator.CATEGORICAL_EDITABLE
                 );
@@ -101,7 +105,8 @@ final class CellEditorDataConversionConfiguration extends AbstractRegistryConfig
         //make cell editable
         configRegistry.registerConfigAttribute(
                 EditConfigAttributes.CELL_EDITABLE_RULE,
-                IEditableRule.ALWAYS_EDITABLE,
+                getEditRule(matrix.getBodyDataProvider()),
+//                IEditableRule.ALWAYS_EDITABLE,
                 DisplayMode.EDIT,
                 CharacterMatrixConfigLabelAccumulator.QUANTITATIVE_EDITABLE
                 );
@@ -117,6 +122,8 @@ final class CellEditorDataConversionConfiguration extends AbstractRegistryConfig
                 DisplayMode.NORMAL,
                 CharacterMatrixConfigLabelAccumulator.QUANTITATIVE);
 
+        
+        
         //Open cell editor in dialog
         configRegistry.registerConfigAttribute(
                 EditConfigAttributes.OPEN_IN_DIALOG,
@@ -148,5 +155,17 @@ final class CellEditorDataConversionConfiguration extends AbstractRegistryConfig
                 DisplayMode.EDIT,
                 CharacterMatrixConfigLabelAccumulator.QUANTITATIVE_EDITABLE);
     }
+   
+    
+    private static IEditableRule getEditRule(final IDataProvider dataProvider) {
+                       return new EditableRule(){
+                       public boolean isEditable(int columnIndex, int rowIndex) {
+                               Object dataValue = dataProvider.getDataValue(columnIndex, rowIndex);
+                               if (dataValue instanceof Set && ((Set)dataValue).size()>1){
+                                       return false;
+                               }else return true;
+                               }
+                       };
+               }
 
 }