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/04 15:06:49 UTC

svn commit: r503409 [2/3] - in /tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support: ./ src/main/java/org/apache/tapestry/ src/main/java/org/apache/tapestry/corelib/base/ src/main/java/org/apache/tapestry/corelib/components/ src/main/java...

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/services/TapestryModule.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/services/TapestryModule.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/services/TapestryModule.java Sun Feb  4 06:06:46 2007
@@ -30,7 +30,6 @@
 import org.apache.tapestry.MarkupWriter;
 import org.apache.tapestry.SelectModel;
 import org.apache.tapestry.Translator;
-import org.apache.tapestry.Validator;
 import org.apache.tapestry.annotations.AfterRender;
 import org.apache.tapestry.annotations.AfterRenderBody;
 import org.apache.tapestry.annotations.AfterRenderTemplate;
@@ -40,18 +39,21 @@
 import org.apache.tapestry.annotations.CleanupRender;
 import org.apache.tapestry.annotations.InjectPage;
 import org.apache.tapestry.annotations.SetupRender;
-import org.apache.tapestry.beaneditor.Validate;
 import org.apache.tapestry.dom.DefaultMarkupModel;
 import org.apache.tapestry.dom.Document;
 import org.apache.tapestry.internal.InternalConstants;
 import org.apache.tapestry.internal.TapestryUtils;
-import org.apache.tapestry.internal.beaneditor.PrimitiveFieldConstraintGenerator;
-import org.apache.tapestry.internal.beaneditor.ValidateAnnotationConstraintGenerator;
+import org.apache.tapestry.internal.beaneditor.AnnotationValidatorGenerator;
+import org.apache.tapestry.internal.beaneditor.LengthRangeValidateAnnotationWorker;
+import org.apache.tapestry.internal.beaneditor.MaxValidateAnnotationWorker;
+import org.apache.tapestry.internal.beaneditor.MinValidateAnnotationWorker;
+import org.apache.tapestry.internal.beaneditor.PrimitiveFieldValidatorGenerator;
+import org.apache.tapestry.internal.beaneditor.RequiredValidateAnnotationWorker;
+import org.apache.tapestry.internal.beaneditor.ValidateAnnotationWorker;
 import org.apache.tapestry.internal.bindings.ComponentBindingFactory;
 import org.apache.tapestry.internal.bindings.LiteralBindingFactory;
 import org.apache.tapestry.internal.bindings.MessageBindingFactory;
 import org.apache.tapestry.internal.bindings.TranslateBindingFactory;
-import org.apache.tapestry.internal.bindings.ValidateBindingFactory;
 import org.apache.tapestry.internal.services.ActionLinkHandler;
 import org.apache.tapestry.internal.services.ActionLinkHandlerImpl;
 import org.apache.tapestry.internal.services.ApplicationGlobalsImpl;
@@ -80,13 +82,14 @@
 import org.apache.tapestry.internal.services.CookieSink;
 import org.apache.tapestry.internal.services.CookieSource;
 import org.apache.tapestry.internal.services.CookiesImpl;
-import org.apache.tapestry.internal.services.FieldValidatorDefaultSourceImpl;
 import org.apache.tapestry.internal.services.DefaultInjectionProvider;
 import org.apache.tapestry.internal.services.DefaultValidationDelegateCommand;
 import org.apache.tapestry.internal.services.EnvironmentImpl;
 import org.apache.tapestry.internal.services.EnvironmentalWorker;
-import org.apache.tapestry.internal.services.FieldValidatorSourceImpl;
+import org.apache.tapestry.internal.services.FieldValidatorMessages;
+import org.apache.tapestry.internal.services.FieldValidatorMessagesImpl;
 import org.apache.tapestry.internal.services.FlashPersistentFieldStrategy;
+import org.apache.tapestry.internal.services.FormPersistWorker;
 import org.apache.tapestry.internal.services.HeartbeatImpl;
 import org.apache.tapestry.internal.services.InfrastructureImpl;
 import org.apache.tapestry.internal.services.InfrastructureManagerImpl;
