You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by fr...@apache.org on 2007/02/05 18:15:44 UTC

svn commit: r503777 [3/4] - in /tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support: ./ .settings/ src/main/java/org/apache/tapestry/ src/main/java/org/apache/tapestry/annotations/ src/main/java/org/apache/tapestry/beaneditor/ src/main/ja...

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/java/org/apache/tapestry/validator/Min.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/java/org/apache/tapestry/validator/Min.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/java/org/apache/tapestry/validator/Min.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/java/org/apache/tapestry/validator/Min.java Mon Feb  5 09:15:39 2007
@@ -14,17 +14,23 @@
 
 package org.apache.tapestry.validator;
 
+import java.io.Serializable;
+
 import org.apache.tapestry.Field;
 import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.Validator;
 import org.apache.tapestry.ioc.MessageFormatter;
 
 /* A vaidator that enforces that a number is greater than some minimum integer value. */
-public class Min implements Validator<Long, Number>
+public class Min implements Validator<Number>, Serializable
 {
-    public Class<Long> getConstraintType()
+    private static final long serialVersionUID = 1L;
+    
+    private long _min;
+
+    public Min(long min)
     {
-        return Long.class;
+        _min = min;
     }
 
     public String getMessageKey()
@@ -32,20 +38,15 @@
         return "min-integer";
     }
 
-    public Class<Number> getValueType()
-    {
-        return Number.class;
-    }
-
     public boolean invokeIfBlank()
     {
         return false;
     }
 
-    public void validate(Field field, Long constraintValue, MessageFormatter formatter, Number value)
+    public void validate(Field field, MessageFormatter formatter, Number value)
             throws ValidationException
     {
-        if (value.longValue() < constraintValue)
-            throw new ValidationException(formatter.format(constraintValue, field.getLabel()));
+        if (value.longValue() < _min)
+            throw new ValidationException(formatter.format(_min, field.getLabel()));
     }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/java/org/apache/tapestry/validator/MinLength.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/java/org/apache/tapestry/validator/MinLength.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/java/org/apache/tapestry/validator/MinLength.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/java/org/apache/tapestry/validator/MinLength.java Mon Feb  5 09:15:39 2007
@@ -14,6 +14,8 @@
 
 package org.apache.tapestry.validator;
 
+import java.io.Serializable;
+
 import org.apache.tapestry.Field;
 import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.Validator;
@@ -22,23 +24,26 @@
 /**
  * Validates that a string value has a minimum length.
  */
