EMPIREDB-282
JSF-Tags: add new style attribute if value is empty (Null)
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 75d0646..1b67060 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
@@ -412,6 +412,8 @@
             Object value = reqMap.get(clientId);

             if (input.isLocalValueSet() == false)

                 input.setSubmittedValue(value);

+            // change the style

+            addRemoveValueNullStyle(input, ObjectUtils.isEmpty(value));

             return;

         }

         else if (input.getSubmittedValue() != null) //  && FacesUtils.isClearSubmittedValues(fc)

@@ -438,6 +440,8 @@
         { // Set the value

             value = formatInputValue(value, ii);

             input.setValue(value);

+            // change the style

+            addRemoveValueNullStyle(input, ObjectUtils.isEmpty(value));

         }

     }

 

@@ -595,6 +599,11 @@
         if (value != null)

             input.getAttributes().put(name, String.valueOf(value));

     }

+    

+    public void addRemoveValueNullStyle(UIInput input, boolean nullValue)

+    {

+        addRemoveStyle(input, " eValNull", nullValue);

+    }

 

     public void addRemoveDisabledStyle(UIInput input, boolean disabled)

     {

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 b76f0d7..e151873 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
@@ -1384,7 +1384,7 @@
 

         // styleClass

         if (StringUtils.isNotEmpty(styleClass))

-            label.setStyleClass(styleClass);

+            label.setStyleClass(completeLabelStyleClass(styleClass, required));

         

         // for 

         if (StringUtils.isNotEmpty(forInput) && !readOnly)

@@ -1422,7 +1422,6 @@
     

     public void updateLabelComponent(FacesContext context, HtmlOutputLabel label, String forInput)

     {

-        boolean hasMark = (label.getChildCount()>0);

         // Find Input Control (only if forInput Attribute has been set!)

         InputTag inputTag = null;

         if (StringUtils.isNotEmpty(forInput) && !forInput.equals("*"))

@@ -1435,6 +1434,11 @@
         }

         // Is the Mark required?

         boolean required = (inputTag!=null ? inputTag.isInputRequired() : isValueRequired());

+        // Style Class

+        String styleClass = label.getStyleClass();

+        label.setStyleClass(completeLabelStyleClass(styleClass, required));

+        // set mark

+        boolean hasMark = (label.getChildCount()>0);

         if (required==hasMark)

             return;

         // Add or remove the mark

@@ -1443,6 +1447,28 @@
         else

             label.getChildren().clear();

     }

+

+    protected String completeLabelStyleClass(String styleClass, boolean required)

+    {

+        final String LABEL_REQ_STYLE = " "+InputControl.STYLECLASS_REQUIRED;

+

+        boolean hasRequired = StringUtils.contains(styleClass, LABEL_REQ_STYLE);

+        if (required==hasRequired)

+            return styleClass; // no change

+        // must be empty at least

+        if (styleClass==null)

+            styleClass="";

+        // add or remove

+        if (required) {

+            styleClass += LABEL_REQ_STYLE;

+        }    

+        else

+        {   // remove both   

+            styleClass = StringUtils.remove(styleClass, LABEL_REQ_STYLE);

+        }    

+        // done

+        return styleClass;

+    }

     

     protected void addRequiredMark(HtmlOutputLabel label)

     {

diff --git a/empire-db/src/main/java/org/apache/empire/commons/StringUtils.java b/empire-db/src/main/java/org/apache/empire/commons/StringUtils.java
index 424c257..67bd2d7 100644
--- a/empire-db/src/main/java/org/apache/empire/commons/StringUtils.java
+++ b/empire-db/src/main/java/org/apache/empire/commons/StringUtils.java
@@ -130,6 +130,34 @@
     }
 
     /**
+     * Returns true if the given substring is part of the string provided by value 
+     * 
+     * @param value the value to check
+     * @param substring the substring
+     * @return true if the given substring is part of the string provided by value 
+     */
+    public static boolean contains(String value, String substring)
+    {
+        if (value==null || substring==null)
+            return false;
+        return ((value.indexOf(substring))>=0);
+    }
+
+    /**
+     * Returns true if the given substring is part of the string provided by value 
+     * 
+     * @param value the value to check
+     * @param substring the substring
+     * @return true if the given substring is part of the string provided by value 
+     */
+    public static boolean notContains(String value, String substring)
+    {
+        if (value==null || substring==null)
+            return true;
+        return ((value.indexOf(substring))<0);
+    }
+
+    /**
      * Converts an array of objects to a string.
      * 
      * @param array array of objects