@@ -133,8 +136,8 @@
 import org.apache.tapestry.internal.services.TranslatorSourceImpl;
 import org.apache.tapestry.internal.services.UnclaimedFieldWorker;
 import org.apache.tapestry.internal.services.UpdateListenerHub;
-import org.apache.tapestry.internal.services.ValidationConstraintGeneratorImpl;
 import org.apache.tapestry.internal.services.ValidationMessagesSourceImpl;
+import org.apache.tapestry.internal.services.CompoundalidatorGenerator;
 import org.apache.tapestry.ioc.Configuration;
 import org.apache.tapestry.ioc.IOCUtilities;
 import org.apache.tapestry.ioc.MappedConfiguration;
@@ -166,11 +169,6 @@
 import org.apache.tapestry.translator.IntegerTranslator;
 import org.apache.tapestry.translator.LongTranslator;
 import org.apache.tapestry.translator.StringTranslator;
-import org.apache.tapestry.validator.Max;
-import org.apache.tapestry.validator.MaxLength;
-import org.apache.tapestry.validator.Min;
-import org.apache.tapestry.validator.MinLength;
-import org.apache.tapestry.validator.Required;
 
 /**
  * The root module for Tapestry.
@@ -471,7 +469,8 @@
      */
     public static void contributeInfrastructure(
             Configuration<InfrastructureContribution> configuration, ServiceLocator locator,
-            @InjectService("tapestry.ioc.TypeCoercer")
+            @InjectService("ValidatorGenerator")
+            ValidatorGenerator validatorGenerator, @InjectService("tapestry.ioc.TypeCoercer")
             TypeCoercer typeCoercer, @InjectService("tapestry.ioc.PropertyAccess")
             PropertyAccess propertyAccess)
 
@@ -491,8 +490,6 @@
                 ComponentMessagesSource.class,
                 ComponentSource.class,
                 Environment.class,
-                FieldValidatorDefaultSource.class,
-                FieldValidatorSource.class,
                 MarkupWriterFactory.class,
                 PersistentFieldManager.class,
                 Request.class,
@@ -501,9 +498,10 @@
                 Response.class,
                 TranslatorDefaultSource.class,
                 TranslatorSource.class,
-                ValidationConstraintGenerator.class,
-                ValidationMessagesSource.class);
+                ValidationMessagesSource.class,
+                FieldValidatorMessages.class);
 
+        configuration.add(new InfrastructureContribution("ValidatorGenerator", validatorGenerator));
         configuration.add(new InfrastructureContribution("TypeCoercer", typeCoercer));
         configuration.add(new InfrastructureContribution("PropertyAccess", propertyAccess));
     }
@@ -590,15 +588,13 @@
     public static void contributeBindingSource(
             MappedConfiguration<String, BindingFactory> configuration,
             @InjectService("tapestry.internal.PropBindingFactory")
-            BindingFactory propBindingFactory, @Inject("infrastructure:FieldValidatorSource")
-            FieldValidatorSource fieldValidatorSource, @Inject("infrastructure:TranslatorSource")
+            BindingFactory propBindingFactory, @Inject("infrastructure:TranslatorSource")
             TranslatorSource translatorSource)
     {
         configuration.add(InternalConstants.LITERAL_BINDING_PREFIX, new LiteralBindingFactory());
         configuration.add(InternalConstants.PROP_BINDING_PREFIX, propBindingFactory);
         configuration.add("component", new ComponentBindingFactory());
         configuration.add("message", new MessageBindingFactory());
-        configuration.add("validate", new ValidateBindingFactory(fieldValidatorSource));
         configuration.add("translate", new TranslateBindingFactory(translatorSource));
     }
 
@@ -741,6 +737,7 @@
 
         configuration.add("Retain", new RetainWorker());
         configuration.add("Persist", new PersistWorker());
+        configuration.add("RestoreOnSubmit", new FormPersistWorker());
         configuration.add("UnclaimedField", new UnclaimedFieldWorker(), "after:*.*");
     }
 
@@ -927,32 +924,11 @@
         configuration.add("tapestry/", "org/apache/tapestry/");
     }
 
