You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2021/04/29 08:25:27 UTC

[empire-db] branch master updated: EMPIREDB-348 Rework disabled / readonly

This is an automated email from the ASF dual-hosted git repository.

doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git


The following commit(s) were added to refs/heads/master by this push:
     new ec9994b  EMPIREDB-348 Rework disabled / readonly
ec9994b is described below

commit ec9994b68b4ccfa44b63ccbf8e646ef71608a4f6
Author: Rainer Döbele <do...@apache.org>
AuthorDate: Thu Apr 29 10:25:23 2021 +0200

    EMPIREDB-348
    Rework disabled / readonly
---
 .../apache/empire/jsf2/components/SelectTag.java   |  5 +-
 .../empire/jsf2/controls/CheckboxInputControl.java | 16 ++-----
 .../apache/empire/jsf2/controls/InputControl.java  | 13 ++++-
 .../empire/jsf2/controls/RadioInputControl.java    |  5 +-
 .../empire/jsf2/controls/SelectInputControl.java   |  6 +--
 .../empire/jsf2/controls/TextAreaInputControl.java | 14 +++---
 .../empire/jsf2/controls/TextInputControl.java     | 16 +++----
 .../empire/jsf2/utils/TagEncodingHelper.java       | 56 ++++++++++++++--------
 8 files changed, 75 insertions(+), 56 deletions(-)

diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
index 575fb00..412e5d6 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
@@ -40,6 +40,7 @@ import org.apache.empire.jsf2.app.FacesUtils;
 import org.apache.empire.jsf2.app.TextResolver;
 import org.apache.empire.jsf2.controls.InputAttachedObjectsHandler;
 import org.apache.empire.jsf2.controls.InputControl;
+import org.apache.empire.jsf2.controls.InputControl.DisabledType;
 import org.apache.empire.jsf2.controls.InputControl.InputInfo;
 import org.apache.empire.jsf2.controls.InputControlManager;
 import org.apache.empire.jsf2.controls.SelectInputControl;
@@ -155,9 +156,9 @@ public class SelectTag extends UIInput implements NamingContainer
         }
 
         @Override
-        public boolean isFieldReadOnly()
+        public DisabledType getDisabled()
         {
-            return false;
+            return (SelectTag.this.isDisabled() ? DisabledType.DISABLED : DisabledType.NO);
         }
 
         @Override
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/CheckboxInputControl.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/CheckboxInputControl.java
index 20fc7e9..1d6b129 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/CheckboxInputControl.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/CheckboxInputControl.java
@@ -30,6 +30,7 @@ import javax.faces.event.PhaseId;
 import org.apache.empire.commons.ObjectUtils;
 import org.apache.empire.exceptions.InvalidArgumentException;
 import org.apache.empire.exceptions.UnexpectedReturnValueException;
+import org.apache.empire.jsf2.controls.InputControl.DisabledType;
 
 public class CheckboxInputControl extends InputControl
 {
@@ -96,21 +97,12 @@ public class CheckboxInputControl extends InputControl
         }
         HtmlSelectBooleanCheckbox input = (HtmlSelectBooleanCheckbox) comp;
         // disabled
-        Object dis = ii.getAttributeEx("disabled");
-        if (dis != null)
-        {
-            input.setDisabled(ObjectUtils.getBoolean(dis));
-        }
-        // field-readOnly
-        if (ObjectUtils.getBoolean(dis) == false)
-        {
-            input.setReadonly(ii.isFieldReadOnly());
-            input.setDisabled(ii.isFieldReadOnly());
-        }
+        boolean disabled = ii.isDisabled();
+        input.setDisabled(disabled);
         // check phase
         if (phaseId==PhaseId.RENDER_RESPONSE)
         {   // style
-            addRemoveDisabledStyle(input, input.isDisabled());
+            addRemoveDisabledStyle(input, disabled);
             // set value
             setInputValue(input, ii);
         }
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
index f940c72..38b902a 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
@@ -87,6 +87,17 @@ public abstract class InputControl
     }
 
     /**
+     * DisabledType
+     * @author doebele
+     */
+    public enum DisabledType 
+    {
+        NO,
+        READONLY,
+        DISABLED;
+    }
+    
+    /**
      * This interface allows access to a value and its metainformation
      * used with the renderData function
      */
@@ -137,7 +148,7 @@ public abstract class InputControl
         
         boolean isDisabled(); // disabled or readOnly
 
