Author: gvanmatre
Date: Mon Aug  7 17:09:53 2006
New Revision: 429519

URL: http://svn.apache.org/viewvc?rev=429519&view=rev
Log:
Added better support for commons validator using clay html namespace templates.

Modified:
    
shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java
    
shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java
    shale/framework/trunk/shale-clay/src/main/resources/META-INF/clay-config.xml
    
shale/framework/trunk/shale-clay/src/main/resources/org/apache/shale/clay/parser/builder/chain/shale-builder-config.xml

Modified: 
shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java
URL: 
http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java?rev=429519&r1=429518&r2=429519&view=diff
==============================================================================
--- 
shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java
 (original)
+++ 
shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java
 Mon Aug  7 17:09:53 2006
@@ -31,6 +31,7 @@
 import org.apache.shale.util.ConverterHelper;
 import org.apache.shale.util.PropertyHelper;
 import org.apache.shale.util.Tags;
+import org.apache.shale.validator.CommonsValidator;
 
 /**
  * <p>
@@ -194,6 +195,10 @@
             } catch (Exception e) {
                 if (child instanceof UIComponentBase) {
                   ((UIComponentBase) 
child).getAttributes().put(attributeBean.getName(), expr);
+                } else if (child instanceof CommonsValidator) {
+                   //vars collection is like the components attributes
+                   //native support for shale components
+                  ((CommonsValidator) 
child).getVars().put(attributeBean.getName(), expr);  
                 } else {
                    throw e;
                 }

Modified: 
shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java
URL: 
http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java?rev=429519&r1=429518&r2=429519&view=diff
==============================================================================
--- 
shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java
 (original)
+++ 
shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java
 Mon Aug  7 17:09:53 2006
@@ -22,6 +22,8 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
 
 import org.apache.shale.clay.config.beans.ActionListenerBean;
 import org.apache.shale.clay.config.beans.AttributeBean;
@@ -62,6 +64,31 @@
         return target;
     }
 
+    /**
+     * <p>Holds a cross reference of commonsValidator type to
+     * a clay component config definition.</p>
+     */
+    private Map validatorsByType = null;
+    {
+      validatorsByType = new TreeMap();
+      validatorsByType.put("required","s:commonsValidatorRequired");
+      validatorsByType.put("maxlength","s:commonsValidatorMaxlength");
+      validatorsByType.put("minlength","s:commonsValidatorMinlength");
+      validatorsByType.put("mask","s:commonsValidatorMask");
+      validatorsByType.put("byte","s:commonsValidatorByte");
+      validatorsByType.put("short","s:commonsValidatorShort");
+      validatorsByType.put("integer","s:commonsValidatorInteger");
+      validatorsByType.put("long","s:commonsValidatorLong");
+      validatorsByType.put("float","s:commonsValidatorFloat");
+      validatorsByType.put("double","s:commonsValidatorDouble");
+      validatorsByType.put("date","s:commonsValidatorDate");
+      validatorsByType.put("intRange","s:commonsValidatorIntRange");
+      validatorsByType.put("floatRange","s:commonsValidatorFloatRange");
+      validatorsByType.put("doubleRange","s:commonsValidatorDoubleRange");
+      validatorsByType.put("creditCard","s:commonsValidatorCreditCard");
+      validatorsByType.put("email","s:commonsValidatorEmail");
+      validatorsByType.put("url","s:commonsValidatorUrl");  
+    }
 
     /**
      * @inheritDoc
@@ -89,6 +116,39 @@
 
     }
 
+    /**
+     * <p>Looks for &lt;s:validatorVar/&gt; nodes within a 
&lt;s:commonsValidator&gt; node and
+     * converting them to [EMAIL PROTECTED] 
org.apache.shale.clay.config.beans.AttributeBean}'s
+     * on the <code>target</code> [EMAIL PROTECTED] 
org.apache.shale.clay.config.beans.ComponentBean}.
+     * </p>
+     *
+     * @param attributesNode markup
+     * @param target child config bean
+     */
+    protected void addValidatorVar(Node attributesNode, ComponentBean target) {
+        Iterator ci = attributesNode.getChildren().iterator();
+        while (ci.hasNext()) {
+            Node child = (Node) ci.next();
+            if (child.isWellFormed() && child.getName() != null
+                && child.getName().equals("validatorVar")) {
+
+                String name = (String) child.getAttributes().get("name");
+                String value = (String) child.getAttributes().get("value");
+                String bindingType = (String) 
child.getAttributes().get("bindingType");
+
+                AttributeBean attr = target.getAttribute(name);
+                if (attr != null) {
+                    createAttribute(attr, value, target);
+                } else {
+                    attr = new AttributeBean();
+                    attr.setName(name);
+                    attr.setValue(value);
+                    attr.setBindingType(bindingType);
+                    target.addAttribute(attr);
+                }
+            }
+        }
+    }
 
     /**
      * @inheritDoc
@@ -110,8 +170,20 @@
         if (node.getAttributes().containsKey("extends") || 
!jsfid.equals("validator")) {
             realizeComponent(node, targetValidator);
         }
+        
         //attach to the target element
         target.addValidator(targetValidator);
+
+        if (node.getName().equals("commonsValidator")) {
+            //You can use multiple commonsValidators per component.  The
+            //jsfid is the key in the ComponentBean's validator set.
+            //Override with the unique type attribute
+            String type = (String) node.getAttributes().get("type");
+            targetValidator.setJsfid((String) validatorsByType.get(type));
+
+            //add support for the validatorVar JSP tag.
+            addValidatorVar(node, targetValidator);
+        }
 
     }
 

Modified: 
shale/framework/trunk/shale-clay/src/main/resources/META-INF/clay-config.xml
URL: 
http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/resources/META-INF/clay-config.xml?rev=429519&r1=429518&r2=429519&view=diff
==============================================================================
--- 
shale/framework/trunk/shale-clay/src/main/resources/META-INF/clay-config.xml 
(original)
+++ 
shale/framework/trunk/shale-clay/src/main/resources/META-INF/clay-config.xml 
Mon Aug  7 17:09:53 2006
@@ -254,19 +254,19 @@
         <set name="type" bindingType="Early">
            <description>The validator rule name to invoke.</description>
         </set>
-        <set name="min" bindingType="Early">
+        <set name="min" bindingType="None">
            <description>Lower range limit used by the doubleRange, floatRange 
and intRange rules.</description>
         </set>
-        <set name="max" bindingType="Early">
+        <set name="max" bindingType="None">
            <description>Upper range limit used by the doubleRange, floatRange 
and intRange rules.</description>
         </set>
-        <set name="minlength" bindingType="Early">
+        <set name="minLength" bindingType="None">
            <description>Minimum link used by the minlength rule.</description>
         </set>
-        <set name="maxlength" bindingType="Early">
+        <set name="maxLength" bindingType="None">
            <description>Maximum link used by the minlength rule. </description>
         </set>
-        <set name="mask" bindingType="Early">
+        <set name="mask" bindingType="None">
            <description>Validating regular expression used by the mask 
rule.</description>
         </set>
         <set name="message" bindingType="Early">
@@ -274,7 +274,7 @@
               are defined by args in the xml config.
            </description>
         </set>
-        <set name="arg" bindingType="Early">
+        <set name="arg" bindingType="None">
            <description>The name of the validating component.</description>
         </set>
         <set name="client" bindingType="Early">
@@ -286,6 +286,23 @@
       </attributes>
   </component>
   <component jsfid="s:commonsValidator" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorRequired" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorMaxlength" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorMinlength" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorMask" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorByte" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorShort" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorInteger" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorLong" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorFloat" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorDouble" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorDate" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorIntRange" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorFloatRange" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorDoubleRange" extends="commonsValidator" 
/>
+  <component jsfid="s:commonsValidatorCreditCard" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorEmail" extends="commonsValidator" />
+  <component jsfid="s:commonsValidatorUrl" extends="commonsValidator" />
 
   <!--  Provide ViewController support functionality for the nested content
       (typically a JSP dynamic include) of this component.
@@ -1252,4 +1269,4 @@
   <component jsfid="validateLongRange" extends="longRangeValidator"/>
   <component jsfid="f:validateLongRange" extends="validateLongRange"/>
 
-</view>
\ No newline at end of file
+</view>

Modified: 
shale/framework/trunk/shale-clay/src/main/resources/org/apache/shale/clay/parser/builder/chain/shale-builder-config.xml
URL: 
http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/resources/org/apache/shale/clay/parser/builder/chain/shale-builder-config.xml?rev=429519&r1=429518&r2=429519&view=diff
==============================================================================
--- 
shale/framework/trunk/shale-clay/src/main/resources/org/apache/shale/clay/parser/builder/chain/shale-builder-config.xml
 (original)
+++ 
shale/framework/trunk/shale-clay/src/main/resources/org/apache/shale/clay/parser/builder/chain/shale-builder-config.xml
 Mon Aug  7 17:09:53 2006
@@ -58,6 +58,10 @@
   <chain           name="http://shale.apache.org/clay";>
     <command  
className="org.apache.shale.clay.parser.builder.chain.JsfDefaultBuilderRule"/>
   </chain>
+
+  <chain           name="http://myfaces.apache.org/tomahawk";>
+    <command  
className="org.apache.shale.clay.parser.builder.chain.JsfDefaultBuilderRule"/>
+  </chain>
 
 
 </catalog>


Reply via email to