You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2006/07/07 19:48:35 UTC

svn commit: r419933 - in /tapestry/tapestry4/trunk: tapestry-examples/Workbench/src/context/ tapestry-examples/Workbench/src/context/WEB-INF/ tapestry-framework/src/java/org/apache/tapestry/form/ tapestry-framework/src/java/org/apache/tapestry/form/tra...

Author: jkuhnert
Date: Fri Jul  7 10:48:34 2006
New Revision: 419933

URL: http://svn.apache.org/viewvc?rev=419933&view=rev
Log:
Validation logic refactor for number translations

Removed:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.js
Modified:
    tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Fields.html
    tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Border.html
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstants.java
    tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/validate/common.js
    tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form/validation.js
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java

Modified: tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Fields.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Fields.html?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Fields.html (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Fields.html Fri Jul  7 10:48:34 2006
@@ -53,7 +53,7 @@
   
   <tr>
     <th><label jwcid="@FieldLabel" accessKey="z" field="component:zipCode"/></th>
-    <td><input jwcid="zipCode" id="zipcode"/></td>
+    <td><input jwcid="zipCode" /></td>
   </tr>
 
   <tr>

Modified: tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Border.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Border.html?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Border.html (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Border.html Fri Jul  7 10:48:34 2006
@@ -1,4 +1,5 @@
-<html jwcid="@Shell" stylesheet="asset:stylesheet" title="message:window.title">
+<html jwcid="@Shell" stylesheet="asset:stylesheet" 
+	title="message:window.title" browserLogLevel="literal:DEBUG" >
 <body jwcid="@Body">
 
 <table class="tabs" cellspacing="0" border="0">

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java Fri Jul  7 10:48:34 2006
@@ -75,14 +75,14 @@
     {
         // If the user explicitly sets the id parameter to null, then
         // we honor that!
-
+        
         String rawId = getIdParameter();
-
+        
         if (rawId == null)
             return;
-
+        
         String id = cycle.getUniqueId(TapestryUtils.convertTapestryIdToNMToken(rawId));
-
+        
         // Store for later access by the FieldLabel (or JavaScript).
 
         setClientId(id);

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java Fri Jul  7 10:48:34 2006
@@ -17,6 +17,8 @@
 import org.apache.hivemind.util.PropertyUtils;
 import org.apache.tapestry.IMarkupWriter;
 import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.json.JSONArray;
+import org.apache.tapestry.json.JSONObject;
 
 /**
  * Abstract {@link FormComponentContributor} implementation that adds an optional static javscript
@@ -43,7 +45,7 @@
      * Defines the default JavaScript file used by this contributor. Overriden by most subclasses
      * that use JavaScript.
      */
-    protected String defaultScript()
+    public String defaultScript()
     {
         return null;
     }
@@ -68,5 +70,43 @@
     {
         if (_script != null)
             context.includeClasspathScript(_script);
+    }
+    
+    /**
+     * Utility used to append onto an existing property represented as an
+     * object array. 
+     * @param profile
+     * @param key
+     * @param value
+     */
+    public void accumulateProperty(JSONObject profile, String key, Object value)
+    {
+        if (!profile.has(key))
+            profile.put(key, new JSONArray());
+        
+        profile.accumulate(key, value);
+    }
+    
+    /**
+     * Utility method to store a field specific profile property which can later
+     * be used by client side validation. 
+     * 
+     * @param field
+     *          The field to store the property for, will key off of {@link IFormComponent#getClientId()}.
+     * @param profile
+     *          The profile for the form.
+     * @param key
+     *          The property key to store.
+     * @param property
+     *          The property to store.
+     */
+    public void setProfileProperty(IFormComponent field, JSONObject profile, 
+            String key, Object property)
+    {
+        if (!profile.has(field.getClientId())) 
+            profile.put(field.getClientId(), new JSONObject());
+        
+        JSONObject fieldProps = profile.getJSONObject(field.getClientId());
+        fieldProps.put(key, property);
     }
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java Fri Jul  7 10:48:34 2006
@@ -23,6 +23,8 @@
 import org.apache.tapestry.form.FormComponentContributorContext;
 import org.apache.tapestry.form.IFormComponent;
 import org.apache.tapestry.form.ValidationMessages;
+import org.apache.tapestry.json.JSONObject;
+import org.apache.tapestry.valid.ValidationConstants;
 import org.apache.tapestry.valid.ValidatorException;
 
 /**
@@ -102,8 +104,7 @@
 
     protected Object[] getMessageParameters(Locale locale, String label)
     {
-        return new Object[]
-        { label };
+        return new Object[] { label };
     }
 
     /**
@@ -114,10 +115,12 @@
             FormComponentContributorContext context, IFormComponent field)
     {
         super.renderContribution(writer, cycle, context, field);
-
-        if (_trim)
-            context.addSubmitHandler("function (event) { Tapestry.trim_field_value('"
-                    + field.getClientId() + "'); }");
+        
+        if (!_trim) {
+            JSONObject profile = context.getProfile();
+            
+            accumulateProperty(profile, ValidationConstants.TRIM, field.getClientId());
+        }
     }
 
     public boolean isTrim()

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java Fri Jul  7 10:48:34 2006
@@ -30,17 +30,17 @@
  */
 public class DateTranslator extends FormatTranslator
 {
-
+    
     public DateTranslator()
     {
     }
-
+    
     // Needed until HIVEMIND-134 fix is available
     public DateTranslator(String initializer)
     {
         super(initializer);
     }
-
+    
     /**
      * @see org.apache.tapestry.form.translator.FormatTranslator#defaultPattern()
      */
@@ -48,7 +48,7 @@
     {
         return "MM/dd/yyyy";
     }
-
+    
     /**
      * @see org.apache.tapestry.form.translator.FormatTranslator#getFormat(java.util.Locale)
      */
@@ -56,12 +56,12 @@
     {
         return getDateFormat(locale);
     }
-
+    
     public SimpleDateFormat getDateFormat(Locale locale)
     {
         return new SimpleDateFormat(getPattern(), new DateFormatSymbols(locale));
     }
-
+    
     /**
      * @see org.apache.tapestry.form.translator.FormatTranslator#getMessageKey()
      */
@@ -69,7 +69,7 @@
     {
         return ValidationStrings.INVALID_DATE;
     }
-
+    
     /**
      * @see org.apache.tapestry.form.translator.AbstractTranslator#getMessageParameters(java.util.Locale,
      *      java.lang.String)
@@ -77,9 +77,8 @@
     protected Object[] getMessageParameters(Locale locale, String label)
     {
         String pattern = getDateFormat(locale).toLocalizedPattern().toUpperCase(locale);
-
-        return new Object[]
-        { label, pattern };
+        
+        return new Object[] { label, pattern };
     }
 
     /**

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java Fri Jul  7 10:48:34 2006
@@ -75,7 +75,7 @@
             throws ValidatorException
     {
         Format format = getFormat(messages.getLocale());
-
+        
         try
         {
             return format.parseObject(text);

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java Fri Jul  7 10:48:34 2006
@@ -25,6 +25,9 @@
 import org.apache.tapestry.TapestryUtils;
 import org.apache.tapestry.form.FormComponentContributorContext;
 import org.apache.tapestry.form.IFormComponent;
+import org.apache.tapestry.json.JSONLiteral;
+import org.apache.tapestry.json.JSONObject;
+import org.apache.tapestry.valid.ValidationConstants;
 import org.apache.tapestry.valid.ValidationConstraint;
 import org.apache.tapestry.valid.ValidationStrings;
 
@@ -63,14 +66,6 @@
     }
 
     /**
-     * @see org.apache.tapestry.form.AbstractFormComponentContributor#defaultScript()
-     */
-    protected String defaultScript()
-    {
-        return "/org/apache/tapestry/form/translator/NumberTranslator.js";
-    }
-
-    /**
      * @see org.apache.tapestry.form.translator.FormatTranslator#defaultPattern()
      */
     protected String defaultPattern()
@@ -106,9 +101,8 @@
     protected Object[] getMessageParameters(Locale locale, String label)
     {
         String pattern = getDecimalFormat(locale).toLocalizedPattern();
-
-        return new Object[]
-        { label, pattern };
+        
+        return new Object[] { label, pattern };
     }
 
     /**
@@ -120,11 +114,28 @@
             FormComponentContributorContext context, IFormComponent field)
     {
         super.renderContribution(writer, cycle, context, field);
-
+        
         String message = TapestryUtils.enquote(buildMessage(context, field, getMessageKey()));
-
-        context.addSubmitHandler("function(event) { Tapestry.validate_number(event, '"
-                + field.getClientId() + "', " + message + "); }");
+        
+        JSONObject profile = context.getProfile();
+        
+        if (!profile.has(ValidationConstants.CONSTRAINTS)) {
+            profile.put(ValidationConstants.CONSTRAINTS, new JSONObject());
+        }
+        JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
+        
+        DecimalFormat format = getDecimalFormat(context.getLocale());
+        
+        cons.put(field.getClientId(), 
+                new JSONLiteral("[dojo.validate.isRealNumber,{"
+                        + "places:" + format.getMaximumIntegerDigits()) + ","
+                        + "decimal:" 
+                        + JSONObject.quote(format.getDecimalFormatSymbols().getDecimalSeparator()) + ","
+                        + "separator:" + JSONObject.quote(format.getDecimalFormatSymbols().getGroupingSeparator())
+                        + "}]");
+        
+        setProfileProperty(field, profile, 
+                ValidationConstants.CONSTRAINTS, message);
     }
 
     /**

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstants.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstants.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstants.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstants.java Fri Jul  7 10:48:34 2006
@@ -35,4 +35,6 @@
     public static final String REQUIRED_MESSAGE = "required-message";
     
     public static final String CONSTRAINTS = "constraints";
+    
+    public static final String TRIM = "trim";
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/validate/common.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/validate/common.js?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/validate/common.js (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/validate/common.js Fri Jul  7 10:48:34 2006
@@ -126,7 +126,7 @@
 	// replace decimal with ".". The minus sign '-' could be the decimal!
 	pattern = "(\\d)[" + dec + "](\\d)";
 	value = value.replace(RegExp(pattern, "g"), "$1.$2");
-
+	
 	value = Number(value);
 	if ( value < min || value > max ) { return false; }
 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form/validation.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form/validation.js?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form/validation.js (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form/validation.js Fri Jul  7 10:48:34 2006
@@ -133,6 +133,9 @@
 	 */
 	clearValidationDecorations:function(form, props){
 		for (var i=0; i<form.elements.length; i++) {
+			if (typeof form.elements[i].type == "undefined"
+				|| form.elements[i].type == "submit" 
+				|| form.elements[i].type == "hidden") { continue; }
 			dojo.html.removeClass(form.elements[i], this.missingClass);
 			dojo.html.removeClass(form.elements[i], this.invalidClass);
 		}

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java Fri Jul  7 10:48:34 2006
@@ -129,7 +129,7 @@
         
         assertEquals("{\"myfield\":{\"constraints\":\"default message\"},"
                 + "\"constraints\":{\"myfield\":[dojo.validate.isInRange,{max:20.0,decimal:\""
-                + symbols.getDecimalSeparator() + "\"]}}",
+                + symbols.getDecimalSeparator() + "\"}]}}",
                 json.toString());
     }
     
@@ -167,7 +167,7 @@
         
         assertEquals("{\"myfield\":{\"constraints\":\"custom\\\\message\"},"
                 + "\"constraints\":{\"myfield\":[dojo.validate.isInRange,{max:20.0,decimal:\""
-                + symbols.getDecimalSeparator() + "\"]}}",
+                + symbols.getDecimalSeparator() + "\"}]}}",
                 json.toString());
     }
 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java Fri Jul  7 10:48:34 2006
@@ -128,7 +128,7 @@
         
         assertEquals("{\"myfield\":{\"constraints\":\"default message\"},"
                 + "\"constraints\":{\"myfield\":[dojo.validate.isInRange,{min:20.0,decimal:\""
-                + symbols.getDecimalSeparator() + "\"]}}",
+                + symbols.getDecimalSeparator() + "\"}]}}",
                 json.toString());
     }
     
@@ -166,7 +166,7 @@
         
         assertEquals("{\"myfield\":{\"constraints\":\"custom\\\\message\"},"
                 + "\"constraints\":{\"myfield\":[dojo.validate.isInRange,{min:20.0,decimal:\""
-                + symbols.getDecimalSeparator() + "\"]}}",
+                + symbols.getDecimalSeparator() + "\"}]}}",
                 json.toString());
     }