-        boolean isFieldReadOnly(); // not disabled only readOnly (for input[type=text] only!)
+        DisabledType getDisabled();
         // input
 
         String getInputId();
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/RadioInputControl.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/RadioInputControl.java
index 5231521..feb929d 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/RadioInputControl.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/RadioInputControl.java
@@ -39,6 +39,7 @@ import org.apache.empire.data.Column;
 import org.apache.empire.exceptions.InvalidArgumentException;
 import org.apache.empire.exceptions.UnexpectedReturnValueException;
 import org.apache.empire.jsf2.app.TextResolver;
+import org.apache.empire.jsf2.controls.InputControl.DisabledType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -137,7 +138,7 @@ public class RadioInputControl extends InputControl
         // add
         compList.add(input);
         // style
-        addRemoveDisabledStyle(input, input.isDisabled());
+        addRemoveDisabledStyle(input, disabled);
         addRemoveInvalidStyle(input, ii.hasError());
         // Set Value
         setInputValue(input, ii);
@@ -165,7 +166,7 @@ public class RadioInputControl extends InputControl
         }
         if (phaseId==PhaseId.RENDER_RESPONSE)
         {   // style
-            addRemoveDisabledStyle(input, input.isDisabled());
+            addRemoveDisabledStyle(input, disabled);
             addRemoveInvalidStyle(input, ii.hasError());
             // set value
             setInputValue(input, ii);
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
index 9f39584..be78fed 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
@@ -82,14 +82,14 @@ public class SelectInputControl extends InputControl
         // copy Attributes
         copyAttributes(parent, ii, input);
         // disabled
-        boolean disabled = ii.isDisabled() || ii.isFieldReadOnly();
+        boolean disabled = ii.isDisabled();
         input.setDisabled(disabled);
         // Options
         initOptions(input, ii.getTextResolver(), ii);
         // add
         compList.add(input);
         // style
-        addRemoveDisabledStyle(input, input.isDisabled());
+        addRemoveDisabledStyle(input, disabled);
         addRemoveInvalidStyle(input, ii.hasError());
         // Set Value
         setInputValue(input, ii);
@@ -116,7 +116,7 @@ public class SelectInputControl extends InputControl
         }
         if (phaseId==PhaseId.RENDER_RESPONSE)
         {   // style
-            addRemoveDisabledStyle(input, input.isDisabled());
+            addRemoveDisabledStyle(input, disabled);
             addRemoveInvalidStyle(input, ii.hasError());
             // set value
             setInputValue(input, ii);
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextAreaInputControl.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextAreaInputControl.java
index ed890d5..02a713e 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextAreaInputControl.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextAreaInputControl.java
@@ -30,6 +30,7 @@ import org.apache.empire.commons.ObjectUtils;
 import org.apache.empire.commons.StringUtils;
 import org.apache.empire.exceptions.InvalidArgumentException;
 import org.apache.empire.exceptions.UnexpectedReturnValueException;
+import org.apache.empire.jsf2.controls.InputControl.DisabledType;
 import org.apache.empire.jsf2.controls.InputControl.ValueInfo;
 
 public class TextAreaInputControl extends InputControl
@@ -107,16 +108,15 @@ public class TextAreaInputControl extends InputControl
         }
         HtmlInputTextarea input = (HtmlInputTextarea)comp;
         // disabled
