Author: hlship
Date: Mon Aug 29 15:38:14 2005
New Revision: 264648

URL: http://svn.apache.org/viewcvs?rev=264648&view=rev
Log:
TAPESTRY-610: $bean syntax for validators: binding prefix is broken

Added:
    
jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.properties
    
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/AbstractValidatorWrapper.java
    
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/BeanValidatorWrapper.java
    
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorWrapper.java
Modified:
    jakarta/tapestry/trunk/examples/Workbench/src/context/Fields.html
    jakarta/tapestry/trunk/examples/Workbench/src/context/FieldsResults.html
    jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.page
    
jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/Visit.java
    
jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/upload/Upload.java
    
jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml
    
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/ValidatorFactoryImpl.java
    
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorFactory.java
    jakarta/tapestry/trunk/status.xml

Modified: jakarta/tapestry/trunk/examples/Workbench/src/context/Fields.html
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Workbench/src/context/Fields.html?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Workbench/src/context/Fields.html (original)
+++ jakarta/tapestry/trunk/examples/Workbench/src/context/Fields.html Mon Aug 
29 15:38:14 2005
@@ -17,7 +17,7 @@
 
 <span jwcid="showError"/>
 
-<form jwcid="[EMAIL PROTECTED]" success="listener:formSubmit" 
delegate="bean:delegate" clientValidationEnabled="ognl:clientValidationEnabled">
+<form jwcid="[EMAIL PROTECTED]" success="listener:doSubmit" 
delegate="bean:delegate" clientValidationEnabled="ognl:clientValidationEnabled">
 
 <table class="form">
        <tr>
@@ -49,6 +49,11 @@
   <tr>
        <th><label jwcid="@FieldLabel" accesskey="e" 
field="component:inputEmail"/></th>
        <td><input jwcid="inputEmail"/></td>
+  </tr>
+  
+  <tr>
+    <th><label jwcid="@FieldLabel" accessKey="z" 
field="component:zipCode"/></th>
+    <td><input jwcid="zipCode"/></td>
   </tr>
 
   <tr>

Modified: 
jakarta/tapestry/trunk/examples/Workbench/src/context/FieldsResults.html
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Workbench/src/context/FieldsResults.html?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Workbench/src/context/FieldsResults.html 
(original)
+++ jakarta/tapestry/trunk/examples/Workbench/src/context/FieldsResults.html 
Mon Aug 29 15:38:14 2005
@@ -37,6 +37,11 @@
                <td><span jwcid="@Insert" value="ognl:visit.emailValue"/></td>
        </tr>
 
+  <tr>
+    <th>Zip Code</th>
+    <td><span jwcid="@Insert" value="ognl:visit.zipCode"/></td>
+  </tr>
+  
        <tr>
                <th>Text Value</th>
                <td><span jwcid="@Insert" value="ognl:visit.textValue"/></td>

Modified: 
jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.page
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.page?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.page 
(original)
+++ jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.page 
Mon Aug 29 15:38:14 2005
@@ -87,6 +87,17 @@
     <binding name="displayName" value="literal:Email Field"/>
   </component>
   
+  <bean name="zipValidator" class="org.apache.tapestry.form.validator.Pattern">
+    <set name="pattern" value="message:zip-code-pattern"/>
+    <set name="message" value="message:zip-code-message"/>
+  </bean>
+  
+  <component id="zipCode" type="TextField">
+    <binding name="value" value="visit.zipCode"/>
+    <binding name="validators" value="validators:required,$zipValidator"/>
+    <binding name="displayName" value="message:zip-code-label"/>
+  </component>
+  
   <component id="textArea" type="TextArea">
     <binding name="value" value="visit.textValue"></binding>
     <binding name="validators" value="validators:required,minLength=20"/>

Added: 
jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.properties
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.properties?rev=264648&view=auto
==============================================================================
--- 
jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.properties 
(added)
+++ 
jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.properties 
Mon Aug 29 15:38:14 2005
@@ -0,0 +1,3 @@
+zip-code-label=Zip Code

+zip-code-pattern=^\\d{5}(-\\d{4})?$

+zip-code-message=Zip codes are either five or nine digits; 02134 or 90125-1234.
\ No newline at end of file

Modified: 
jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/Visit.java
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/Visit.java?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- 
jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/Visit.java
 (original)
+++ 
jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/Visit.java
 Mon Aug 29 15:38:14 2005