-    public static FieldValidatorSource buildFieldValidatorSource(
+    public static FieldValidatorMessages buildFieldValidatorMessages(
             @Inject("infrastructure:ValidationMessagesSource")
-            ValidationMessagesSource messagesSource, @Inject("infrastructure:TypeCoercer")
-            TypeCoercer typeCoercer, Map<String, Validator> configuration)
+            ValidationMessagesSource messagesSource)
     {
-        return new FieldValidatorSourceImpl(messagesSource, typeCoercer, configuration);
-    }
-
-    /**
-     * Contributes the basic set of validators:
-     * <ul>
-     * <li>required</li>
-     * <li>minlength</li>
-     * <li>maxlength</li>
-     * <li>min</li>
-     * <li>max</li>
-     * </ul>
-     */
-    public static void contributeFieldValidatorSource(
-            MappedConfiguration<String, Validator> configuration)
-    {
-        configuration.add("required", new Required());
-        configuration.add("minlength", new MinLength());
-        configuration.add("maxlength", new MaxLength());
-        configuration.add("min", new Min());
-        configuration.add("max", new Max());
+        return new FieldValidatorMessagesImpl(messagesSource);
     }
 
     public static TranslatorSource buildTranslatorSource(Map<String, Translator> configuration)
@@ -1171,33 +1147,40 @@
         configuration.add(Boolean.class, "checkbox");
     }
 
-    public static ValidationConstraintGenerator buildValidationConstraintGenerator(
-            List<ValidationConstraintGenerator> configuration)
+    public static ValidatorGenerator buildValidatorGenerator(List<ValidatorGenerator> configuration)
     {
-        return new ValidationConstraintGeneratorImpl(configuration);
+        return new CompoundalidatorGenerator(configuration);
     }
 
     /**
-     * Adds built-in constraint generators:
+     * Adds built-in validator generators:
      * <ul>
      * <li>PrimtiveField -- primitive fields are always required
-     * <li>ValidateAnnotation -- adds constraints from a {@link Validate} annotation
+     * <li>Annotation -- adds constraints from a various annotations
      * </ul>
      */
-    public static void contributeValidationConstraintGenerator(
-            OrderedConfiguration<ValidationConstraintGenerator> configuration)
+    public static void contributeValidatorGenerator(
+            OrderedConfiguration<ValidatorGenerator> configuration,
+            @InjectService("AnnotationValidatorGenerator")
+            ValidatorGenerator annotationValidatorGenerator)
     {
-        configuration.add("PrimitiveField", new PrimitiveFieldConstraintGenerator());
-        configuration.add("ValidateAnnotation", new ValidateAnnotationConstraintGenerator());
+        configuration.add("PrimitiveField", new PrimitiveFieldValidatorGenerator());
+        configuration.add("Annotation", annotationValidatorGenerator);
     }
 
-    public static FieldValidatorDefaultSource buildFieldValidatorDefaultSource(
-            @Inject("infrastructure:ValidationConstraintGenerator")
-            ValidationConstraintGenerator validationConstraintGenerator,
-            @Inject("infrastructure:FieldValidatorSource")
-            FieldValidatorSource fieldValidatorSource)
+    public static ValidatorGenerator buildAnnotationValidatorGenerator(
+            List<ValidateAnnotationWorker> configuration)
     {
-        return new FieldValidatorDefaultSourceImpl(validationConstraintGenerator,
-                fieldValidatorSource);
+        return new AnnotationValidatorGenerator(configuration);
     }
+
+    public static void contributeAnnotationValidatorGenerator(
+            OrderedConfiguration<ValidateAnnotationWorker> configuration)
+    {
+        configuration.add("required", new RequiredValidateAnnotationWorker());
+        configuration.add("min", new MinValidateAnnotationWorker());
+        configuration.add("max", new MaxValidateAnnotationWorker());
+        configuration.add("lengthRange", new LengthRangeValidateAnnotationWorker());
+    }
+
 }

