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 a71d6c0  EMPIREDB-328 add a modified flag to input controls which have 
been modified
a71d6c0 is described below

commit a71d6c0b35cfd66f2bd6d4f7d71405909aad4867
Author: Rainer Döbele <[email protected]>
AuthorDate: Fri Apr 3 11:11:56 2020 +0200

    EMPIREDB-328
    add a modified flag to input controls which have been modified
---
 .../apache/empire/jsf2/components/SelectTag.java   |  7 +++++
 .../apache/empire/jsf2/controls/InputControl.java  | 19 ++++++++++--
 .../empire/jsf2/controls/SelectInputControl.java   |  2 +-
 .../empire/jsf2/controls/TextInputControl.java     |  4 ++-
 .../empire/jsf2/utils/TagEncodingHelper.java       | 36 +++++++++++++++++++---
 5 files changed, 60 insertions(+), 8 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 36929ed..3c91b95 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
@@ -142,6 +142,13 @@ public class SelectTag extends UIInput implements 
NamingContainer
         }
 
         @Override
+        public boolean isModified()
+        {
+            Object modified = SelectTag.this.getAttributes().get("modified");
+            return (modified!=null ? ObjectUtils.getBoolean(modified) : false);
+        }
+
+        @Override
         public boolean isDisabled()
         {
             return SelectTag.this.isDisabled();
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 ebb3eff..fddd02b 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
@@ -78,7 +78,8 @@ public abstract class InputControl
     public static String HTML_EXPR_NBSP = "&nbsp;";
     
     // style classes
-    public static final String STYLECLASS_REQUIRED    = "eInpReq";
+    public static final String STYLECLASS_REQUIRED    = " eInpReq";
+    public static final String STYLECLASS_MODIFIED    = " eInpModified";
 
     public InputControl()
     {
@@ -132,6 +133,8 @@ public abstract class InputControl
 
         boolean isRequired();
 
+        boolean isModified();
+        
         boolean isDisabled(); // disabled or readOnly
 
         boolean isFieldReadOnly(); // not disabled only readOnly (for 
input[type=text] only!)
@@ -626,7 +629,19 @@ public abstract class InputControl
 
     protected final void copyAttributes(UIComponent parent, InputInfo ii, 
UIInput input)
     {
-        copyAttributes(parent, ii, input, (ii.isRequired() ? 
STYLECLASS_REQUIRED : null));
+        String addlStyles = null;
+        if (ii.isRequired())
+        {   // required
+            addlStyles = STYLECLASS_REQUIRED;
+        }
+        if (ii.isModified()) 
+        {   // modified only
+            if (addlStyles==null)
+                addlStyles = STYLECLASS_MODIFIED;
+            else
+                addlStyles+= STYLECLASS_MODIFIED;
+        }
+        copyAttributes(parent, ii, input, addlStyles);
     }
 
     protected void copyAttribute(InputInfo ii, UIInput input, String name)
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 c9021c3..99f96b6 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
@@ -105,7 +105,7 @@ public class SelectInputControl extends InputControl
         }
         HtmlSelectOneMenu input = (HtmlSelectOneMenu)comp;
         // required
-       addRemoveStyle(input, " " + InputControl.STYLECLASS_REQUIRED, 
ii.isRequired());
+       addRemoveStyle(input, InputControl.STYLECLASS_REQUIRED, 
ii.isRequired());
         // disabled
         boolean disabled = ii.isDisabled();
         input.setDisabled(disabled);
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 4556028..da7593b 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
@@ -122,7 +122,9 @@ public class TextInputControl extends InputControl
         }
         HtmlInputText input = (HtmlInputText) comp;
                // required
-               addRemoveStyle(input, " " + InputControl.STYLECLASS_REQUIRED, 
ii.isRequired());
+               addRemoveStyle(input, InputControl.STYLECLASS_REQUIRED, 
ii.isRequired());
+        // modified
+        addRemoveStyle(input, InputControl.STYLECLASS_MODIFIED, 
ii.isModified());
         // disabled
         Object dis = ii.getAttributeEx("disabled");
         if (dis != null)
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 6920297..2a37a4c 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
@@ -78,6 +78,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
@@ -332,6 +333,12 @@ public class TagEncodingHelper implements NamingContainer
         }
 
         @Override
+        public boolean isModified()
+        {
+            return isValueModified();
+        }
+
+        @Override
         public boolean isDisabled()
         {
             // check attribute
@@ -882,6 +889,21 @@ public class TagEncodingHelper implements NamingContainer
         // Required
         return getColumn().isRequired();
     }
+    
+    public boolean isValueModified()
+    {
+        Object modified = getTagAttributeValue("modified");
+        if (modified!=null)
+            return ObjectUtils.getBoolean(modified);
+        // Check Record
+        if ((getRecord() instanceof Record))
+        {   // Ask Record
+            Record r = (Record) record;
+            return r.wasModified(getColumn());
+        }
+        // not detectable
+        return false;
+    }
 
     public boolean validateNullValue()
     {
@@ -1523,7 +1545,7 @@ public class TagEncodingHelper implements NamingContainer
 
     protected String completeLabelStyleClass(String styleClass, boolean 
required)
     {
-        final String LABEL_REQ_STYLE = " "+InputControl.STYLECLASS_REQUIRED;
+        final String LABEL_REQ_STYLE = InputControl.STYLECLASS_REQUIRED;
 
         boolean hasRequired = StringUtils.contains(styleClass, 
LABEL_REQ_STYLE);
         if (required==hasRequired)
@@ -1568,12 +1590,14 @@ public class TagEncodingHelper implements 
NamingContainer
         }
         if (StringUtils.isNotEmpty(addlStyle))
         {   // add additional style class
-            b.append(" ");
+            if (!addlStyle.startsWith(SPACE))
+                b.append(SPACE);
             b.append(addlStyle);
         }
         if (StringUtils.isNotEmpty(userStyle) && 
!StringUtils.compareEqual(userStyle, addlStyle, false))
         {   // add user style class
-            b.append(" ");
+            if (!userStyle.startsWith(SPACE))
+                b.append(SPACE);
             b.append(userStyle);
         }
         return b.toString();
@@ -1653,7 +1677,11 @@ public class TagEncodingHelper implements NamingContainer
         {
             return addlStyle;
         }
-        return addlStyle + " " + contextStyle;
+        if (contextStyle.startsWith(SPACE))
+        {
+            return addlStyle + contextStyle;
+        }
+        return addlStyle + SPACE + contextStyle;
     }
     
     public boolean isInsideUIData()

Reply via email to