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 2012/08/28 19:02:35 UTC

svn commit: r1378230 - in /empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2: components/ControlTag.java components/InputTag.java controls/InputControl.java controls/TextInputControl.java utils/TagEncodingHelper.java

Author: doebele
Date: Tue Aug 28 17:02:34 2012
New Revision: 1378230

URL: http://svn.apache.org/viewvc?rev=1378230&view=rev
Log:
EMPIREDB-165
new attribute on input and control tag "detectFieldChange"

Modified:
    empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
    empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java
    empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
    empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextInputControl.java
    empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java

Modified: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java?rev=1378230&r1=1378229&r2=1378230&view=diff
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java (original)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java Tue Aug 28 17:02:34 2012
@@ -32,6 +32,8 @@ import javax.faces.context.ResponseWrite
 import org.apache.empire.commons.ObjectUtils;
 import org.apache.empire.commons.StringUtils;
 import org.apache.empire.data.Column;
+import org.apache.empire.db.exceptions.FieldIllegalValueException;
+import org.apache.empire.exceptions.EmpireException;
 import org.apache.empire.jsf2.controls.InputControl;
 import org.apache.empire.jsf2.utils.TagEncodingHelper;
 import org.slf4j.Logger;
@@ -466,6 +468,9 @@ public class ControlTag extends UIInput 
             
         } catch(Exception e) {
             // Value is not valid
+            if (!(e instanceof EmpireException))
+                e = new FieldIllegalValueException(helper.getColumn(), "", e);
+            // Add error message
             helper.addErrorMessage(context, e);
             setValid(false);
         }

Modified: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java?rev=1378230&r1=1378229&r2=1378230&view=diff
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java (original)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java Tue Aug 28 17:02:34 2012
@@ -27,6 +27,8 @@ import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
 
 import org.apache.empire.data.Column;
+import org.apache.empire.db.exceptions.FieldIllegalValueException;
+import org.apache.empire.exceptions.EmpireException;
 import org.apache.empire.jsf2.controls.InputControl;
 import org.apache.empire.jsf2.utils.TagEncodingHelper;
 import org.slf4j.Logger;
@@ -197,6 +199,9 @@ public class InputTag extends UIInput im
             
         } catch(Exception e) {
             // Value is not valid
+            if (!(e instanceof EmpireException))
+                e = new FieldIllegalValueException(helper.getColumn(), "", e);
+            // Add error message
             helper.addErrorMessage(context, e);
             setValid(false);
         }

Modified: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java?rev=1378230&r1=1378229&r2=1378230&view=diff
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java (original)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java Tue Aug 28 17:02:34 2012
@@ -448,19 +448,17 @@ public abstract class InputControl
         copyAttribute(ii, input, "style");
         copyAttribute(ii, input, "tabindex");
         copyAttribute(ii, input, "onchange");
-        
+
+        // immediate
+        Object immediate = ii.getAttribute("immediate");
+        if (immediate!=null && ObjectUtils.getBoolean(immediate))
+        {
+            log.warn("Immediate attribute is not yet supported for {}!", ii.getColumn().getName());
+            // input.setImmediate(true);
+        }    
+
         // validator
         // input.addValidator(new ColumnValueValidator(ii.getColumn()));
-        
-        // IceFaces special
-        /*
-        if (input instanceof IceExtended)
-        {   // partialSubmit
-            Object v = parent.getAttributes().get("partialSubmit");
-            if (v!=null)
-               ((IceExtended)input).setPartialSubmit(ObjectUtils.getBoolean(v));
-        }
-        */
     }
 
     protected final void copyAttributes(UIComponent parent, InputInfo ii, UIInput input)

Modified: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextInputControl.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextInputControl.java?rev=1378230&r1=1378229&r2=1378230&view=diff
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextInputControl.java (original)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextInputControl.java Tue Aug 28 17:02:34 2012
@@ -263,7 +263,7 @@ public class TextInputControl extends In
     protected Object formatInputValue(Object value, InputInfo ii)
     {
         if (value == null)
-            return value;
+            return "";
         // Check options
         Options options = ii.getOptions();
         if (options != null && !options.isEmpty())

Modified: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java?rev=1378230&r1=1378229&r2=1378230&view=diff
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java (original)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java Tue Aug 28 17:02:34 2012
@@ -321,6 +321,7 @@ public class TagEncodingHelper implement
     private Boolean             hasValueExpr = null;
     private InputControl        control      = null;
     private TextResolver        textResolver = null;
+    private Object              mostRecentValue = null;
 
     public TagEncodingHelper(UIOutput tag, String tagCssStyle)
     {
@@ -466,6 +467,7 @@ public class TagEncodingHelper implement
     public void setRecord(Object record)
     {
         this.record = record;
+        this.mostRecentValue = null; 
     }
 
     public RecordTag getRecordComponent()
@@ -488,14 +490,23 @@ public class TagEncodingHelper implement
         }
         return null;
     }
+    
+    private boolean isDetectFieldChange()
+    {
+        Object v = this.getTagAttribute("detectFieldChange");
+        if (v==null && recordTag != null)
+            v = recordTag.getAttributes().get("detectFieldChange");
+        return (v!=null ? ObjectUtils.getBoolean(v) : true);
+    }
 
     public Object getDataValue(boolean evalExpression)
     {
         if (getRecord() != null)
-        { // value
+        {   // value
             if (record instanceof RecordData)
             { // a record
-                return ((RecordData) record).getValue(getColumn());
+                mostRecentValue = ((RecordData) record).getValue(getColumn());
+                return mostRecentValue;
             }
             else
             { // a normal bean
@@ -533,6 +544,15 @@ public class TagEncodingHelper implement
                     return;
                 }
                 */
+                if (isDetectFieldChange())
+                {   // DetectFieldChange by comparing current and most recent value
+                    Object currentValue = ((Record) record).getValue(getColumn());
+                    if (!ObjectUtils.compareEqual(currentValue, mostRecentValue))
+                    {   // Value has been changed by someone else!
+                        log.info("Concurrent data change for "+getColumn().getName()+". Current Value is {}. Ignoring new value {}", currentValue, value);
+                        return;
+                    }
+                }
                 // a record
                 ((Record) record).setValue(getColumn(), value);
             }