Copied: tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/services/ValidatorGenerator.java (from r503165, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ValidationConstraintGenerator.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/services/ValidatorGenerator.java?view=diff&rev=503409&p1=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ValidationConstraintGenerator.java&r1=503165&p2=tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/services/ValidatorGenerator.java&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ValidationConstraintGenerator.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/services/ValidatorGenerator.java Sun Feb  4 06:06:46 2007
@@ -17,30 +17,25 @@
 import java.util.List;
 
 import org.apache.tapestry.AnnotationProvider;
-import org.apache.tapestry.FieldValidator;
+import org.apache.tapestry.Validator;
 
 /**
- * Invoked to generate a list of validation constraint strings for a property. This typically
- * involves scanning the property for annotations or naming conventions that confer the desired
- * validation. The constraint strings are ultimately handed to
- * {@link FieldValidatorSource#createValidator(org.apache.tapestry.Field, String, String, String, org.apache.tapestry.ioc.Messages, java.util.Locale)}.
+ * Invoked to generate a list of {@link org.apache.tapestry.Validator} for a property. This
+ * typically involves scanning the property for annotations or naming conventions that confer the
+ * desired validation.
  */
-public interface ValidationConstraintGenerator
+public interface ValidatorGenerator
 {
     /**
-     * For a given property, identify all the approprite validation constraints. Each returned value
-     * is the name of a validator (i.e., "required") or a validator name and configuration (i.e.,
-     * "minlength=5"). These contraints are exactly the individual terms in a
-     * {@link FieldValidatorSource#createValidators(org.apache.tapestry.Field, String) validate specification}.
-     * These will ultimately be used to create {@link FieldValidator}s for the field that edits the
-     * property.
+     * For a given property, identify all the approprite validators. Each returned value is a
+     * {@link Validator} (i.e., {@link org.apache.tapestry.validator.Required}).
      * 
      * @param propertyType
-     *            the type of the property for which constraints are needed
+     *            the type of the property for which validators are needed
      * @param annotationProvider
      *            provides access to any annotations conceerning the property
-     * @return a list of constraints
-     * @see FieldValidatorSource
+     * @return a list of validators
      */
-    List<String> buildConstraints(Class propertyType, AnnotationProvider annotationProvider);
+    List<? extends Validator> buildValidators(Class propertyType,
+            AnnotationProvider annotationProvider);
 }

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/test/TapestryTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/test/TapestryTestCase.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/test/TapestryTestCase.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/test/TapestryTestCase.java Sun Feb  4 06:06:46 2007
@@ -72,7 +72,6 @@
 import org.apache.tapestry.services.ComponentClassResolver;
 import org.apache.tapestry.services.Context;
 import org.apache.tapestry.services.Environment;
-import org.apache.tapestry.services.FieldValidatorSource;
 import org.apache.tapestry.services.Heartbeat;
 import org.apache.tapestry.services.InjectionProvider;
 import org.apache.tapestry.services.MethodFilter;
@@ -82,7 +81,6 @@
 import org.apache.tapestry.services.ResourceDigestGenerator;
 import org.apache.tapestry.services.Response;
 import org.apache.tapestry.services.Session;
-import org.apache.tapestry.services.ValidationConstraintGenerator;
 import org.apache.tapestry.services.ValidationMessagesSource;
 import org.easymock.EasyMock;
 import org.easymock.IAnswer;
@@ -532,11 +530,6 @@
         expect(resources.getLocale()).andReturn(locale).atLeastOnce();
     }
 
-    protected <C, T> void train_getConstraintType(Validator<C, T> validator, Class<C> constraintType)
-    {
-        expect(validator.getConstraintType()).andReturn(constraintType);
-    }
-
     protected final Validator newValidator()
     {
         return newMock(Validator.class);
@@ -552,11 +545,6 @@
         return newMock(FieldValidator.class);
     }
 
-    protected FieldValidatorSource newFieldValidatorSource()
-    {
-        return newMock(FieldValidatorSource.class);
-    }
-
     protected final Component newComponent()
     {
         return newMock(Component.class);
@@ -717,11 +705,6 @@
         expect(resources.getMessages()).andReturn(messages).atLeastOnce();
     }
 
-    protected final void train_getValueType(Validator validator, Class valueType)
-    {
-        expect(validator.getValueType()).andReturn(valueType).atLeastOnce();
-    }
-
     protected final void train_invokeIfBlank(Validator validator, boolean invokeIfBlank)
     {
         expect(validator.invokeIfBlank()).andReturn(invokeIfBlank).atLeastOnce();
@@ -801,26 +784,4 @@
         return newMock(AnnotationProvider.class);
     }
 