-public final class MinLength implements Validator<Integer, String>
+public final class MinLength implements Validator<String>, Serializable
 {
+    private static final long serialVersionUID = 1L;
+
+    private int _minLength;
+
+    public MinLength(int minLength)
+    {
+        _minLength = minLength;
+    }
     public String getMessageKey()
     {
         return "minimum-string-length";
     }
 
-    public void validate(Field field, Integer constraintValue, MessageFormatter formatter,
+    public void validate(Field field, MessageFormatter formatter,
             String value) throws ValidationException
     {
-        if (value.length() < constraintValue)
-            throw new ValidationException(formatter.format(constraintValue, field.getLabel()));
-    }
-
-    public Class<Integer> getConstraintType()
-    {
-        return Integer.class;
+        if (value.length() < _minLength)
+            throw new ValidationException(formatter.format(_minLength, field.getLabel()));
     }
 
     public boolean invokeIfBlank()
@@ -46,8 +51,4 @@
         return false;
     }
 
-    public Class<String> getValueType()
-    {
-        return String.class;
-    }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/java/org/apache/tapestry/validator/Required.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/java/org/apache/tapestry/validator/Required.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/java/org/apache/tapestry/validator/Required.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/java/org/apache/tapestry/validator/Required.java Mon Feb  5 09:15:39 2007
@@ -14,6 +14,8 @@
 
 package org.apache.tapestry.validator;
 
+import java.io.Serializable;
+
 import org.apache.tapestry.Field;
 import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.Validator;
@@ -23,32 +25,25 @@
  * A validator that enforces that the value is not null and not the empty string. This validator is
  * not configurable.
  */
-public final class Required implements Validator<Void, Object>
+public final class Required implements Validator<Object>, Serializable
 {
+    private static final long serialVersionUID = 1L;
+
     public String getMessageKey()
     {
         return "required";
     }
 
-    public void validate(Field field, Void constraintValue, MessageFormatter formatter, Object value)
+    public void validate(Field field, MessageFormatter formatter, Object value)
             throws ValidationException
     {
         if (value == null || value.toString().equals(""))
             throw new ValidationException(formatter.format(field.getLabel()));
     }
 
-    public Class<Void> getConstraintType()
-    {
-        return null;
-    }
-
     public boolean invokeIfBlank()
     {
         return true;
     }
 
-    public Class<Object> getValueType()
-    {
-        return Object.class;
-    }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/resources/org/apache/tapestry/internal/ValidationMessages.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/resources/org/apache/tapestry/internal/ValidationMessages.properties?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/resources/org/apache/tapestry/internal/ValidationMessages.properties (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/main/resources/org/apache/tapestry/internal/ValidationMessages.properties Mon Feb  5 09:15:39 2007
@@ -19,6 +19,7 @@
 minimum-string-length=You must provide at least %d characters for %s.
 maximum-string-length=You may provide at most %d characters for %s.
 min-integer=%2$s requires a value of at least %1$d. 
+max-integer=%2$s requires a value of at most %1$d. 
 
 # This is where the translator messages go.
 

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/BlockDemo.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/BlockDemo.html?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/BlockDemo.html (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/BlockDemo.html Mon Feb  5 09:15:39 2007
@@ -8,7 +8,7 @@
 </p>    
     
     <form t:type="Form">
-        <select t:type="Select" t:id="blockName" model="',fred,barney'" onchange="this.form.submit();"/> <label t:type="Label" for="blockName">Block to display</label>
+        <select t:id="blockName" onchange="this.form.submit();"/> <label t:type="Label" for="blockName">Block to display</label>
     </form>
     
     <p>The block: [<t:comp type="Render" value="blockToRender"/>]</p>

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/PasswordFieldDemo.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/PasswordFieldDemo.html?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/PasswordFieldDemo.html (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/PasswordFieldDemo.html Mon Feb  5 09:15:39 2007
@@ -8,10 +8,10 @@
         <span t:type="Errors"/>
 
         <label t:type="Label" for="userName"/>
-        <input t:type="TextField" t:id="userName" t:validate="required" size="30"/>
+        <input t:id="userName" size="30"/>
         <br/>
         <label t:type="Label" for="password"/>
-        <input t:id="password" t:validate="required" size="30"/>
+        <input t:id="password" size="30"/>
         <br/>
         <input type="submit" value="Login"/>
     </form>

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/SimpleForm.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/SimpleForm.html?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/SimpleForm.html (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/SimpleForm.html Mon Feb  5 09:15:39 2007
@@ -11,25 +11,21 @@
         <div class="t-beaneditor">
             
             <label id="l2" t:type="Label" for="email">This isn't used</label>
-            <input t:type="TextField"
-                t:id="email" value="incident.email" size="50" disabled="disabled"/>
+            <input 
+                t:id="email" size="50"/>
             <br/>
             <label id="l3" t:type="Label" for="message"/>
-            <input t:type="TextArea" t:id="message"
-                label="Incident Message" value="incident.message" cols="50" rows="10"
-                disabled="disabled"> You can put text here, but it isn't used. </input>
+            <input t:id="message"
+                cols="50" rows="10"> You can put text here, but it isn't used. </input>
             <br/>
             <label id="l4" t:type="Label" for="operatingSystem"/>
-            <select t:type="Select"
-                t:id="operatingSystem" value="incident.operatingSystem" model="message:os-values"
-                disabled="disabled"/>
+            <select t:id="operatingSystem" />
             <br/>
             <label id="l5" t:type="Label" for="department"/>
-            <select t:type="Select" t:id="department"
-                value="incident.department" disabled="disabled"/>
+            <select t:id="department"/>
             <br/>
             <label id="l6" t:type="Label" for="urgent"/>
-            <input t:type="Checkbox" t:id="urgent" value="incident.urgent" disabled="disabled"/>
+            <input t:id="urgent"/>
             <br/>
             <input type="submit"/></div>
     </form>

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/ToDoList.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/ToDoList.html?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/ToDoList.html (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/ToDoList.html Mon Feb  5 09:15:39 2007
@@ -13,8 +13,7 @@
             </tr>
             <tr t:type="Loop" source="items" value="item" encoder="encoder">
                 <td>
-                    <input t:type="TextField" t:id="title" value="item.title" size="30"
-                        validate="required"/>
+                    <input t:id="title" size="30"/>
                 </td>
                 <td> NOT YET </td>            
             </tr>

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/ToDoListVolatile.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/ToDoListVolatile.html?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/ToDoListVolatile.html (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/app1/WEB-INF/ToDoListVolatile.html Mon Feb  5 09:15:39 2007
@@ -13,8 +13,7 @@
             </tr>
             <tr t:type="Loop" source="items" value="item" volatile="true">
                 <td>
-                    <input t:type="TextField" t:id="title" value="item.title" size="30"
-                        validate="required"/>
+                    <input t:id="title" size="30"/>
                 </td>
                 <td> NOT YET </td>            
             </tr>

Added: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/BindingExprValueConduitTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/BindingExprValueConduitTest.java?view=auto&rev=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/BindingExprValueConduitTest.java (added)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/BindingExprValueConduitTest.java Mon Feb  5 09:15:39 2007
@@ -0,0 +1,83 @@
+// Copyright 2007 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;
+
+import org.apache.tapestry.internal.bindings.LiteralBinding;
+import org.apache.tapestry.internal.services.NoOpComponentResources;
+import org.apache.tapestry.runtime.ComponentResourcesAware;
+import org.apache.tapestry.services.BindingSource;
+import org.apache.tapestry.services.NoOpBindingSource;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class BindingExprValueConduitTest extends Assert
+{
+    public static class MyComponent implements BindingSourceProvider, ComponentResourcesAware
+    {
+        private ComponentResources _resources;
+
+        private BindingSource _bindingSource;
+
+        public MyComponent(ComponentResources resources, BindingSource bindingSource)
+        {
+            _resources = resources;
+            _bindingSource = bindingSource;
+        }
+
+        public ComponentResources getComponentResources()
+        {
+            return _resources;
+        }
+
+        public BindingSource getBindingSource()
+        {
+            return _bindingSource;
+        }
+
+    }
+
+    @Test
+    public void test()
+    {
+        final ComponentResources containerResources = new NoOpComponentResources();
+        NoOpComponentResources componentResources = new NoOpComponentResources()
+        {
+
+            @Override
+            public ComponentResources getContainerResources()
+            {
+                return containerResources;
+            }
+
+        };
+        BindingSource bindingSource = new NoOpBindingSource()
+        {
+
+            @Override
+            public Binding newBinding(String description, ComponentResources container,
+                    String expression)
+            {
+                assertSame(container, containerResources);
+                return new LiteralBinding("", "[" + expression + "]", null);
+            }
+
+        };
+        MyComponent component = new MyComponent(componentResources, bindingSource);
+        BindingExprValueConduit conduit = new BindingExprValueConduit("foo");
+        assertEquals(conduit.get(component), "[foo]");
+
+    }
+}

Propchange: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/BindingExprValueConduitTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/EnumSelectModelTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/EnumSelectModelTest.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/EnumSelectModelTest.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/EnumSelectModelTest.java Mon Feb  5 09:15:39 2007
@@ -30,9 +30,9 @@
 
         replay();
 
-        SelectModel model = new EnumSelectModel(Stooge.class, messages);
+        SelectModel<Stooge> model = new EnumSelectModel<Stooge>(Stooge.class, messages);
 
-        List<OptionModel> options = model.getOptions();
+        List<OptionModel<Stooge>> options = model.getOptions();
 
         assertEquals(options.size(), 3);
 
@@ -54,9 +54,9 @@
 
         replay();
 
-        SelectModel model = new EnumSelectModel(Stooge.class, messages);
+        SelectModel<Stooge> model = new EnumSelectModel<Stooge>(Stooge.class, messages);
 
-        List<OptionModel> options = model.getOptions();
+        List<OptionModel<Stooge>> options = model.getOptions();
 
         assertEquals(options.size(), 3);
 
@@ -78,9 +78,9 @@
 
         replay();
 
-        SelectModel model = new EnumSelectModel(Stooge.class, messages);
+        SelectModel<Stooge> model = new EnumSelectModel<Stooge>(Stooge.class, messages);
 
-        List<OptionModel> options = model.getOptions();
+        List<OptionModel<Stooge>> options = model.getOptions();
 
         assertEquals(options.size(), 3);
 
@@ -91,7 +91,7 @@
         verify();
     }
 
-    private void checkOption(List<OptionModel> options, int i, String label, Stooge value)
+    private void checkOption(List<OptionModel<Stooge>> options, int i, String label, Stooge value)
     {
         OptionModel model = options.get(i);
 

Added: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/corelib/base/RestorePropertiesActionTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/corelib/base/RestorePropertiesActionTest.java?view=auto&rev=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/corelib/base/RestorePropertiesActionTest.java (added)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/corelib/base/RestorePropertiesActionTest.java Mon Feb  5 09:15:39 2007
@@ -0,0 +1,64 @@
+// Copyright 2007 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.corelib.base;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class RestorePropertiesActionTest extends Assert
+{
+    public static class Foo
+    {
+        int v1;
+
+        String _v2;
+
+        public void setV1(int v1)
+        {
+            this.v1 = v1;
+        }
+
+        public void setV2(String v2)
+        {
+            this._v2 = v2;
+        }
+
+        public int getV1()
+        {
+            return v1;
+        }
+
+        public String getV2()
+        {
+            return _v2;
+        }
+
+    }
+
+    @Test
+    public void restore()
+    {
+        Foo foo1 = new Foo();
+        foo1.v1 = 100;
+        foo1._v2 = "hello";
+        RestorePropertiesAction<Object> action = new RestorePropertiesAction<Object>(foo1, "v1",
+                "v2");
+        Foo foo2 = new Foo();
+        action.execute(foo2);
+        assertEquals(foo2.v1, 100);
+        assertEquals(foo2._v2, "hello");
+
+    }
+}

Propchange: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/corelib/base/RestorePropertiesActionTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/corelib/components/SelectTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/corelib/components/SelectTest.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/corelib/components/SelectTest.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/corelib/components/SelectTest.java Mon Feb  5 09:15:39 2007
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.tapestry.ConstantValueConduit;
 import org.apache.tapestry.MarkupWriter;
 import org.apache.tapestry.OptionGroupModel;
 import org.apache.tapestry.OptionModel;
@@ -46,9 +47,9 @@
     @Test
     public void empty_model()
     {
-        Select select = new Select();
+        Select<Object> select = new Select<Object>();
 
-        select.setModel(new SelectModelImpl(null, null));
+        select.setModel(new SelectModelImpl<Object>(null, null));
 
         select.options(null);
     }
@@ -79,21 +80,16 @@
     @Test
     public void just_options() throws Exception
     {
-        List<OptionModel> options = TapestryUtils
+        List<OptionModel<String>> options = TapestryUtils
                 .toOptionModels("fred=Fred Flintstone,barney=Barney Rubble");
 
-        Select select = new Select();
-
-        select.setModel(new SelectModelImpl(null, options));
-        select.setValue("barney");
-
+        Select<String> select = new Select<String>();
+        select.setModel(new SelectModelImpl<String>(null, options));
+        select.setValueConduit(new ConstantValueConduit<String>("barney"));
         MarkupWriter writer = new MarkupWriterImpl(new XMLMarkupModel(), null);
-
-        writer.element("select");
-
+        select.beginRender(writer);
         select.options(writer);
-
-        writer.end();
+        select.afterRender(writer);
 
         assertEquals(writer.toString(), read("just_options.html"));
     }
@@ -103,21 +99,19 @@
     {
         // Extra cast needed for Sun compiler, not Eclipse compiler.
 
-        List<OptionModel> options = Arrays.asList((OptionModel) new OptionModelImpl("Fred", false,
-                "fred", "class", "pixie"));
+        List<OptionModel<String>> options = Arrays
+                .asList((OptionModel<String>) new OptionModelImpl<String>("Fred", false, "fred",
+                        "class", "pixie"));
 
-        Select select = new Select();
+        Select<String> select = new Select<String>();
 
-        select.setModel(new SelectModelImpl(null, options));
-        select.setValue("barney");
+        select.setModel(new SelectModelImpl<String>(null, options));
+        select.setValueConduit(new ConstantValueConduit<String>("barney"));
 
         MarkupWriter writer = new MarkupWriterImpl(new XMLMarkupModel(), null);
-
-        writer.element("select");
-
+        select.beginRender(writer);
         select.options(writer);
-
-        writer.end();
+        select.afterRender(writer);
 
         assertEquals(writer.toString(), read("option_attributes.html"));
     }
@@ -127,21 +121,19 @@
     {
         // Extra cast needed for Sun compiler, not Eclipse compiler.
 
-        List<OptionModel> options = CollectionFactory.newList((OptionModel) new OptionModelImpl(
-                "Fred", true, "fred", "class", "pixie"));
+        List<OptionModel<String>> options = CollectionFactory
+                .newList((OptionModel<String>) new OptionModelImpl<String>("Fred", true, "fred",
+                        "class", "pixie"));
 
-        Select select = new Select();
+        Select<String> select = new Select<String>();
 
-        select.setModel(new SelectModelImpl(null, options));
-        select.setValue("barney");
+        select.setModel(new SelectModelImpl<String>(null, options));
+        select.setValueConduit(new ConstantValueConduit<String>("barney"));
 
         MarkupWriter writer = new MarkupWriterImpl(new XMLMarkupModel(), null);
-
-        writer.element("select");
-
+        select.beginRender(writer);
         select.options(writer);
-
-        writer.end();
+        select.afterRender(writer);
 
         assertEquals(writer.toString(), read("disabled_option.html"));
 
@@ -150,24 +142,21 @@
     @Test
     public void option_groups() throws Exception
     {
-        OptionGroupModel husbands = new OptionGroupModelImpl("Husbands", false, TapestryUtils
-                .toOptionModels("Fred,Barney"));
-        OptionGroupModel wives = new OptionGroupModelImpl("Wives", true, TapestryUtils
-                .toOptionModels("Wilma,Betty"));
-        List<OptionGroupModel> groupModels = CollectionFactory.newList(husbands, wives);
+        OptionGroupModel<String> husbands = new OptionGroupModelImpl<String>("Husbands", false,
+                TapestryUtils.toOptionModels("Fred,Barney"));
+        OptionGroupModel<String> wives = new OptionGroupModelImpl<String>("Wives", true,
+                TapestryUtils.toOptionModels("Wilma,Betty"));
+        List<OptionGroupModel<String>> groupModels = CollectionFactory.newList(husbands, wives);
 
-        Select select = new Select();
+        Select<String> select = new Select<String>();
 
-        select.setModel(new SelectModelImpl(groupModels, null));
-        select.setValue("Fred");
+        select.setModel(new SelectModelImpl<String>(groupModels, null));
+        select.setValueConduit(new ConstantValueConduit<String>("Fred"));
 
         MarkupWriter writer = new MarkupWriterImpl(new XMLMarkupModel(), null);
-
-        writer.element("select");
-
+        select.beginRender(writer);
         select.options(writer);
-
-        writer.end();
+        select.afterRender(writer);
 
         assertEquals(writer.toString(), read("option_groups.html"));
     }
@@ -175,22 +164,19 @@
     @Test
     public void option_groups_precede_ungroup_options() throws Exception
     {
-        OptionGroupModel husbands = new OptionGroupModelImpl("Husbands", false, TapestryUtils
-                .toOptionModels("Fred,Barney"));
+        OptionGroupModel<String> husbands = new OptionGroupModelImpl<String>("Husbands", false,
+                TapestryUtils.toOptionModels("Fred,Barney"));
 
-        Select select = new Select();
+        Select<String> select = new Select<String>();
 
-        select.setModel(new SelectModelImpl(Collections.singletonList(husbands), TapestryUtils
-                .toOptionModels("Wilma,Betty")));
-        select.setValue("Fred");
+        select.setModel(new SelectModelImpl<String>(Collections.singletonList(husbands),
+                TapestryUtils.toOptionModels("Wilma,Betty")));
+        select.setValueConduit(new ConstantValueConduit<String>("Fred"));
 
         MarkupWriter writer = new MarkupWriterImpl(new XMLMarkupModel(), null);
-
-        writer.element("select");
-
+        select.beginRender(writer);
         select.options(writer);
-
-        writer.end();
+        select.afterRender(writer);
 
         assertEquals(writer.toString(), read("option_groups_precede_ungroup_options.html"));
     }
@@ -200,21 +186,18 @@
     {
         Map<String, String> attributes = Collections.singletonMap("class", "pixie");
 
-        OptionGroupModel husbands = new OptionGroupModelImpl("Husbands", false, TapestryUtils
+        OptionGroupModel<String> husbands = new OptionGroupModelImpl<String>("Husbands", false, TapestryUtils
                 .toOptionModels("Fred,Barney"), attributes);
 
-        Select select = new Select();
+        Select<String> select = new Select<String>();
 
-        select.setModel(new SelectModelImpl(Collections.singletonList(husbands), null));
-        select.setValue("Fred");
+        select.setModel(new SelectModelImpl<String>(Collections.singletonList(husbands), null));
+        select.setValueConduit(new ConstantValueConduit<String>("Fred"));
 
         MarkupWriter writer = new MarkupWriterImpl(new XMLMarkupModel(), null);
-
-        writer.element("select");
-
+        select.beginRender(writer);
         select.options(writer);
-
-        writer.end();
+        select.afterRender(writer);
 
         assertEquals(writer.toString(), read("option_group_attributes.html"));
     }

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/data/RegistrationData.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/data/RegistrationData.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/data/RegistrationData.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/data/RegistrationData.java Mon Feb  5 09:15:39 2007
@@ -14,8 +14,11 @@
 
 package org.apache.tapestry.integration.app1.data;
 
+import org.apache.tapestry.beaneditor.LengthRange;
+import org.apache.tapestry.beaneditor.Max;
+import org.apache.tapestry.beaneditor.Min;
 import org.apache.tapestry.beaneditor.Order;
-import org.apache.tapestry.beaneditor.Validate;
+import org.apache.tapestry.beaneditor.Required;
 
 public class RegistrationData
 {
@@ -30,7 +33,8 @@
     private boolean _citizen;
 
     @Order(300)
-    @Validate("min=1900,max=2007")
+    @Min(1900)
+    @Max(2007)
     public int getBirthYear()
     {
         return _birthYear;
@@ -47,13 +51,15 @@
     }
 
     @Order(100)
-    @Validate("required,minlength=3")
+    @Required
+    @LengthRange(minLength=3)
     public void setFirstName(String firstName)
     {
         _firstName = firstName;
     }
 
-    @Validate("required,minlength=5")
+    @Required
+    @LengthRange(minLength=5)
     public String getLastName()
     {
         return _lastName;

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/BlockDemo.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/BlockDemo.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/BlockDemo.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/BlockDemo.java Mon Feb  5 09:15:39 2007
@@ -17,15 +17,21 @@
 import java.util.Map;
 
 import org.apache.tapestry.Block;
+import org.apache.tapestry.annotations.Component;
 import org.apache.tapestry.annotations.ComponentClass;
 import org.apache.tapestry.annotations.Inject;
 import org.apache.tapestry.annotations.Persist;
 import org.apache.tapestry.annotations.Retain;
+import org.apache.tapestry.corelib.components.Select;
+import org.apache.tapestry.internal.TapestryUtils;
 import org.apache.tapestry.ioc.internal.util.CollectionFactory;
 
 @ComponentClass
 public class BlockDemo
 {
+    @Component(id="blockName")
+    private Select<String> _blockNameField;
+    
     @Inject
     private Block _fred;
 
@@ -61,4 +67,9 @@
         _blockName = blockName;
     }
 
+    public void configureBlockName()
+    {
+        _blockNameField.useDefaultEncoder(String.class);
+        _blockNameField.setModel(TapestryUtils.toSelectModel(",fred,barney"));
+    }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/PasswordFieldDemo.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/PasswordFieldDemo.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/PasswordFieldDemo.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/PasswordFieldDemo.java Mon Feb  5 09:15:39 2007
@@ -20,11 +20,16 @@
 import org.apache.tapestry.annotations.Retain;
 import org.apache.tapestry.corelib.components.Form;
 import org.apache.tapestry.corelib.components.PasswordField;
+import org.apache.tapestry.corelib.components.TextField;
 import org.apache.tapestry.integration.app1.services.UserAuthenticator;
+import org.apache.tapestry.validator.Required;
 
 @ComponentClass
 public class PasswordFieldDemo
 {
+    @Component(id="userName")
+    private TextField<String> _userNameField;
+    
     @Retain
     private String _userName;
 
@@ -36,7 +41,7 @@
     private UserAuthenticator _authenticator;
 
     @Component(id = "password")
-    private PasswordField _passwordField;
+    private PasswordField<String> _passwordField;
 
     @Component
     private Form _form;
@@ -72,4 +77,12 @@
         _userName = userName;
     }
 
+    public void configureUserName()
+    {
+        _userNameField.setValidators(new Required());
+    }
+    public void configurePassword()
+    {
+        _passwordField.setValidators(new Required());
+    }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/SimpleForm.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/SimpleForm.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/SimpleForm.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/SimpleForm.java Mon Feb  5 09:15:39 2007
@@ -14,13 +14,78 @@
 
 package org.apache.tapestry.integration.app1.pages;
 
+import org.apache.tapestry.ComponentResources;
+import org.apache.tapestry.annotations.Component;
 import org.apache.tapestry.annotations.ComponentClass;
+import org.apache.tapestry.annotations.Inject;
 import org.apache.tapestry.annotations.Persist;
+import org.apache.tapestry.corelib.components.Checkbox;
+import org.apache.tapestry.corelib.components.Select;
+import org.apache.tapestry.corelib.components.TextArea;
+import org.apache.tapestry.corelib.components.TextField;
+import org.apache.tapestry.integration.app1.data.Department;
 import org.apache.tapestry.integration.app1.data.IncidentData;
+import org.apache.tapestry.internal.TapestryUtils;
+import org.apache.tapestry.validator.Required;
 
 @ComponentClass
 public class SimpleForm
 {
+    @Component
+    private TextField<String> _email;
+
+    @Component
+    private TextArea<String> _message;
+
+    @Component
+    private Select<Department> _department;
+
+    @Component
+    private Select<String> _operatingSystem;
+
+    @Component
+    private Checkbox _urgent;
+
+    public void configureEmail()
+    {
+        _email.setValueBindingExpr("incident.email");
+        _email.setValidators(new Required());
+        _email.setDisabled(_disabled);
+    }
+
+    public void configureMessage()
+    {
+        _message.setValueBindingExpr("incident.message");
+        _message.setValidators(new Required());
+        _message.setLabel("Incident Message");
+        _message.setDisabled(_disabled);
+    }
+
+    public void configureDepartment()
+    {
+        _department.setValueBindingExpr("incident.department");
+        _department.setDisabled(_disabled);
+        _department.useDefaultsFor(Department.class);
+    }
+
+    @Inject
+    private ComponentResources _resources;
+
+    public void configureOperatingSystem()
+    {
+        _operatingSystem.setValueBindingExpr("incident.operatingSystem");
+        _operatingSystem.setDisabled(_disabled);
+        _operatingSystem.setModel(TapestryUtils.toSelectModel(_resources.getMessages().get(
+                "os-values")));
+        _operatingSystem.useDefaultEncoder(String.class);
+    }
+
+    public void configureUrgent()
+    {
+        _urgent.setValueBindingExpr("incident.urgent");
+        _urgent.setDisabled(_disabled);
+    }
+
     @Persist
     private IncidentData _incident;
 

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ToDoList.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ToDoList.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ToDoList.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ToDoList.java Mon Feb  5 09:15:39 2007
@@ -22,12 +22,17 @@
 import org.apache.tapestry.annotations.ComponentClass;
 import org.apache.tapestry.annotations.Inject;
 import org.apache.tapestry.corelib.components.Form;
+import org.apache.tapestry.corelib.components.TextField;
 import org.apache.tapestry.integration.app1.data.ToDoItem;
 import org.apache.tapestry.integration.app1.services.ToDoDatabase;
+import org.apache.tapestry.validator.Required;
 
 @ComponentClass
 public class ToDoList
 {
+    @Component
+    private TextField<String> _title;
+
     @Inject
     private ToDoDatabase _database;
 
@@ -101,5 +106,11 @@
     void onActionFromReset()
     {
         _database.reset();
+    }
+
+    public void configureTitle()
+    {
+        _title.setValueBindingExpr("item.title");
+        _title.setValidators(new Required());
     }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ToDoListVolatile.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ToDoListVolatile.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ToDoListVolatile.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ToDoListVolatile.java Mon Feb  5 09:15:39 2007
@@ -20,12 +20,17 @@
 import org.apache.tapestry.annotations.ComponentClass;
 import org.apache.tapestry.annotations.Inject;
 import org.apache.tapestry.corelib.components.Form;
+import org.apache.tapestry.corelib.components.TextField;
 import org.apache.tapestry.integration.app1.data.ToDoItem;
 import org.apache.tapestry.integration.app1.services.ToDoDatabase;
+import org.apache.tapestry.validator.Required;
 
 @ComponentClass
 public class ToDoListVolatile
 {
+    @Component
+    private TextField<String> _title;
+    
     @Inject
     private ToDoDatabase _database;
 
@@ -87,5 +92,11 @@
     void onActionFromReset()
     {
         _database.reset();
+    }
+    
+    public void configureTitle()
+    {
+        _title.setValueBindingExpr("item.title");
+        _title.setValidators(new Required());
     }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ValidForm.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ValidForm.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ValidForm.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ValidForm.java Mon Feb  5 09:15:39 2007
@@ -14,13 +14,54 @@
 
 package org.apache.tapestry.integration.app1.pages;
 
+import org.apache.tapestry.annotations.Component;
 import org.apache.tapestry.annotations.ComponentClass;
 import org.apache.tapestry.annotations.Persist;
+import org.apache.tapestry.corelib.components.Checkbox;
+import org.apache.tapestry.corelib.components.TextArea;
+import org.apache.tapestry.corelib.components.TextField;
 import org.apache.tapestry.integration.app1.data.IncidentData;
+import org.apache.tapestry.validator.Required;
 
 @ComponentClass
 public class ValidForm
 {
+    @Component
+    private TextField<String> _email;
+
+    @Component
+    private TextArea<String> _message;
+
+    @Component
+    private Checkbox _urgent;
+
+    @Component
+    private TextField<Integer> _hours;
+
+    public void configureEmail()
+    {
+        _email.setValueBindingExpr("incident.email");
+        _email.setValidators(new Required());
+    }
+
+    public void configureMessage()
+    {
+        _message.setValueBindingExpr("incident.message");
+        _message.setValidators(new Required());
+        _message.setLabel("Incident Message");
+    }
+
+    public void configureUrgent()
+    {
+        _urgent.setValueBindingExpr("incident.urgent");
+    }
+
+    public void configureHours()
+    {
+        _hours.setValueBindingExpr("incident.hours");
+        _hours.setValidators(new Required());
+    }
+
     @Persist
     private IncidentData _incident;
 

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForForm.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForForm.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForForm.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForForm.java Mon Feb  5 09:15:39 2007
@@ -14,12 +14,22 @@
 
 package org.apache.tapestry.integration.app2.pages;
 
+import org.apache.tapestry.annotations.Component;
 import org.apache.tapestry.annotations.ComponentClass;
 import org.apache.tapestry.annotations.Persist;
+import org.apache.tapestry.corelib.components.TextField;
 
 @ComponentClass
 public class TestPageForForm
 {
+    @Component
+    private TextField _t1;
+
+    public void configureT1()
+    {
+        _t1.setValueBindingExpr("value");
+    }
+
     @Persist
     private String value;
 

Added: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSelect.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSelect.java?view=auto&rev=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSelect.java (added)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSelect.java Mon Feb  5 09:15:39 2007
@@ -0,0 +1,112 @@
+// Copyright 2006 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.integration.app2.pages;
+
+import java.io.Serializable;
+
+import org.apache.tapestry.ValueEncoder;
+import org.apache.tapestry.annotations.Component;
+import org.apache.tapestry.annotations.ComponentClass;
+import org.apache.tapestry.annotations.Persist;
+import org.apache.tapestry.corelib.components.Errors;
+import org.apache.tapestry.corelib.components.Form;
+import org.apache.tapestry.corelib.components.Select;
+import org.apache.tapestry.internal.OptionModelImpl;
+import org.apache.tapestry.internal.SelectModelImpl;
+import org.apache.tapestry.validator.Max;
+import org.apache.tapestry.validator.Min;
+
+@ComponentClass
+public class TestPageForSelect
+{
+    public static class HexEncoder implements ValueEncoder<Integer>, Serializable
+    {
+        private static final long serialVersionUID = 1L;
+
+        public String toClient(Object component, Integer value)
+        {
+            return String.format("%02x", value);
+        }
+
+        public Integer toValue(Object component, String clientValue)
+        {
+            return Integer.parseInt(clientValue, 16);
+        }
+    }
+    public enum Direction { EAST, SOUTH, WEST, NORTH }
+
+    @SuppressWarnings("unused")
+    @Component
+    private Errors _errors;
+
+    @SuppressWarnings("unused")
+    @Component
+    private Form _form1;
+
+    @SuppressWarnings("unused")
+    @Component
+    private Form _form2;
+
+    @Component
+    private Select<Integer> _select1;
+
+    @Component
+    private Select<Direction> _select2;
+
+    @Persist
+    private int v1 = 15; // Pre-select the second option
+
+    @Persist
+    private Direction _v2;
+
+    public Direction getV2()
+    {
+        return _v2;
+    }
+
+    public void setV2(Direction v2)
+    {
+        _v2 = v2;
+    }
+
+    public int getV1()
+    {
+        return v1;
+    }
+
+    public void setV1(int value)
+    {
+        this.v1 = value;
+    }
+
+    public void configureSelect1()
+    {
+        _select1.setLabel("my value");
+        _select1.setValueBindingExpr("v1");
+        _select1.setEncoder(new HexEncoder());
+        _select1.setModel(new SelectModelImpl<Integer>(new OptionModelImpl<Integer>("[1a]", false,
+                26), new OptionModelImpl<Integer>("[0f]", false, 15), new OptionModelImpl<Integer>(
+                "[ff]", false, 255)));
+        _select1.setValidators(new Min(10), new Max(200));
+    }
+
+    public void configureSelect2()
+    {
+        _select2.setLabel("dir");
+        _select2.setValueBindingExpr("v2");
+        _select2.useDefaultEncoder(Direction.class);
+        _select2.useDefaultModel(Direction.class);
+    }
+}

Propchange: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSelect.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSubmit.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSubmit.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSubmit.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSubmit.java Mon Feb  5 09:15:39 2007
@@ -27,27 +27,35 @@
 {
     @SuppressWarnings("unused")
     @Component
-    private Form form1;
+    private Form _form1;
 
     @SuppressWarnings("unused")
     @Component
-    private Form form2;
+    private Form _form2;
 
     @SuppressWarnings("unused")
     @Component
-    private Submit capitalize1;
+    private Submit _capitalize1;
 
     @SuppressWarnings("unused")
     @Component
-    private Submit capitalize2;
+    private Submit _capitalize2;
 
-    @SuppressWarnings("unused")
-    @Component(parameters = "value=value")
-    private TextField t1;
+    @Component
+    private TextField _t1;
 
-    @SuppressWarnings("unused")
-    @Component(parameters = "value=value")
-    private TextField t2;
+    public void configureT1()
+    {
+        _t1.setValueBindingExpr("value");
+    }
+
+    @Component
+    private TextField _t2;
+
+    public void configureT2()
+    {
+        _t2.setValueBindingExpr("value");
+    }
 
     @Persist
     private String value;

Added: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForTextField.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForTextField.java?view=auto&rev=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForTextField.java (added)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForTextField.java Mon Feb  5 09:15:39 2007
@@ -0,0 +1,140 @@
+// Copyright 2006 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.integration.app2.pages;
+
+import org.apache.tapestry.annotations.Component;
+import org.apache.tapestry.annotations.ComponentClass;
+import org.apache.tapestry.annotations.Persist;
+import org.apache.tapestry.corelib.components.Errors;
+import org.apache.tapestry.corelib.components.Form;
+import org.apache.tapestry.corelib.components.TextField;
+import org.apache.tapestry.translator.DoubleTranslator;
+import org.apache.tapestry.translator.IntegerTranslator;
+import org.apache.tapestry.validator.Max;
+import org.apache.tapestry.validator.Min;
+
+@ComponentClass
+public class TestPageForTextField
+{
+    @SuppressWarnings("unused")
+    @Component
+    private Errors _errors;
+
+    @SuppressWarnings("unused")
+    @Component
+    private Form _form1;
+
+    @SuppressWarnings("unused")
+    @Component
+    private Form _form2;
+
+    @SuppressWarnings("unused")
+    @Component
+    private Form _form3;
+
+    @SuppressWarnings("unused")
+    @Component
+    private Form _form4;
+
+    @Component
+    private TextField<Integer> _t1;
+    
+    @Component(id="t2")
+    private TextField<Double> _t2Field;
+    
+    @Component
+    private TextField<Long> _t3;
+    
+    @Component
+    private TextField<String> _t4;
+    
+    @Persist
+    private int v1;
+
+    @Persist
+    private double t2 = 12.3;
+
+    @Persist
+    private long v3 = 12345;
+
+    @Persist
+    private String v4 = "hello";
+
+    public int getV1()
+    {
+        return v1;
+    }
+
+    public void setV1(int value)
+    {
+        this.v1 = value;
+    }
+    
+    public void configureT1()
+    {
+        _t1.setValueBindingExpr("v1");
+        _t1.setTranslator(new IntegerTranslator());
+        _t1.setValidators(new Min(100), new Max(200));
+    }
+
+    public void configureT2()
+    {
+        // Use the default value binding ("t2")
+        _t2Field.setTranslator(new DoubleTranslator());
+    }
+
+    public void configureT3()
+    {
+        // Use the default translator
+        _t3.setValueBindingExpr("v3");
+    }
+
+    public void configureT4()
+    {
+        _t4.setValueBindingExpr("v4");
+        _t4.setDisabled(true);
+    }
+
+    public double getT2()
+    {
+        return t2;
+    }
+
+    public void setT2(double t2)
+    {
+        this.t2 = t2;
+    }
+
+    public long getV3()
+    {
+        return v3;
+    }
+
+    public void setV3(long v3)
+    {
+        this.v3 = v3;
+    }
+
+    public String getV4()
+    {
+        return v4;
+    }
+
+    public void setV4(String v4)
+    {
+        this.v4 = v4;
+    }
+
+}

Propchange: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForTextField.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/pagelevel/SelectTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/pagelevel/SelectTest.java?view=auto&rev=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/pagelevel/SelectTest.java (added)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/pagelevel/SelectTest.java Mon Feb  5 09:15:39 2007
@@ -0,0 +1,129 @@
+// Copyright 2006 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.integration.pagelevel;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tapestry.dom.Document;
+import org.apache.tapestry.dom.Element;
+import org.apache.tapestry.dom.Node;
+import org.apache.tapestry.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry.test.pagelevel.PageTester;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+public class SelectTest extends Assert
+{
+    private PageTester _tester;
+
+    private Document _doc;
+
+    @Test
+    public void display()
+    {
+        Element select = _doc.getElementById("select1");
+        List<Node> children = select.getChildren();
+        assertEquals(children.size(), 3);
+        Element element = (Element) children.get(0);
+        assertEquals(element.getName(), "option");
+        assertEquals(element.getChildText(), "[1a]");
+        assertEquals(element.getAttribute("value"), "1a");
+        assertNull(element.getAttribute("selected"));
+        element = (Element) children.get(1);
+        assertEquals(element.getName(), "option");
+        assertEquals(element.getChildText(), "[0f]");
+        assertEquals(element.getAttribute("value"), "0f");
+        assertEquals(element.getAttribute("selected"), "selected");
+        element = (Element) children.get(2);
+        assertEquals(element.getName(), "option");
+        assertEquals(element.getChildText(), "[ff]");
+        assertEquals(element.getAttribute("value"), "ff");
+        assertNull(element.getAttribute("selected"));
+    }
+
+    @Test
+    public void submit_form()
+    {
+        Element form = _doc.getElementById("form1");
+        Map<String, String> fieldValues = CollectionFactory.newMap();
+        fieldValues.put("select1", "0f");
+        _doc = _tester.submitForm(form, fieldValues);
+        assertEquals(_doc.getElementById("v1").getChildText(), "15");
+    }
+
+    @Test
+    public void invalid()
+    {
+        Element form = _doc.getElementById("form1");
+        Map<String, String> fieldValues = CollectionFactory.newMap();
+        fieldValues.put("select1", "ff");
+        _doc = _tester.submitForm(form, fieldValues);
+        assertTrue(_doc.toString().contains("my value requires a value of at most 200."));
+    }
+
+    @Test
+    public void default_encoder_and_model_for_enum()
+    {
+        Element select = _doc.getElementById("select2");
+        List<Node> children = select.getChildren();
+        assertEquals(children.size(), 4);
+        Element element = (Element) children.get(0);
+        assertEquals(element.getName(), "option");
+        assertEquals(element.getChildText(), "East");
+        assertEquals(element.getAttribute("value"), "EAST");
+        assertNull(element.getAttribute("selected"));
+        element = (Element) children.get(1);
+        assertEquals(element.getName(), "option");
+        assertEquals(element.getChildText(), "South");
+        assertEquals(element.getAttribute("value"), "SOUTH");
+        assertNull(element.getAttribute("selected"));
+        element = (Element) children.get(2);
+        assertEquals(element.getName(), "option");
+        assertEquals(element.getChildText(), "West");
+        assertEquals(element.getAttribute("value"), "WEST");
+        assertNull(element.getAttribute("selected"));
+        element = (Element) children.get(3);
+        assertEquals(element.getName(), "option");
+        assertEquals(element.getChildText(), "North");
+        assertEquals(element.getAttribute("value"), "NORTH");
+        assertNull(element.getAttribute("selected"));
+        Element form = _doc.getElementById("form2");
+        Map<String, String> fieldValues = CollectionFactory.newMap();
+        fieldValues.put("select2", "NORTH");
+        _doc = _tester.submitForm(form, fieldValues);
+        assertEquals(_doc.getElementById("v2").getChildText(), "NORTH");
+    }
+
+    @BeforeMethod
+    public void before()
+    {
+        String appPackage = "org.apache.tapestry.integration.app2";
+        String appName = "";
+        _tester = new PageTester(appPackage, appName);
+        _doc = _tester.renderPage("TestPageForSelect");
+    }
+
+    @AfterMethod
+    public void after()
+    {
+        if (_tester != null)
+        {
+            _tester.shutdown();
+        }
+    }
+}

Propchange: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/pagelevel/SelectTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/pagelevel/TextFieldTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/pagelevel/TextFieldTest.java?view=auto&rev=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/pagelevel/TextFieldTest.java (added)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/pagelevel/TextFieldTest.java Mon Feb  5 09:15:39 2007
@@ -0,0 +1,113 @@
+// Copyright 2006 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.integration.pagelevel;
+
+import java.util.Map;
+
+import org.apache.tapestry.dom.Document;
+import org.apache.tapestry.dom.Element;
+import org.apache.tapestry.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry.test.pagelevel.PageTester;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+public class TextFieldTest extends Assert
+{
+    private PageTester _tester;
+
+    private Document _doc;
+
+    @Test
+    public void submit_form()
+    {
+        Element form = _doc.getElementById("form1");
+        Map<String, String> fieldValues = CollectionFactory.newMap();
+        fieldValues.put("t1", "123");
+        _doc = _tester.submitForm(form, fieldValues);
+        assertEquals(_doc.getElementById("v1").getChildText(), "123");
+    }
+
+    @Test
+    public void use_default_error_message()
+    {
+        Element form = _doc.getElementById("form1");
+        Map<String, String> fieldValues = CollectionFactory.newMap();
+        fieldValues.put("t1", "99");
+        _doc = _tester.submitForm(form, fieldValues);
+        assertTrue(_doc.toString().contains("T1 requires a value of at least 100."));
+    }
+
+    @Test
+    public void override_error_message()
+    {
+        Element form = _doc.getElementById("form1");
+        Map<String, String> fieldValues = CollectionFactory.newMap();
+        fieldValues.put("t1", "201");
+        _doc = _tester.submitForm(form, fieldValues);
+        assertTrue(_doc.toString().contains("Error: T1 is larger than 200."));
+    }
+
+    @Test
+    public void default_value_binding()
+    {
+        Element form = _doc.getElementById("form2");
+        assertEquals(_doc.getElementById("t2").getAttribute("value"), "12.3");
+        Map<String, String> fieldValues = CollectionFactory.newMap();
+        fieldValues.put("t2", "+0.45");
+        _doc = _tester.submitForm(form, fieldValues);
+        assertEquals(_doc.getElementById("v2").getChildText(), "0.45");
+    }
+
+    @Test
+    public void default_translator()
+    {
+        Element form = _doc.getElementById("form3");
+        assertEquals(_doc.getElementById("t3").getAttribute("value"), "12345");
+        Map<String, String> fieldValues = CollectionFactory.newMap();
+        fieldValues.put("t3", "1000");
+        _doc = _tester.submitForm(form, fieldValues);
+        assertEquals(_doc.getElementById("v3").getChildText(), "1000");
+    }
+
+    @Test
+    public void disabled()
+    {
+        Element form = _doc.getElementById("form4");
+        Map<String, String> fieldValues = CollectionFactory.newMap();
+        fieldValues.put("t4", "abc");
+        _doc = _tester.submitForm(form, fieldValues);
+        assertEquals(_doc.getElementById("v4").getChildText(), "hello");
+    }
+
+    @BeforeMethod
+    public void before()
+    {
+        String appPackage = "org.apache.tapestry.integration.app2";
+        String appName = "";
+        _tester = new PageTester(appPackage, appName);
+        _doc = _tester.renderPage("TestPageForTextField");
+    }
+
+    @AfterMethod
+    public void after()
+    {
+        if (_tester != null)
+        {
+            _tester.shutdown();
+        }
+    }
+}

Propchange: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/integration/pagelevel/TextFieldTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/OptionGroupModelImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/OptionGroupModelImplTest.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/OptionGroupModelImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/OptionGroupModelImplTest.java Mon Feb  5 09:15:39 2007
@@ -28,9 +28,9 @@
     @Test
     public void basics()
     {
-        List<OptionModel> options = Collections.emptyList();
+        List<OptionModel<String>> options = Collections.emptyList();
 
-        OptionGroupModel group = new OptionGroupModelImpl("Label", true, options);
+        OptionGroupModel<String> group = new OptionGroupModelImpl<String>("Label", true, options);
 
         assertEquals(group.toString(), "OptionGroupModel[Label]");
         assertTrue(group.isDisabled());
@@ -41,10 +41,11 @@
     @Test
     public void map_contructor_retains_map()
     {
-        List<OptionModel> options = Collections.emptyList();
+        List<OptionModel<String>> options = Collections.emptyList();
         Map<String, String> attributes = Collections.emptyMap();
 
-        OptionGroupModel group = new OptionGroupModelImpl("Label", true, options, attributes);
+        OptionGroupModel<String> group = new OptionGroupModelImpl<String>("Label", true, options,
+                attributes);
 
         assertSame(group.getAttributes(), attributes);
     }
@@ -52,10 +53,10 @@
     @Test
     public void strings_contructor_builds_map()
     {
-        List<OptionModel> options = Collections.emptyList();
+        List<OptionModel<String>> options = Collections.emptyList();
 
-        OptionGroupModel group = new OptionGroupModelImpl("Label", true, options, "fred",
-                "flintstone", "barney", "rubble");
+        OptionGroupModel<String> group = new OptionGroupModelImpl<String>("Label", true, options,
+                "fred", "flintstone", "barney", "rubble");
 
         Map<String, String> attributes = group.getAttributes();
 

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/OptionModelImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/OptionModelImplTest.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/OptionModelImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/OptionModelImplTest.java Mon Feb  5 09:15:39 2007
@@ -26,14 +26,14 @@
     @Test
     public void basics()
     {
-        OptionModel model = new OptionModelImpl("Label", false, this);
+        OptionModel<?> model = new OptionModelImpl<Object>("Label", false, this);
 
         assertEquals(model.getLabel(), "Label");
         assertFalse(model.isDisabled());
         assertSame(model.getValue(), this);
         assertNull(model.getAttributes());
 
-        model = new OptionModelImpl("Fred", true, "fred");
+        model = new OptionModelImpl<String>("Fred", true, "fred");
 
         assertEquals(model.getLabel(), "Fred");
         assertTrue(model.isDisabled());
@@ -44,8 +44,8 @@
     @Test
     public void attributes_as_extra_parameters()
     {
-        OptionModel model = new OptionModelImpl("Label", false, this, "fred", "flintstone",
-                "barney", "rubble");
+        OptionModel<?> model = new OptionModelImpl<Object>("Label", false, this, "fred",
+                "flintstone", "barney", "rubble");
 
         Map<String, String> attributes = model.getAttributes();
 
@@ -59,7 +59,7 @@
     {
         Map<String, String> attributes = Collections.emptyMap();
 
-        OptionModel model = new OptionModelImpl("Label", false, this, attributes);
+        OptionModel<?> model = new OptionModelImpl<Object>("Label", false, this, attributes);
 
         assertSame(model.getAttributes(), attributes);
     }

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java?view=diff&rev=503777&r1=503776&r2=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java Mon Feb  5 09:15:39 2007
@@ -133,7 +133,7 @@
     @Test
     public void to_option_models()
     {
-        List<OptionModel> options = TapestryUtils.toOptionModels("UK,USA,DE=Germany");
+        List<OptionModel<String>> options = TapestryUtils.toOptionModels("UK,USA,DE=Germany");
 
         assertEquals(options.size(), 3);
 
@@ -150,7 +150,7 @@
     @Test
     public void whitespace_around_terms_is_trimmed()
     {
-        List<OptionModel> options = TapestryUtils.toOptionModels(" UK , USA , DE=Germany ");
+        List<OptionModel<String>> options = TapestryUtils.toOptionModels(" UK , USA , DE=Germany ");
 
         assertEquals(options.size(), 3);
 

Added: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/AnnotationValidatorGeneratorTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/AnnotationValidatorGeneratorTest.java?view=auto&rev=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/AnnotationValidatorGeneratorTest.java (added)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/AnnotationValidatorGeneratorTest.java Mon Feb  5 09:15:39 2007
@@ -0,0 +1,62 @@
+package org.apache.tapestry.internal.beaneditor;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.tapestry.AnnotationProvider;
+import org.apache.tapestry.Validator;
+import org.apache.tapestry.beaneditor.LengthRange;
+import org.apache.tapestry.beaneditor.Required;
+import org.apache.tapestry.validator.MaxLength;
+import org.apache.tapestry.validator.MinLength;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class AnnotationValidatorGeneratorTest extends Assert
+{
+    @LengthRange(minLength = 5, maxLength = 10)
+    @Required
+    public void setFoo(String foo)
+    {
+
+    }
+
+    @Test
+    public void generate()
+    {
+
+        final AnnotationProvider provider = new AnnotationProvider()
+        {
+
+            public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+            {
+                try
+                {
+                    Class<AnnotationValidatorGeneratorTest> clazz = AnnotationValidatorGeneratorTest.class;
+                    Method method = clazz.getMethod("setFoo", new Class[]
+                    { String.class });
+                    return method.getAnnotation(annotationClass);
+
+                }
+                catch (Exception ex)
+                {
+                    throw new RuntimeException(ex);
+                }
+            }
+
+        };
+        LengthRangeValidateAnnotationWorker worker1 = new LengthRangeValidateAnnotationWorker();
+        RequiredValidateAnnotationWorker worker2 = new RequiredValidateAnnotationWorker();
+        AnnotationValidatorGenerator generator = new AnnotationValidatorGenerator(Arrays.asList(
+                worker1,
+                worker2));
+        List<? extends Validator> validators = generator.buildValidators(Object.class, provider);
+        assertEquals(validators.size(), 3);
+        assertTrue(validators.get(0) instanceof MinLength);
+        assertTrue(validators.get(1) instanceof MaxLength);
+        assertTrue(validators.get(2) instanceof org.apache.tapestry.validator.Required);
+    }
+
+}

Propchange: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/AnnotationValidatorGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/CompoundValidatorGeneratorTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/CompoundValidatorGeneratorTest.java?view=auto&rev=503777
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/CompoundValidatorGeneratorTest.java (added)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/CompoundValidatorGeneratorTest.java Mon Feb  5 09:15:39 2007
@@ -0,0 +1,111 @@
+// Copyright 2007 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.internal.beaneditor;
+
+import java.lang.annotation.Annotation;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.tapestry.AnnotationProvider;
+import org.apache.tapestry.Validator;
+import org.apache.tapestry.internal.services.CompoundalidatorGenerator;
+import org.apache.tapestry.services.ValidatorGenerator;
+import org.apache.tapestry.validator.Max;
+import org.apache.tapestry.validator.Min;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class CompoundValidatorGeneratorTest extends Assert
+{
+    @Test
+    public void no_validator()
+    {
+        final AnnotationProvider provider = new AnnotationProvider()
+        {
+
+            public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+            {
+                return null;
+            }
+
+        };
+        ValidatorGenerator g1 = new ValidatorGenerator()
+        {
+
+            public List<? extends Validator> buildValidators(Class propertyType,
+                    AnnotationProvider annotationProvider)
+            {
+                assertSame(provider, annotationProvider);
+                return null;
+            }
+
+        };
+        ValidatorGenerator g2 = new ValidatorGenerator()
+        {
+
+            public List<? extends Validator> buildValidators(Class propertyType,
+                    AnnotationProvider annotationProvider)
+            {
+                assertSame(provider, annotationProvider);
+                return null;
+            }
+
+        };
+        List<ValidatorGenerator> generators = Arrays.asList(g1, g2);
+        ValidatorGenerator gen = new CompoundalidatorGenerator(generators);
+        assertNull(gen.buildValidators(Object.class, provider));
+    }
+
+    @Test
+    public void two_validators()
+    {
+        final AnnotationProvider provider = new AnnotationProvider()
+        {
+
+            public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+            {
+                return null;
+            }
+
+        };
+        ValidatorGenerator g1 = new ValidatorGenerator()
+        {
+
+            public List<? extends Validator> buildValidators(Class propertyType,
+                    AnnotationProvider annotationProvider)
+            {
+                assertSame(provider, annotationProvider);
+                return Arrays.asList(new Min(10));
+            }
+
+        };
+        ValidatorGenerator g2 = new ValidatorGenerator()
+        {
+
+            public List<? extends Validator> buildValidators(Class propertyType,
+                    AnnotationProvider annotationProvider)
+            {
+                assertSame(provider, annotationProvider);
+                return Arrays.asList(new Max(12));
+            }
+
+        };
+        List<ValidatorGenerator> generators = Arrays.asList(g1, g2);
+        ValidatorGenerator gen = new CompoundalidatorGenerator(generators);
+        List<? extends Validator> validators = gen.buildValidators(Object.class, provider);
+        assertEquals(validators.size(), 2);
+    }
+
+}

Propchange: tapestry/tapestry5/tapestry-core/branches/kt-20070205-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/CompoundValidatorGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native