@@ -60,7 +60,9 @@
     private String _emailValue;
 
     private String _textValue;
-    
+
+    private String _zipCode;
+
     public String getActiveTabName()
     {
         return _activeTabName;
@@ -165,9 +167,19 @@
     {
         return _textValue;
     }
-    
+
     public void setTextValue(String value)
     {
         _textValue = value;
+    }
+
+    public String getZipCode()
+    {
+        return _zipCode;
+    }
+
+    public void setZipCode(String zipCode)
+    {
+        _zipCode = zipCode;
     }
 }

Modified: 
jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/upload/Upload.java
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/upload/Upload.java?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- 
jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/upload/Upload.java
 (original)
+++ 
jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/upload/Upload.java
 Mon Aug 29 15:38:14 2005
@@ -14,7 +14,6 @@
 
 package org.apache.tapestry.workbench.upload;
 
-import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.annotations.InjectPage;
 import org.apache.tapestry.form.IPropertySelectionModel;
 import org.apache.tapestry.form.StringPropertySelectionModel;

Modified: 
jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- 
jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml 
(original)
+++ 
jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml 
Mon Aug 29 15:38:14 2005
@@ -2,7 +2,7 @@
 <!-- 
    Copyright 2004, 2005 The Apache Software Foundation
 
-   Licensed under the Apache License, Versions 2.0 (the "License");
+   Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
 

Added: 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/AbstractValidatorWrapper.java
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/AbstractValidatorWrapper.java?rev=264648&view=auto
==============================================================================
--- 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/AbstractValidatorWrapper.java
 (added)
+++ 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/AbstractValidatorWrapper.java
 Mon Aug 29 15:38:14 2005
@@ -0,0 +1,57 @@
+// Copyright 2005 The Apache Software Foundation

+//

+// Licensed under the Apache License, Version 2.0 (the "License");

+// you may not use this file except in compliance with the License.

+// You may obtain a copy of the License at

+//

+//     http://www.apache.org/licenses/LICENSE-2.0

+//

+// Unless required by applicable law or agreed to in writing, software

+// distributed under the License is distributed on an "AS IS" BASIS,

+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+// See the License for the specific language governing permissions and

+// limitations under the License.

+

+package org.apache.tapestry.form.validator;

+

+import org.apache.tapestry.IMarkupWriter;

+import org.apache.tapestry.IRequestCycle;

+import org.apache.tapestry.form.FormComponentContributorContext;

+import org.apache.tapestry.form.IFormComponent;

+import org.apache.tapestry.form.ValidationMessages;

+import org.apache.tapestry.valid.ValidatorException;

+

+/**

+ * Abstract implementation of [EMAIL PROTECTED] 
org.apache.tapestry.form.validator.Validator} that delegates to

+ * some other object.

+ * 

+ * @author Howard Lewis Ship

+ * @since 4.0

+ */

+public abstract class AbstractValidatorWrapper implements Validator

+{

+    protected abstract Validator getDelegate();

+

+    public void validate(IFormComponent field, ValidationMessages messages, 
Object object)

+            throws ValidatorException

+    {

+        getDelegate().validate(field, messages, object);

+    }

+

+    public boolean getAcceptsNull()

+    {

+        return getDelegate().getAcceptsNull();

+    }

+

+    public boolean isRequired()

+    {

+        return getDelegate().isRequired();

+    }

+

+    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,

+            FormComponentContributorContext context, IFormComponent field)

+    {

+        getDelegate().renderContribution(writer, cycle, context, field);

+    }

+

+}


Added: 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/BeanValidatorWrapper.java
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/BeanValidatorWrapper.java?rev=264648&view=auto
==============================================================================
--- 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/BeanValidatorWrapper.java
 (added)
+++ 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/BeanValidatorWrapper.java
 Mon Aug 29 15:38:14 2005
@@ -0,0 +1,54 @@
+// Copyright 2005 The Apache Software Foundation

+//

+// Licensed under the Apache License, Version 2.0 (the "License");

+// you may not use this file except in compliance with the License.

+// You may obtain a copy of the License at

+//

+//     http://www.apache.org/licenses/LICENSE-2.0

+//

+// Unless required by applicable law or agreed to in writing, software

+// distributed under the License is distributed on an "AS IS" BASIS,

+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+// See the License for the specific language governing permissions and

+// limitations under the License.

+

+package org.apache.tapestry.form.validator;

+

+import org.apache.hivemind.ApplicationRuntimeException;