-        Object dis = ii.getAttributeEx("disabled");
-        if (dis!=null)
-            input.setDisabled(ObjectUtils.getBoolean(dis));
-        // field-readOnly
-        if (ObjectUtils.getBoolean(dis)==false)
-            input.setReadonly(ii.isFieldReadOnly());
+        DisabledType disabled = ii.getDisabled();
+        if (disabled!=null)
+        {   input.setReadonly((disabled==DisabledType.READONLY));
+            input.setDisabled((disabled==DisabledType.DISABLED));
+        }
         // Set Value
         if (phaseId==PhaseId.RENDER_RESPONSE)
         {   // style
-            addRemoveDisabledStyle(input, (input.isDisabled() || input.isReadonly()));
+            addRemoveDisabledStyle(input, (disabled!=null && disabled!=DisabledType.NO));
             addRemoveInvalidStyle(input, ii.hasError());
             // set value
             setInputValue(input, ii);
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextInputControl.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextInputControl.java
index ad71344..479ae51 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextInputControl.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextInputControl.java
@@ -43,6 +43,7 @@ import org.apache.empire.data.Column;
 import org.apache.empire.data.DataType;
 import org.apache.empire.exceptions.InvalidArgumentException;
 import org.apache.empire.exceptions.UnexpectedReturnValueException;
+import org.apache.empire.jsf2.controls.InputControl.DisabledType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -126,20 +127,15 @@ public class TextInputControl extends InputControl
         // modified
         addRemoveStyle(input, InputControl.STYLECLASS_MODIFIED, ii.isModified());
         // disabled
-        Object dis = ii.getAttributeEx("disabled");
-        if (dis != null)
-        {
-            input.setDisabled(ObjectUtils.getBoolean(dis));
-        }
-        // field-readOnly
-        if (ObjectUtils.getBoolean(dis) == false)
-        {
-            input.setReadonly(ii.isFieldReadOnly());
+        DisabledType disabled = ii.getDisabled();
+        if (disabled!=null)
+        {   input.setReadonly((disabled==DisabledType.READONLY));
+            input.setDisabled((disabled==DisabledType.DISABLED));
         }
         // set value
         if (phaseId==PhaseId.RENDER_RESPONSE)
         {   // style
-            addRemoveDisabledStyle(input, (input.isDisabled() || input.isReadonly()));
+            addRemoveDisabledStyle(input, (disabled!=null && disabled!=DisabledType.NO));
             addRemoveInvalidStyle(input, ii.hasError());
             // set value
             setInputValue(input, ii);
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
index 8fea07a..3c52da4 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
@@ -69,6 +69,7 @@ import org.apache.empire.jsf2.components.LabelTag;
 import org.apache.empire.jsf2.components.LinkTag;
 import org.apache.empire.jsf2.components.RecordTag;
 import org.apache.empire.jsf2.controls.InputControl;
+import org.apache.empire.jsf2.controls.InputControl.DisabledType;
 import org.apache.empire.jsf2.controls.InputControlManager;
 import org.apache.empire.jsf2.controls.SelectInputControl;
 import org.apache.empire.jsf2.controls.TextAreaInputControl;
@@ -79,6 +80,7 @@ import org.slf4j.LoggerFactory;
 public class TagEncodingHelper implements NamingContainer
 {
     private final static String SPACE = " ";
+    
     /**
      * ColumnExprWrapper
      * wraps a ColumnExpr object into a Column interface object
@@ -341,21 +343,14 @@ public class TagEncodingHelper implements NamingContainer
         @Override
         public boolean isDisabled()
         {
-            // check attribute
-            Object val = getAttributeValueEx("disabled");
-            if (val != null && ObjectUtils.getBoolean(val))
-                return true;
-            // not disabeld
-            return false;
+            DisabledType disabled = TagEncodingHelper.this.getDisabled(); 
+            return (disabled!=null && disabled!=DisabledType.NO);
         }
-
+        
         @Override
-        public boolean isFieldReadOnly()
-        {   // Check tag
-            if (!(component instanceof UIInput))
-                return true;
-            // column read only
-            return TagEncodingHelper.this.isReadOnly();
+        public DisabledType getDisabled()
+        {            
+            return TagEncodingHelper.this.getDisabled();
         }
         
         @Override
@@ -816,12 +811,9 @@ public class TagEncodingHelper implements NamingContainer
         }
         // check attribute
         Object val = getTagAttributeValue("readonly");
-        if (val != null)
-        {   // check
-            if (StringUtils.valueOf(val).equalsIgnoreCase("never"))
-                return false;
-            if (ObjectUtils.getBoolean(val))
-                return true;
+        if (!ObjectUtils.isEmpty(val))
+        {   // override
+            return ObjectUtils.getBoolean(val);
         }
         // check record component
         if (recordTag != null && recordTag.isReadOnly())
@@ -857,6 +849,11 @@ public class TagEncodingHelper implements NamingContainer
 
     public boolean isReadOnly()
     {
+        // component 
+        if (!(component instanceof UIInput))
+        {   log.warn("Component is not of type UIInput");
+            return true;
+        }
         // Check Record
         if (isRecordReadOnly())
             return true;
@@ -869,6 +866,27 @@ public class TagEncodingHelper implements NamingContainer
         // column
         return getColumn().isReadOnly();
     }
+    
+    public DisabledType getDisabled()
+    {
+        // component 
+        if (!(component instanceof UIInput))
+        {   log.warn("Component is not of type UIInput");
+            return DisabledType.READONLY;
+        }
+        // Check attribute
+        Object dis = getAttributeValueEx("disabled");
+        if (ObjectUtils.isEmpty(dis))
+            return null; // not provided!
+        // direct
+        if (dis instanceof DisabledType)
+            return (DisabledType)dis;
+        // readonly
+        if (String.valueOf(dis).equalsIgnoreCase("readonly"))
+            return DisabledType.READONLY;
+        // other
+        return (ObjectUtils.getBoolean(dis) ? DisabledType.DISABLED : DisabledType.NO);
+    }
 
     public boolean isValueRequired()
     {