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 <s:validatorVar/> nodes within a
<s:commonsValidator> 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>