+import org.apache.hivemind.util.Defense;

+import org.apache.tapestry.IComponent;

+

+/**

+ * Implementation of [EMAIL PROTECTED] 
org.apache.tapestry.form.validator.Validator} that delegates to a

+ * managed bean obtained from a component.

+ * 

+ * @author Howard Lewis Ship

+ * @since 4.0

+ */

+public class BeanValidatorWrapper extends AbstractValidatorWrapper

+{

+    private final IComponent _component;

+

+    private final String _name;

+

+    public BeanValidatorWrapper(IComponent component, String name)

+    {

+        Defense.notNull(component, "component");

+        Defense.notNull(name, "name");

+

+        _component = component;

+        _name = name;

+    }

+

+    protected Validator getDelegate()

+    {

+        Object bean = _component.getBeans().getBean(_name);

+

+        if (bean instanceof Validator)

+            return (Validator) bean;

+

+        throw new 
ApplicationRuntimeException(ValidatorMessages.beanNotValidator(_name), bean,

+                null, null);

+    }

+

+}


Modified: 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/ValidatorFactoryImpl.java
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/ValidatorFactoryImpl.java?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/ValidatorFactoryImpl.java
 (original)
+++ 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/ValidatorFactoryImpl.java
 Mon Aug 29 15:38:14 2005
@@ -157,13 +157,7 @@
             throw new ApplicationRuntimeException(ValidatorMessages
                     .noValueOrMessageForBean(beanName));
 
-        Object bean = component.getBeans().getBean(beanName);
-
-        if (bean instanceof Validator)
-            return (Validator) bean;
-
-        throw new 
ApplicationRuntimeException(ValidatorMessages.beanNotValidator(beanName), bean,
-                null, null);
+        return new BeanValidatorWrapper(component, beanName);
     }
 
     public void setValidators(Map validators)

Modified: 
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorFactory.java
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorFactory.java?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- 
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorFactory.java
 (original)
+++ 
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorFactory.java
 Mon Aug 29 15:38:14 2005
@@ -22,6 +22,8 @@
 import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.tapestry.IBeanProvider;
 import org.apache.tapestry.IComponent;
+import org.apache.tapestry.form.IFormComponent;
+import org.apache.tapestry.form.ValidationMessages;
 import org.apache.tapestry.junit.TapestryTestCase;
 import org.easymock.MockControl;
 
@@ -297,12 +299,18 @@
         return component;
     }
 
-    public void testBeanReference()
+    public void testBeanReference() throws Exception
     {
         Validator validator = newValidator();
         IBeanProvider provider = newBeanProvider("fred", validator);
         IComponent component = newComponent(provider);
 
+        IFormComponent field = newField();
+        ValidationMessages messages = newMessages();
+        Object value = new Object();
+
+        validator.validate(field, messages, value);
+
         replayControls();
 
         ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
@@ -311,11 +319,24 @@
         List validators = vf.constructValidatorList(component, "$fred");
 
         assertEquals(1, validators.size());
-        assertSame(validator, validators.get(0));
+
+        Validator wrapper = (Validator) validators.get(0);
+
+        wrapper.validate(field, messages, value);
 
         verifyControls();
     }
 