-    protected final void train_createValidator(FieldValidatorSource source, Field field, String validatorType, String constraintValue, String overrideId, Messages overrideMessages, Locale locale, FieldValidator result)
-    {
-        expect(
-                source.createValidator(
-                        field,
-                        validatorType,
-                        constraintValue,
-                        overrideId,
-                        overrideMessages,
-                        locale)).andReturn(result);
-    }
-
-    protected final void train_buildConstraints(ValidationConstraintGenerator generator, Class propertyType, AnnotationProvider provider, String... constraints)
-    {
-        expect(generator.buildConstraints(propertyType, provider)).andReturn(
-                Arrays.asList(constraints));
-    }
-
-    protected final ValidationConstraintGenerator newValidationConstraintGenerator()
-    {
-        return newMock(ValidationConstraintGenerator.class);
-    }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/DoubleTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/DoubleTranslator.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/DoubleTranslator.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/DoubleTranslator.java Sun Feb  4 06:06:46 2007
@@ -14,13 +14,17 @@
 
 package org.apache.tapestry.translator;
 
+import java.io.Serializable;
+
 import org.apache.tapestry.Translator;
 import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.ioc.Messages;
 import org.apache.tapestry.ioc.internal.util.InternalUtils;
 
-public class DoubleTranslator implements Translator<Double>
+public class DoubleTranslator implements Translator<Double>, Serializable
 {
+    private static final long serialVersionUID = 1L;
+
     /**
      * Parses blank values to null, otherwise parses the client value to a long
      * 

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/IntegerTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/IntegerTranslator.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/IntegerTranslator.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/IntegerTranslator.java Sun Feb  4 06:06:46 2007
@@ -14,6 +14,8 @@
 
 package org.apache.tapestry.translator;
 
+import java.io.Serializable;
+
 import org.apache.tapestry.Translator;
 import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.ioc.Messages;
@@ -22,8 +24,10 @@
 /**
  * A translator for type integer.
  */
-public final class IntegerTranslator implements Translator<Integer>
+public final class IntegerTranslator implements Translator<Integer>, Serializable
 {
+    private static final long serialVersionUID = 1L;
+
     /**
      * Parses blank values to null, otherwise parses the client value to an integer.
      * 

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/LongTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/LongTranslator.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/LongTranslator.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/LongTranslator.java Sun Feb  4 06:06:46 2007
@@ -14,14 +14,18 @@
 
 package org.apache.tapestry.translator;
 
+import java.io.Serializable;
+
 import org.apache.tapestry.Translator;
 import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.ioc.Messages;
 import org.apache.tapestry.ioc.internal.util.InternalUtils;
 
 /** A translator for type long. */
-public class LongTranslator implements Translator<Long>
+public class LongTranslator implements Translator<Long>, Serializable
 {
+    private static final long serialVersionUID = 1L;
+
     /**
      * Parses blank values to null, otherwise parses the client value to a long
      * 

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/StringTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/StringTranslator.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/StringTranslator.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/translator/StringTranslator.java Sun Feb  4 06:06:46 2007
@@ -14,12 +14,16 @@
 
 package org.apache.tapestry.translator;
 
+import java.io.Serializable;
+
 import org.apache.tapestry.Translator;
 import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.ioc.Messages;
 
-public class StringTranslator implements Translator<String>
+public class StringTranslator implements Translator<String>, Serializable
 {
+    private static final long serialVersionUID = 1L;
+
     /** Returns the client value (or the empty string, if the client value is null). */
     public String parseClient(String clientValue, Messages messages) throws ValidationException
     {

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/Max.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/Max.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/Max.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/Max.java Sun Feb  4 06:06:46 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;
 
 /** Enforces a maximum integer value. */
-public class Max implements Validator<Long, Number>
+public class Max implements Validator<Number>, Serializable
 {
-    public Class<Long> getConstraintType()
+    private static final long serialVersionUID = 1L;
+
+    private long _max;
+    
+    public Max(long max)
     {
-        return Long.class;
+        _max = max;
     }
 
     public String getMessageKey()
@@ -32,20 +38,15 @@
         return "max-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() > _max)
+            throw new ValidationException(formatter.format(_max, field.getLabel()));
     }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/MaxLength.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/MaxLength.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/MaxLength.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/MaxLength.java Sun Feb  4 06:06:46 2007
@@ -14,16 +14,22 @@
 
 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;
 
-public final class MaxLength implements Validator<Integer, String>
+public final class MaxLength implements Validator<String>, Serializable
 {
-    public Class<Integer> getConstraintType()
+    private static final long serialVersionUID = 1L;
+
+    private int _maxLength;
+
+    public MaxLength(int maxLength)
     {
-        return Integer.class;
+        _maxLength = maxLength;
     }
 
     public String getMessageKey()
@@ -31,20 +37,15 @@
         return "maximum-string-length";
     }
 
-    public Class<String> getValueType()
-    {
-        return String.class;
-    }
-
     public boolean invokeIfBlank()
     {
         return false;
     }
 
-    public void validate(Field field, Integer constraintValue, MessageFormatter formatter, String value)
+    public void validate(Field field, MessageFormatter formatter, String value)
             throws ValidationException
     {
-        if (value.length() > constraintValue)
-            throw new ValidationException(formatter.format(constraintValue, field.getLabel()));
+        if (value.length() > _maxLength)
+            throw new ValidationException(formatter.format(_maxLength, field.getLabel()));
     }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/Min.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/Min.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/Min.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/Min.java Sun Feb  4 06:06:46 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-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/MinLength.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/MinLength.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/MinLength.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/MinLength.java Sun Feb  4 06:06:46 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-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/Required.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/Required.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/Required.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/java/org/apache/tapestry/validator/Required.java Sun Feb  4 06:06:46 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-20070204-IDE-support/src/main/resources/org/apache/tapestry/internal/ValidationMessages.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/resources/org/apache/tapestry/internal/ValidationMessages.properties?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/resources/org/apache/tapestry/internal/ValidationMessages.properties (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/main/resources/org/apache/tapestry/internal/ValidationMessages.properties Sun Feb  4 06:06:46 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-20070204-IDE-support/src/test/app1/WEB-INF/BlockDemo.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/BlockDemo.html?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/BlockDemo.html (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/BlockDemo.html Sun Feb  4 06:06:46 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-20070204-IDE-support/src/test/app1/WEB-INF/PasswordFieldDemo.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/PasswordFieldDemo.html?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/PasswordFieldDemo.html (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/PasswordFieldDemo.html Sun Feb  4 06:06:46 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-20070204-IDE-support/src/test/app1/WEB-INF/SimpleForm.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/SimpleForm.html?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/SimpleForm.html (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/SimpleForm.html Sun Feb  4 06:06:46 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-20070204-IDE-support/src/test/app1/WEB-INF/ToDoList.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/ToDoList.html?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/ToDoList.html (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/ToDoList.html Sun Feb  4 06:06:46 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-20070204-IDE-support/src/test/app1/WEB-INF/ToDoListVolatile.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/ToDoListVolatile.html?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/ToDoListVolatile.html (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/app1/WEB-INF/ToDoListVolatile.html Sun Feb  4 06:06:46 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>

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/EnumSelectModelTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/EnumSelectModelTest.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/EnumSelectModelTest.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/EnumSelectModelTest.java Sun Feb  4 06:06:46 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);
 

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/corelib/components/SelectTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/corelib/components/SelectTest.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/corelib/components/SelectTest.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/corelib/components/SelectTest.java Sun Feb  4 06:06:46 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-20070204-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-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/data/RegistrationData.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/data/RegistrationData.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/data/RegistrationData.java Sun Feb  4 06:06:46 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-20070204-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-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/BlockDemo.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/BlockDemo.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/BlockDemo.java Sun Feb  4 06:06:46 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-20070204-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-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/PasswordFieldDemo.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/PasswordFieldDemo.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/PasswordFieldDemo.java Sun Feb  4 06:06:46 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-20070204-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-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/SimpleForm.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/SimpleForm.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/SimpleForm.java Sun Feb  4 06:06:46 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-20070204-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-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ToDoList.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ToDoList.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ToDoList.java Sun Feb  4 06:06:46 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-20070204-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-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ToDoListVolatile.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ToDoListVolatile.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ToDoListVolatile.java Sun Feb  4 06:06:46 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-20070204-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-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ValidForm.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ValidForm.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app1/pages/ValidForm.java Sun Feb  4 06:06:46 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-20070204-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-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForForm.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForForm.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForForm.java Sun Feb  4 06:06:46 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;
 

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070204-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-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSubmit.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSubmit.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSubmit.java Sun Feb  4 06:06:46 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;

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/OptionGroupModelImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/OptionGroupModelImplTest.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/OptionGroupModelImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/OptionGroupModelImplTest.java Sun Feb  4 06:06:46 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-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/OptionModelImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/OptionModelImplTest.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/OptionModelImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/OptionModelImplTest.java Sun Feb  4 06:06:46 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-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java Sun Feb  4 06:06:46 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-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/CompoundValidatorGeneratorTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/CompoundValidatorGeneratorTest.java?view=auto&rev=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/CompoundValidatorGeneratorTest.java (added)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/CompoundValidatorGeneratorTest.java Sun Feb  4 06:06:46 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-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/beaneditor/CompoundValidatorGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/services/FieldValidatorImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/services/FieldValidatorImplTest.java?view=diff&rev=503409&r1=503165&r2=503409
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/services/FieldValidatorImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/kt-20070204-IDE-support/src/test/java/org/apache/tapestry/internal/services/FieldValidatorImplTest.java Sun Feb  4 06:06:46 2007
@@ -16,9 +16,12 @@
 
 import org.apache.tapestry.Field;
 import org.apache.tapestry.FieldValidator;
+import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.Validator;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
 import org.apache.tapestry.ioc.MessageFormatter;
+import org.apache.tapestry.validator.Max;
+import org.apache.tapestry.validator.Min;
 import org.testng.annotations.Test;
 
 /**
@@ -26,83 +29,200 @@
  */
 public class FieldValidatorImplTest extends InternalBaseTestCase
 {
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings("serial")
     @Test
     public void null_value_skipped() throws Exception
     {
-        Field field = newField();
-        MessageFormatter formatter = newMessageFormatter();
-        Validator validator = newValidator();
+        Field field = null;
+        FieldValidatorMessages messages = new FieldValidatorMessages()
+        {
+            public MessageFormatter get(Field field, Validator validator)
+            {
+                return null;
+            }
+
+        };
+        Validator<Object> validator = new NoOpValidator<Object>()
+        {
+
+            @Override
+            public void validate(Field field, MessageFormatter formatter, Object value)
+                    throws ValidationException
+            {
+                fail();
+            }
+        };
 
-        train_invokeIfBlank(validator, false);
-
-        replay();
-
-        FieldValidator fv = new FieldValidatorImpl(field, null, formatter, validator);
+        FieldValidator<Object> fv = new FieldValidatorImpl<Object>(field, messages, validator);
 
         fv.validate(null);
-
-        verify();
     }
 
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings("serial")
     @Test
     public void blank_value_skipped() throws Exception
     {
-        Field field = newField();
-        MessageFormatter formatter = newMessageFormatter();
-        Validator validator = newValidator();
-
-        train_invokeIfBlank(validator, false);
-
-        replay();
+        Field field = null;
+        FieldValidatorMessages messages = new FieldValidatorMessages()
+        {
+            public MessageFormatter get(Field field, Validator validator)
+            {
+                return null;
+            }
+
+        };
+        Validator<Object> validator = new NoOpValidator<Object>()
+        {
+
+            @Override
+            public void validate(Field field, MessageFormatter formatter, Object value)
+                    throws ValidationException
+            {
+                fail();
+            }
+        };
 
-        FieldValidator fv = new FieldValidatorImpl(field, null, formatter, validator);
+        FieldValidator<Object> fv = new FieldValidatorImpl<Object>(field, messages, validator);
 
         fv.validate("");
 
-        verify();
     }
 
-    @SuppressWarnings("unchecked")
     @Test
-    public void nonmatching_value_type_skipped() throws Exception
+    public void single_validator() throws Exception
     {
-        Field field = newField();
-        MessageFormatter formatter = newMessageFormatter();
-        Validator validator = newValidator();
-        Integer value = 15;
-
-        train_invokeIfBlank(validator, true);
-        train_getValueType(validator, String.class);
-
-        replay();
-
-        FieldValidator fv = new FieldValidatorImpl(field, null, formatter, validator);
-
-        fv.validate(value);
+        final Field field = new NoOpField()
+        {
 
-        verify();
+            @Override
+            public String getLabel()
+            {
+                return "foo";
+            }
+
+        };
+        final Min min = new Min(10);
+        FieldValidatorMessages messages = new FieldValidatorMessages()
+        {
+            public MessageFormatter get(Field field2, Validator validator)
+            {
+                assertSame(field2, field);
+                assertSame(validator, min);
+                return new MessageFormatter()
+                {
+
+                    public String format(Object... args)
+                    {
+                        return String.format("%2$s must be at least %1$s", args);
+                    }
+
+                };
+            }
+
+        };
+        FieldValidator<Number> fv = new FieldValidatorImpl<Number>(field, messages, min);
+        fv.validate(10);
+        fv.validate(11);
+        try
+        {
+            fv.validate(9);
+            unreachable();
+        }
+        catch (ValidationException ex)
+        {
+            assertEquals(ex.getMessage(), "foo must be at least 10");
+        }
     }
 
-    @SuppressWarnings("unchecked")
     @Test
-    public void value_type_check_skipped_for_null_values() throws Exception
+    public void two_validators() throws Exception
     {
-        Field field = newField();
-        MessageFormatter formatter = newMessageFormatter();
-        Validator validator = newValidator();
+        final Field field = new NoOpField()
+        {
 
-        train_invokeIfBlank(validator, true);
-
-        validator.validate(field, null, formatter, null);
-
-        replay();
-
-        FieldValidator fv = new FieldValidatorImpl(field, null, formatter, validator);
+            @Override
+            public String getLabel()
+            {
+                return "foo";
+            }
+
+        };
+        final Min min = new Min(10);
+        final Max max = new Max(12);
+        FieldValidatorMessages messages = new FieldValidatorMessages()
+        {
+            public MessageFormatter get(Field field2, Validator validator)
+            {
+                assertSame(field2, field);
+                if (validator == min)
+                {
+                    return null;
+                }
+                return validator == max ? new MessageFormatter()
+                {
+
+                    public String format(Object... args)
+                    {
+                        return String.format("%2$s must be at most %1$s", args);
+                    }
+
+                } : null;
+            }
+
+        };
+        FieldValidator<Number> fv = new FieldValidatorImpl<Number>(field, messages, min, max);
+        fv.validate(10);
+        fv.validate(11);
+        fv.validate(12);
+        try
+        {
+            fv.validate(13);
+            unreachable();
+        }
+        catch (ValidationException ex)
+        {
+            assertEquals(ex.getMessage(), "foo must be at most 12");
+        }
+        FieldValidator<Number> fv2 = new FieldValidatorImpl<Number>(field, messages, max, min);
+        fv2.validate(10);
+        fv2.validate(11);
+        fv2.validate(12);
+        try
+        {
+            fv2.validate(13);
+            unreachable();
+        }
+        catch (ValidationException ex)
+        {
+            assertEquals(ex.getMessage(), "foo must be at most 12");
+        }
+    }
 
-        fv.validate(null);
+    @Test
+    public void null_validators() throws Exception
+    {
+        final Field field = new NoOpField()
+        {
 
-        verify();
+            @Override
+            public String getLabel()
+            {
+                return "foo";
+            }
+
+        };
+        FieldValidatorMessages messages = new FieldValidatorMessages()
+        {
+            public MessageFormatter get(Field field2, Validator validator)
+            {
+                return null;
+            }
+
+        };
+        FieldValidator<Number> fv = new FieldValidatorImpl<Number>(field, messages,
+                (Validator<? super Number>[]) null);
+        fv.validate(10);
+        fv.validate(11);
     }
+
 }