+    private ValidationMessages newMessages()
+    {
+        return (ValidationMessages) newMock(ValidationMessages.class);
+    }
+
+    private IFormComponent newField()
+    {
+        return (IFormComponent) newMock(IFormComponent.class);
+    }
+
     public void testBeanReferenceNotValidator()
     {
         Object bean = new Object();
@@ -329,7 +350,12 @@
 
         try
         {
-            vf.constructValidatorList(component, "$fred");
+            List l = vf.constructValidatorList(component, "$fred");
+
+            Validator wrapper = (Validator) l.get(0);
+
+            wrapper.getAcceptsNull();
+
             unreachable();
         }
         catch (ApplicationRuntimeException ex)

Added: 
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorWrapper.java
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorWrapper.java?rev=264648&view=auto
==============================================================================
--- 
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorWrapper.java
 (added)
+++ 
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorWrapper.java
 Mon Aug 29 15:38:14 2005
@@ -0,0 +1,138 @@
+// Copyright 2005 The Apache Software Foundation

+//

+// Licensed under the Apache License, Version 2.0 (the "License");

+// you may not use this file except in compliance with the License.

+// You may obtain a copy of the License at

+//

+//     http://www.apache.org/licenses/LICENSE-2.0

+//

+// Unless required by applicable law or agreed to in writing, software

+// distributed under the License is distributed on an "AS IS" BASIS,

+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+// See the License for the specific language governing permissions and

+// limitations under the License.

+

+package org.apache.tapestry.form.validator;

+

+import org.apache.tapestry.IMarkupWriter;

+import org.apache.tapestry.IRequestCycle;

+import org.apache.tapestry.form.FormComponentContributorContext;

+import org.apache.tapestry.form.IFormComponent;

+import org.apache.tapestry.form.ValidationMessages;

+import org.easymock.MockControl;

+

+/**

+ * Tests for [EMAIL PROTECTED] 
org.apache.tapestry.form.validator.AbstractValidatorWrapper}

+ * 

+ * @author Howard Lewis Ship

+ * @since 4.0

+ */

+public class TestValidatorWrapper extends BaseValidatorTestCase

+{

+    public static class Fixture extends AbstractValidatorWrapper

+    {

+        private final Validator _delegate;

+

+        public Fixture(Validator delegate)

+        {

+            _delegate = delegate;

+        }

+

+        protected Validator getDelegate()

+        {

+            return _delegate;

+        }

+    }

+

+    private Validator newValidator()

+    {

+        return (Validator) newMock(Validator.class);

+    }

+

+    public void testValidate() throws Exception

+    {

+        IFormComponent field = newField();

+        ValidationMessages messages = newMessages();

+        Object value = new Object();

+

+        Validator delegate = newValidator();

+

+        delegate.validate(field, messages, value);

+

+        replayControls();

+

+        new Fixture(delegate).validate(field, messages, value);

+

+        verifyControls();

+    }

+

+    public void testRenderContribution()

+    {

+        IMarkupWriter writer = newWriter();

+        IRequestCycle cycle = newCycle();

+        FormComponentContributorContext context = newContext();

+        IFormComponent field = newField();

+

+        Validator delegate = newValidator();

+

+        delegate.renderContribution(writer, cycle, context, field);

+

+        replayControls();

+

+        new Fixture(delegate).renderContribution(writer, cycle, context, 
field);

+

+        verifyControls();

+    }

+

+    public void testGetAcceptsNull()

+    {

+        MockControl delegatec = newControl(Validator.class);

+        Validator delegate = (Validator) delegatec.getMock();

+

+        delegate.getAcceptsNull();

+        delegatec.setReturnValue(true);

+

+        replayControls();

+

+        Validator wrapper = new Fixture(delegate);

+

+        assertEquals(true, wrapper.getAcceptsNull());

+

+        verifyControls();

+

+        delegate.getAcceptsNull();

+        delegatec.setReturnValue(false);

+

+        replayControls();

+

+        assertEquals(false, wrapper.getAcceptsNull());

+

+        verifyControls();

+    }

+

+    public void testIsRequired()

+    {

+        MockControl delegatec = newControl(Validator.class);

+        Validator delegate = (Validator) delegatec.getMock();

+

+        delegate.isRequired();

+        delegatec.setReturnValue(true);

+

+        replayControls();

+

+        Validator wrapper = new Fixture(delegate);

+

+        assertEquals(true, wrapper.isRequired());

+

+        verifyControls();

+

+        delegate.isRequired();

+        delegatec.setReturnValue(false);

+

+        replayControls();

+

+        assertEquals(false, wrapper.isRequired());

+

+        verifyControls();

+    }

+}


Modified: jakarta/tapestry/trunk/status.xml
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/status.xml?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- jakarta/tapestry/trunk/status.xml (original)
+++ jakarta/tapestry/trunk/status.xml Mon Aug 29 15:38:14 2005
@@ -53,6 +53,7 @@
     <release version="4.0-beta-6" date="unreleased">
       <action type="update" dev="HLS" due-to="Henri Yandell">Convert Tapestry 
repository from CVS to SVN</action>
       <action type="fix" dev="HLS" fixes-bug="TAPESTRY-611">Pattern validator 
invokes wrong client-side JavaScript function</action>      
+      <action type="fix" dev="HLS" fixes-bug="TAPESTRY-610">$bean syntax for 
validators: binding prefix is broken</action>
     </release>
     <release version="4.0-beta-5" date="Aug 26 2005">
       <action type="fix" dev="MB,HLS" fixes-bug="TAPESTRY-552">Improperly 
configured SerializableAdaptor (for DataSqueezer) prevents serialized objects 
from being de-serialized</action>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to