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 17:07:34 UTC

svn commit: r503433 [1/2] - in /tapestry/tapestry5/tapestry-core/trunk: ./ src/main/java/org/apache/tapestry/ src/main/java/org/apache/tapestry/annotations/ src/main/java/org/apache/tapestry/beaneditor/ src/main/java/org/apache/tapestry/corelib/base/ s...

Author: freemant
Date: Sun Feb  4 08:07:30 2007
New Revision: 503433

URL: http://svn.apache.org/viewvc?view=rev&rev=503433
Log:
Revert from revision 503415 back to 502712.

Added:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PrimitiveFieldConstraintGenerator.java
      - copied unchanged from r502712, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PrimitiveFieldConstraintGenerator.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/ValidateAnnotationConstraintGenerator.java
      - copied unchanged from r502712, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/ValidateAnnotationConstraintGenerator.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/bindings/ValidateBindingFactory.java
      - copied unchanged from r502712, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/bindings/ValidateBindingFactory.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/FieldValidatorDefaultSourceImpl.java
      - copied unchanged from r502712, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/FieldValidatorDefaultSourceImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/FieldValidatorDefaultSourceImplTest.java
      - copied unchanged from r502712, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/FieldValidatorDefaultSourceImplTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/FieldValidatorSourceImpl.java
      - copied unchanged from r502712, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/FieldValidatorSourceImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ValidationConstraintGeneratorImpl.java
      - copied unchanged from r502712, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ValidationConstraintGeneratorImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/FieldValidatorDefaultSource.java
      - copied unchanged from r502712, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/FieldValidatorDefaultSource.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/FieldValidatorSource.java
      - copied unchanged from r502712, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/FieldValidatorSource.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ValidationConstraintGenerator.java
      - copied unchanged from r502712, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ValidationConstraintGenerator.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/MaxTest.java
      - copied unchanged from r502712, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/MaxTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/beaneditor/ValidateAnnotationConstraintGeneratorTest.java
      - copied unchanged from r502712, tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/beaneditor/ValidateAnnotationConstraintGeneratorTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/ValidateBindingFactoryTest.java
      - copied unchanged from r502712, tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/ValidateBindingFactoryTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/FieldValidatorSourceImplTest.java
      - copied unchanged from r502712, tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/FieldValidatorSourceImplTest.java
Removed:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/BindingExprValueConduit.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/BindingSourceProvider.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ConstantValueConduit.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/DefaultValueEncoder.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/SetterValueConduit.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ValueConduit.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ValueSetter.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/annotations/FormPersist.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/LengthRange.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/Max.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/Min.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/Required.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/NoOpFieldValidator.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/RestorePropertiesAction.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/mixins/TypeSafeConfigurationEnabled.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/AnnotationValidatorGenerator.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/LengthRangeValidateAnnotationWorker.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/MaxValidateAnnotationWorker.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/MinValidateAnnotationWorker.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PrimitiveFieldValidatorGenerator.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/RequiredValidateAnnotationWorker.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/ValidateAnnotationWorker.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/CompoundalidatorGenerator.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/FieldValidatorMessages.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/FieldValidatorMessagesImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/FormPersistWorker.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ValidatorGenerator.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/pagelevel/SelectTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/pagelevel/TextFieldTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/beaneditor/AnnotationValidatorGeneratorTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/beaneditor/CompoundValidatorGeneratorTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/FieldValidatorMessagesImplTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/FormPersistWorkerTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/NoOpClassTransformation.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/NoOpComponentResources.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/NoOpField.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/NoOpFieldComponent.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/NoOpValidator.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/services/NoOpBindingSource.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app2/pages/TestPageForSelect.html
    tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app2/pages/TestPageForTextField.html
    tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app2/pages/TestPageForTextField.properties
Modified:
    tapestry/tapestry5/tapestry-core/trunk/pom.xml
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/EnumSelectModel.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/EnumValueEncoder.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/OptionGroupModel.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/OptionModel.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/SelectModel.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Validator.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ValueEncoder.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractTextField.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Checkbox.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Label.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/PasswordField.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Select.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/TextArea.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/TextField.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/OptionGroupModelImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/OptionModelImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/SelectModelImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryUtils.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/FieldValidatorImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalClassTransformationImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/TapestryTestCase.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/translator/DoubleTranslator.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/translator/IntegerTranslator.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/translator/LongTranslator.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/translator/StringTranslator.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/Max.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/MaxLength.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/Min.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/MinLength.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/Required.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/ValidationMessages.properties
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/OptionGroupModelImplTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/OptionModelImplTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/FieldValidatorImplTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/validator/MaxLengthTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/validator/MinLengthTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/ValidForm.html
    tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app2/pages/TestPageForForm.html
    tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app2/pages/TestPageForSubmit.html

Modified: tapestry/tapestry5/tapestry-core/trunk/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/pom.xml?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/pom.xml (original)
+++ tapestry/tapestry5/tapestry-core/trunk/pom.xml Sun Feb  4 08:07:30 2007
@@ -119,4 +119,4 @@
             </plugin>
         </plugins>
     </reporting>
-</project>
+</project>

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/EnumSelectModel.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/EnumSelectModel.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/EnumSelectModel.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/EnumSelectModel.java Sun Feb  4 08:07:30 2007
@@ -35,18 +35,18 @@
  * <li>As a user-presentable version of the name, i.e., "Local Variable".
  * </ul>
  */
-public final class EnumSelectModel<T extends Enum> implements SelectModel<T>, Serializable
+public final class EnumSelectModel implements SelectModel, Serializable
 {
     private static final long serialVersionUID = -3590412082766899684L;
 
-    private final List<OptionModel<T>> _options = newList();;
+    private final List<OptionModel> _options = newList();;
 
-    public EnumSelectModel(Class<T> enumClass, Messages messages)
+    public <T extends Enum> EnumSelectModel(Class<T> enumClass, Messages messages)
     {
         this(enumClass, messages, enumClass.getEnumConstants());
     }
 
-    public EnumSelectModel(Class<T> enumClass, Messages messages, T[] values)
+    public <T extends Enum> EnumSelectModel(Class<T> enumClass, Messages messages, T[] values)
     {
         Defense.notNull(enumClass, "enumClass");
         Defense.notNull(messages, "messages");
@@ -57,7 +57,7 @@
         {
             String label = labelForValue(messages, prefix, value);
 
-            _options.add(new OptionModelImpl<T>(label, false, value));
+            _options.add(new OptionModelImpl(label, false, value));
         }
     }
 
@@ -77,13 +77,13 @@
     }
 
     /** Returns null. */
-    public List<OptionGroupModel<T>> getOptionGroups()
+    public List<OptionGroupModel> getOptionGroups()
     {
         return null;
     }
 
     /** Returns the option groupos created in the constructor. */
-    public List<OptionModel<T>> getOptions()
+    public List<OptionModel> getOptions()
     {
         return _options;
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/EnumValueEncoder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/EnumValueEncoder.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/EnumValueEncoder.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/EnumValueEncoder.java Sun Feb  4 08:07:30 2007
@@ -14,32 +14,30 @@
 
 package org.apache.tapestry;
 
-import java.io.Serializable;
-
 import org.apache.tapestry.ioc.internal.util.Defense;
 
 /**
  * A value encoder that can be used for aribrary Enum types. The enum name is stored as the client
  * side value (the "primary key").
  */
-public class EnumValueEncoder<T extends Enum<T>> implements ValueEncoder<T>, Serializable
+public class EnumValueEncoder implements ValueEncoder<Enum>
 {
-    private static final long serialVersionUID = 1L;
-
-    private final Class<T> _enumType;
+    private final Class<Enum> _enumType;
 
-    public EnumValueEncoder(final Class<T> enumType)
+    public EnumValueEncoder(final Class<Enum> enumType)
     {
         Defense.notNull(enumType, "enumType");
+
         _enumType = enumType;
     }
 
-    public String toClient(Object component, T value)
+    public String toClient(Enum value)
     {
         return value.name();
     }
 
-    public T toValue(Object component, String clientValue)
+    @SuppressWarnings("unchecked")
+    public Enum toValue(String clientValue)
     {
         if (clientValue == null)
             return null;

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/OptionGroupModel.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/OptionGroupModel.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/OptionGroupModel.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/OptionGroupModel.java Sun Feb  4 08:07:30 2007
@@ -21,7 +21,7 @@
  * Defines a group of related options. Options may be enabled or disabled as a group. Corresponds to
  * the [X]HTML element &lt;optgroup&gt;.
  */
-public interface OptionGroupModel<T>
+public interface OptionGroupModel
 {
     /** Localized, user-presentable label for the group. */
     String getLabel();
@@ -41,5 +41,5 @@
     Map<String, String> getAttributes();
 
     /** The list of options within the group. */
-    List<OptionModel<T>> getOptions();
+    List<OptionModel> getOptions();
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/OptionModel.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/OptionModel.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/OptionModel.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/OptionModel.java Sun Feb  4 08:07:30 2007
@@ -20,7 +20,7 @@
  * A single option within a {@link OptionGroupModel}. Corresponds closely to the [X]HTML
  * &lt;option&gt; element.
  */
-public interface OptionModel<T>
+public interface OptionModel
 {
     /** The localized, user-presentable label for the option. */
     String getLabel();
@@ -36,5 +36,5 @@
      * be selected. It is also used, via {@link ValueEncoder#toClient(Object)}, to generate
      * the client-side value attribute.
      */
-    T getValue();
+    Object getValue();
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/SelectModel.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/SelectModel.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/SelectModel.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/SelectModel.java Sun Feb  4 08:07:30 2007
@@ -25,14 +25,14 @@
  * needs to present a list of options to the user. Generally paired with a {@link ValueEncoder} to
  * create client-side representations of server-side values.
  */
-public interface SelectModel<V>
+public interface SelectModel
 {
     /**
      * The list of groups, each containing some number of individual options.
      * 
      * @return the groups, or null
      */
-    List<OptionGroupModel<V>> getOptionGroups();
+    List<OptionGroupModel> getOptionGroups();
 
     /**
      * The list of ungrouped options, which appear after any grouped options. Generally, a model
@@ -40,5 +40,5 @@
      * 
      * @return the ungrouped options, or null
      */
-    List<OptionModel<V>> getOptions();
+    List<OptionModel> getOptions();
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Validator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Validator.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Validator.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Validator.java Sun Feb  4 08:07:30 2007
@@ -23,9 +23,24 @@
  * <p>
  * Validators are usually encapsulated inside a {@link FieldValidator}.
  */
-public interface Validator<T>
+public interface Validator<C, T>
 {
     /**
+     * Returns the type of constraint value used with this validator. Constraint values are used to
+     * parameterize a validator, for example a "maxLength" validator will have a constraint value of
+     * type int (the maximum length allowed). For constraints that do not have a constraint value,
+     * this method returns null.
+     */
+    Class<C> getConstraintType();
+
+    /**
+     * Returns the value type associated with this validator.
+     * {@link #validate(Field, Object, MessageFormatter, Object)} will only be invoked when the
+     * value is assignable to the validator's value type.
+     */
+    Class<T> getValueType();
+
+    /**
      * Returns the message key, within the validiation messages, normally used by this validator.
      * This is used to provide the {@link MessageFormatter} passed to
      * {@link #validate(Field, Object, MessageFormatter, Object)} (unless overridden).
@@ -42,6 +57,8 @@
      * 
      * @param field
      *            the field for which a client submitted value is being validated
+     * @param constraintValue
+     *            the value used to constrain
      * @param formatter
      *            Validation messages, in the appropriate locale
      * @param value
@@ -49,7 +66,8 @@
      * @throws ValidationException
      *             if the value violates the constraint
      */
-    void validate(Field field, MessageFormatter formatter, T value) throws ValidationException;
+    void validate(Field field, C constraintValue, MessageFormatter formatter, T value)
+            throws ValidationException;
 
     /**
      * Returns true if the validator should be invoked for null or blank (empty string) values. This

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ValueEncoder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ValueEncoder.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ValueEncoder.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ValueEncoder.java Sun Feb  4 08:07:30 2007
@@ -22,30 +22,26 @@
  * 
  * @see SelectModel
  */
-public interface ValueEncoder<T>
+public interface ValueEncoder<V>
 {
     /**
      * Converts a value into a client-side representation. The value should be parseable by
      * {@link #toValue(String)}. In some cases, what is returned is an identifier used to locate
      * the true object, rather than a string representation of the value itself.
      * 
-     * @param component
-     *            the component such as a {@link Select} whose value is being encoded.
      * @param value
      *            to be encoded
      * @return a string representation of the value, or the value's identity
      */
-    String toClient(Object component, T value);
+    String toClient(V value);
 
     /**
      * Converts a client-side representation, provided by {@link #toClient(Object)}, back into a
      * server-side value.
      * 
-     * @param component
-     *            the component such as a {@link Select} whose value is being decoded.
      * @param clientValue
      *            string representation of the value's identity
      * @return the corresponding entity, or null if not found
      */
-    T toValue(Object component, String clientValue);
+    V toValue(String clientValue);
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java Sun Feb  4 08:07:30 2007
@@ -15,32 +15,32 @@
 package org.apache.tapestry.corelib.base;
 
 import java.io.Serializable;
-import java.util.List;
 
-import org.apache.tapestry.BindingSourceProvider;
+import org.apache.tapestry.Binding;
 import org.apache.tapestry.ComponentAction;
 import org.apache.tapestry.ComponentResources;
 import org.apache.tapestry.Field;
 import org.apache.tapestry.FieldValidator;
 import org.apache.tapestry.MarkupWriter;
 import org.apache.tapestry.ValidationDecorator;
+import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.annotations.AfterRender;
 import org.apache.tapestry.annotations.BeginRender;
-import org.apache.tapestry.annotations.CleanupRender;
 import org.apache.tapestry.annotations.ComponentClass;
 import org.apache.tapestry.annotations.Environmental;
-import org.apache.tapestry.annotations.FormPersist;
 import org.apache.tapestry.annotations.Inject;
 import org.apache.tapestry.annotations.Mixin;
+import org.apache.tapestry.annotations.Parameter;
 import org.apache.tapestry.annotations.SetupRender;
 import org.apache.tapestry.corelib.mixins.DiscardBody;
 import org.apache.tapestry.corelib.mixins.RenderDisabled;
 import org.apache.tapestry.corelib.mixins.RenderInformals;
-import org.apache.tapestry.corelib.mixins.TypeSafeConfigurationEnabled;
 import org.apache.tapestry.internal.TapestryUtils;
+import org.apache.tapestry.internal.bindings.LiteralBinding;
 import org.apache.tapestry.internal.services.FormParameterLookup;
 import org.apache.tapestry.ioc.Messages;
-import org.apache.tapestry.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry.ioc.services.PropertyAccess;
+import org.apache.tapestry.runtime.Component;
 import org.apache.tapestry.services.BindingSource;
 import org.apache.tapestry.services.FormSupport;
 import org.apache.tapestry.services.PageRenderSupport;
@@ -50,20 +50,16 @@
  * {@link RenderInformals}, {@link RenderDisabled} and {@link DiscardBody} mixins.
  */
 @ComponentClass
-public abstract class AbstractField implements Field, BindingSourceProvider
+public abstract class AbstractField implements Field
 {
-    @SuppressWarnings("unused")
-    @Mixin
-    private TypeSafeConfigurationEnabled _typeSafeConfigurationEnabled;
-
     /**
      * The user presentable label for the field. If not provided, a reasonable label is generated
      * from the component's id.
      */
-    @FormPersist
+    @Parameter(defaultPrefix = "literal")
     private String _label;
 
-    @FormPersist
+    @Parameter
     private boolean _disabled;
 
     @SuppressWarnings("unused")
@@ -81,7 +77,13 @@
     @Environmental
     private ValidationDecorator _decorator;
 
-    protected static final FieldValidator NOOP_VALIDATOR = new NoOpFieldValidator();
+    protected static final FieldValidator NOOP_VALIDATOR = new FieldValidator()
+    {
+        public void validate(Object value) throws ValidationException
+        {
+            // Do nothing
+        }
+    };
 
     static class SetupAction implements ComponentAction<AbstractField>, Serializable
     {
@@ -113,6 +115,7 @@
     /** Used a shared instance for all types of fields, for efficiency. */
     private static final ProcessSubmissionAction PROCESS_SUBMISSION_ACTION = new ProcessSubmissionAction();
 
+    @Parameter(value = "prop:componentResources.id", defaultPrefix="literal")
     private String _clientId;
 
     private String _assignedClientId;
@@ -134,7 +137,10 @@
     @Inject("infrastructure:BindingSource")
     private BindingSource _bindingSource;
 
-    final String getDefaultLabel()
+    @Inject("infrastructure:PropertyAccess")
+    private PropertyAccess _propertyAccess;
+
+    final Binding defaultLabel()
     {
         Messages containerMessages = _resources.getContainer().getComponentResources()
                 .getMessages();
@@ -146,12 +152,14 @@
         String label = containerMessages.contains(key) ? containerMessages.get(key) : TapestryUtils
                 .toUserPresentable(componentId);
 
-        return label;
+        // Bypassing the BindingSource for this ...
+
+        return new LiteralBinding("default label", label, null);
     }
 
     public final String getLabel()
     {
-        return _label == null ? getDefaultLabel() : _label;
+        return _label;
     }
 
     @SetupRender
@@ -159,10 +167,7 @@
     {
         // By default, use the component id as the (base) client id. If the clientid
         // parameter is bound, then that is the value to use.
-        if (_clientId == null)
-        {
-            useDefaultClientId();
-        }
+        
         String id = _clientId;
 
         // Often, these elementName and _clientId will end up as the same value. There are many
@@ -173,38 +178,9 @@
         String elementName = _formSupport.allocateElementName(id);
 
         _formSupport.storeAndExecute(this, new SetupAction(elementName));
-    }
-
-    private void useDefaultClientId()
-    {
-        _clientId = _resources.getId();
-    }
-
-    @CleanupRender
-    final void cleanupRender()
-    {
-        // Can't store properties in setup() because some times they're set to
-        // default values during rendering.
-        List<String> formPersistPropNames = CollectionFactory.newList();
-        collectFormPersistPropNames(formPersistPropNames);
-        _formSupport.store(this, new RestorePropertiesAction<AbstractField>(this,
-                formPersistPropNames.toArray(new String[0])));
-        // Process form submission after the properties are restored.
         _formSupport.store(this, PROCESS_SUBMISSION_ACTION);
     }
 
-    /**
-     * Add the list of names of the properties whose values will be restored on form submission. The
-     * {@link org.apache.tapestry.internal.services.FormPersistWorker} will a
-     * {@link #collectFormPersistPropNames(List)} method in a sub-class to call this method and then
-     * add its own property names. Actually, it will replace this method with one that adds form
-     * persistent property names declared in this class.
-     */
-    protected void collectFormPersistPropNames(List<String> formPersistPropNames)
-    {
-
-    }
-
     public final String getClientId()
     {
         return _assignedClientId;
@@ -235,6 +211,34 @@
     }
 
     /**
+     * Used by subclasses to create a default binding to a property of the container matching the
+     * component id.
+     * 
+     * @return a binding to the property, or null if the container does not have a corresponding
+     *         property
+     */
+    protected final Binding createDefaultParameterBinding(String parameterName)
+    {
+        String componentId = _resources.getId();
+
+        Component container = _resources.getContainer();
+
+        // Only provide a default binding if the container actually contains the property.
+        // This sets up an error condition for when the value parameter is not bound, and
+        // the binding can't be deduced.
+
+        if (_propertyAccess.getAdapter(container).getPropertyAdapter(componentId) == null)
+            return null;
+
+        ComponentResources containerResources = _resources.getContainerResources();
+
+        return _bindingSource.newBinding(
+                "default " + parameterName,
+                containerResources,
+                componentId);
+    }
+
+    /**
      * Method implemented by subclasses to actually do the work of processing the submission of the
      * form. The element's elementName property will already have been set. This method is only
      * invoked if the field is <strong>not {@link #isDisabled() disabled}</strong>.
@@ -264,30 +268,5 @@
     protected final ValidationDecorator getValidationDecorator()
     {
         return _decorator;
-    }
-
-    public void setDisabled(boolean disabled)
-    {
-        _disabled = disabled;
-    }
-
-    public void setLabel(String label)
-    {
-        _label = label;
-    }
-
-    public String getIdBasedBindingExpression()
-    {
-        return _resources.getId();
-    }
-
-    public BindingSource getBindingSource()
-    {
-        return _bindingSource;
-    }
-
-    public void setClientId(String clientId)
-    {
-        _clientId = clientId;
     }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractTextField.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractTextField.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractTextField.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractTextField.java Sun Feb  4 08:07:30 2007
@@ -16,41 +16,39 @@
 
 import java.util.Locale;
 
-import org.apache.tapestry.BindingExprValueConduit;
+import org.apache.tapestry.Binding;
+import org.apache.tapestry.ComponentResources;
 import org.apache.tapestry.FieldValidator;
 import org.apache.tapestry.MarkupWriter;
 import org.apache.tapestry.Translator;
 import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.ValidationTracker;
-import org.apache.tapestry.Validator;
-import org.apache.tapestry.ValueConduit;
 import org.apache.tapestry.annotations.AfterRender;
 import org.apache.tapestry.annotations.BeginRender;
 import org.apache.tapestry.annotations.Environmental;
-import org.apache.tapestry.annotations.FormPersist;
 import org.apache.tapestry.annotations.Inject;
-import org.apache.tapestry.internal.services.FieldValidatorImpl;
-import org.apache.tapestry.internal.services.FieldValidatorMessages;
+import org.apache.tapestry.annotations.Parameter;
 import org.apache.tapestry.internal.services.FormParameterLookup;
 import org.apache.tapestry.ioc.Messages;
+import org.apache.tapestry.services.FieldValidatorDefaultSource;
 import org.apache.tapestry.services.TranslatorDefaultSource;
 import org.apache.tapestry.services.ValidationMessagesSource;
-import org.apache.tapestry.translator.StringTranslator;
 
 /**
  * Abstract class for a variety of components that render some variation of a text field. Most of
  * the hooks for user input validation are in this class.
  */
-public abstract class AbstractTextField<T> extends AbstractField
+public abstract class AbstractTextField extends AbstractField
 {
-    @FormPersist
-    private ValueConduit<T> _valueConduit;
+    @Parameter(required = true, principal = true)
+    private Object _value;
 
-    @FormPersist
-    private Translator<T> _translator;
+    @Parameter
+    private Translator<Object> _translate;
 
-    @FormPersist
-    private Validator<? super T>[] _validators;
+    @Parameter(defaultPrefix = "validate")
+    @SuppressWarnings("unchecked")
+    private FieldValidator<Object> _validate = NOOP_VALIDATOR;
 
     @Environmental
     private ValidationTracker _tracker;
@@ -58,49 +56,76 @@
     @Inject("infrastructure:ValidationMessagesSource")
     private ValidationMessagesSource _messagesSource;
 
-    @Inject("infrastructure:FieldValidatorMessages")
-    private FieldValidatorMessages _fieldValidatorMessages;
-
     @Inject("infrastructure:TranslatorDefaultSource")
     private TranslatorDefaultSource _translatorDefaultSource;
 
+    @Inject("infrastructure:FieldValidatorDefaultSource")
+    private FieldValidatorDefaultSource _fieldValidatorDefaultSource;
+
+    @Inject
+    private ComponentResources _resources;
+
     @Inject
     private Locale _locale;
 
-    @SuppressWarnings("unchecked")
+    /**
+     * Computes a default value for the "translate" parameter using {@link TranslatorDefaultSource}.
+     */
+    final Translator defaultTranslate()
+    {
+        // Because the value parameter is a principal parameter, we know that it will be bound (even
+        // via its default parameter) by the time this method is invoked.
+
+        Class type = _resources.getBoundType("value");
+
+        if (type == null)
+            return null;
+
+        return _translatorDefaultSource.find(type);
+    }
+
+    /**
+     * Computes a default value for the "validate" parameter using
+     * {@link FieldValidatorDefaultSource}.
+     */
+    final FieldValidator defaultValidate()
+    {
+        Class type = _resources.getBoundType("value");
+
+        if (type == null)
+            return null;
+
+        return _fieldValidatorDefaultSource.createDefaultValidator(
+                this,
+                _resources.getId(),
+                _resources.getContainerMessages(),
+                _locale,
+                type,
+                _resources.getAnnotationProvider("value"));
+    }
+
+    /**
+     * The default value is a property of the container whose name matches the component's id. May
+     * return null if the container does not have a matching property.
+     */
+    final Binding defaultValue()
+    {
+        return createDefaultParameterBinding("value");
+    }
+
     @BeginRender
     final void begin(MarkupWriter writer)
     {
-        // Need to use defaults if they're unspecified, even if the tracker already contains
-        // a value. Otherwise, they will remain as null and when the form is submitted,
-        // we'll be in trouble.
-        if (_valueConduit == null)
-        {
-            setValueBindingExpr(getIdBasedBindingExpression());
-        }
-        T rawValue = _valueConduit.get(this);
-        if (_translator == null)
-        {
-            useDefaultTranslator(rawValue);
-        }
         String value = _tracker.getInput(this);
 
         if (value == null)
-        {
-            value = _translator.toClient(rawValue);
-        }
+            value = _translate.toClient(_value);
+
         writeFieldTag(writer, value);
 
         getValidationDecorator().insideField(this);
     }
 
-    @SuppressWarnings("unchecked")
-    private void useDefaultTranslator(T rawValue)
-    {
-        _translator = rawValue != null ? _translatorDefaultSource.find(rawValue.getClass())
-                : new StringTranslator();
-    }
-
     /**
      * Invoked from {@link #begin(MarkupWriter)} to write out the element and attributes (typically,
      * &lt;input&gt;). The {@link AbstractField#getElementName() elementName} and
@@ -130,13 +155,11 @@
 
         try
         {
-            T translated = _translator.parseClient(rawValue, messages);
+            Object translated = _translate.parseClient(rawValue, messages);
 
-            FieldValidator<T> fieldValidator = new FieldValidatorImpl<T>(this,
-                    _fieldValidatorMessages, _validators);
-            fieldValidator.validate(translated);
+            _validate.validate(translated);
 
-            _valueConduit.set(this, translated);
+            _value = translated;
         }
         catch (ValidationException ex)
         {
@@ -144,41 +167,4 @@
             return;
         }
     }
-
-    public void setValidators(Validator<? super T>... validators)
-    {
-        _validators = validators;
-    }
-
-    public Translator<T> getTranslator()
-    {
-        return _translator;
-    }
-
-    public Validator<? super T>[] getValidators()
-    {
-        return _validators;
-    }
-
-    @SuppressWarnings("unchecked")
-    public void setValueBindingExpr(String valueBindingExpr)
-    {
-        _valueConduit = new BindingExprValueConduit(valueBindingExpr);
-    }
-
-    public void setTranslator(Translator<T> translator)
-    {
-        _translator = translator;
-    }
-
-    public ValueConduit<T> getValueConduit()
-    {
-        return _valueConduit;
-    }
-
-    public void setValueConduit(ValueConduit<T> valueHolder)
-    {
-        _valueConduit = valueHolder;
-    }
-
-}
\ No newline at end of file
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java Sun Feb  4 08:07:30 2007
@@ -14,16 +14,16 @@
 
 package org.apache.tapestry.corelib.components;
 
-import java.util.List;
+import java.util.Locale;
 
 import org.apache.tapestry.Block;
 import org.apache.tapestry.ComponentResources;
 import org.apache.tapestry.EnumSelectModel;
 import org.apache.tapestry.EnumValueEncoder;
 import org.apache.tapestry.Field;
+import org.apache.tapestry.FieldValidator;
 import org.apache.tapestry.SelectModel;
 import org.apache.tapestry.Translator;
-import org.apache.tapestry.Validator;
 import org.apache.tapestry.ValueEncoder;
 import org.apache.tapestry.annotations.Component;
 import org.apache.tapestry.annotations.ComponentClass;
@@ -33,8 +33,8 @@
 import org.apache.tapestry.beaneditor.PropertyEditModel;
 import org.apache.tapestry.ioc.Messages;
 import org.apache.tapestry.services.BeanEditorModelSource;
+import org.apache.tapestry.services.FieldValidatorDefaultSource;
 import org.apache.tapestry.services.TranslatorDefaultSource;
-import org.apache.tapestry.services.ValidatorGenerator;
 
 /**
  * A component that creates an entire form editting the properties of a particular bean. Inspired by
@@ -66,8 +66,8 @@
     @Inject("infrastructure:TranslatorDefaultSource")
     private TranslatorDefaultSource _translatorDefaultSource;
 
-    @Inject("infrastructure:ValidatorGenerator")
-    private ValidatorGenerator _validatorGenerator;
+    @Inject("infrastructure:FieldValidatorDefaultSource")
+    private FieldValidatorDefaultSource _fieldValidatorDefaultSource;
 
     @Inject
     private Block _text;
@@ -81,57 +81,28 @@
     @Component
     private Form _form;
 
-    // @Component(parameters =
-    // { "value=valueForProperty", "label=prop:propertyEditModel.label",
-    // "encoder=valueEncoderForProperty", "model=selectModelForProperty",
-    // "validate=prop:validateForProperty", "clientId=prop:propertyName" })
-    @Component
+    @Component(parameters =
+    { "value=valueForProperty", "label=prop:propertyEditModel.label",
+            "encoder=valueEncoderForProperty", "model=selectModelForProperty",
+            "validate=prop:validateForProperty", "clientId=prop:propertyName" })
     private Select _select;
 
-    @SuppressWarnings("unchecked")
-    public void configureSelect()
-    {
-        _select.setValueBindingExpr("valueForProperty");
-        _select.setLabel(getPropertyEditModel().getLabel());
-        _select.setEncoder(getValueEncoderForProperty());
-        _select.setModel(getSelectModelForProperty());
-        _select.setValidators(getValidatorsForProperty());
-        _select.setClientId(getPropertyName());
-    }
-
-    // @Component(parameters =
-    // { "value=valueForProperty", "label=prop:propertyEditModel.label",
-    // "translate=prop:translateForProperty", "validate=prop:validateForProperty",
-    // "clientId=prop:propertyName" })
-    @Component
+    @Component(parameters =
+    { "value=valueForProperty", "label=prop:propertyEditModel.label",
+            "translate=prop:translateForProperty", "validate=prop:validateForProperty",
+            "clientId=prop:propertyName" })
     private TextField _textField;
 
-    @SuppressWarnings("unchecked")
-    public void configureTextField()
-    {
-        _textField.setValueBindingExpr("valueForProperty");
-        _textField.setLabel(getPropertyEditModel().getLabel());
-        _textField.setTranslator(getTranslateForProperty());
-        _textField.setValidators(getValidatorsForProperty());
-        _textField.setClientId(getPropertyName());
-    }
-
-    // @Component(parameters =
-    // { "value=valueForProperty", "label=prop:propertyEditModel.label",
-    // "clientId=prop:propertyName" })
-    @Component
+    @Component(parameters =
+    { "value=valueForProperty", "label=prop:propertyEditModel.label", "clientId=prop:propertyName" })
     private Checkbox _checkboxField;
 
-    public void configureCheckboxField()
-    {
-        _checkboxField.setValueBindingExpr("valueForProperty");
-        _checkboxField.setLabel(getPropertyEditModel().getLabel());
-        _checkboxField.setClientId(getPropertyName());
-    }
-
     @Inject
     private Messages _messages;
 
+    @Inject
+    private Locale _locale;
+
     @Parameter
     private BeanEditorModel _model;
 
@@ -212,12 +183,15 @@
         return _translatorDefaultSource.find(_propertyEditModel.getPropertyType());
     }
 
-    public Validator[] getValidatorsForProperty()
+    public FieldValidator getValidateForProperty()
     {
-        List<? extends Validator> validators = _validatorGenerator.buildValidators(
+        return _fieldValidatorDefaultSource.createDefaultValidator(
+                _fieldForProperty,
+                _propertyName,
+                _resources.getContainerMessages(),
+                _locale,
                 _propertyEditModel.getPropertyType(),
                 _propertyEditModel.getConduit());
-        return validators == null ? null : validators.toArray(new Validator[0]);
     }
 
     public PropertyEditModel getPropertyEditModel()

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Checkbox.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Checkbox.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Checkbox.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Checkbox.java Sun Feb  4 08:07:30 2007
@@ -14,34 +14,29 @@
 
 package org.apache.tapestry.corelib.components;
 
-import org.apache.tapestry.BindingExprValueConduit;
+import org.apache.tapestry.Binding;
 import org.apache.tapestry.MarkupWriter;
-import org.apache.tapestry.ValueConduit;
 import org.apache.tapestry.annotations.AfterRender;
 import org.apache.tapestry.annotations.BeginRender;
-import org.apache.tapestry.annotations.FormPersist;
+import org.apache.tapestry.annotations.Parameter;
 import org.apache.tapestry.corelib.base.AbstractField;
 import org.apache.tapestry.internal.services.FormParameterLookup;
 
 /** A Checkbox component is simply a &lt;input type="checkbox"&gt;. */
 public class Checkbox extends AbstractField
 {
-    @FormPersist
-    private ValueConduit<Boolean> _valueConduit;
 
-    @SuppressWarnings("unchecked")
-    public void setValueBindingExpr(String valueBindingExpr)
+    @Parameter(required = true)
+    private boolean _value;
+
+    Binding defaultValue()
     {
-        _valueConduit = new BindingExprValueConduit(valueBindingExpr);
+        return createDefaultParameterBinding("value");
     }
 
     @BeginRender
     void begin(MarkupWriter writer)
     {
-        if (_valueConduit == null)
-        {
-            setValueBindingExpr(getIdBasedBindingExpression());
-        }
         writer.element(
                 "input",
                 "type",
@@ -51,7 +46,7 @@
                 "id",
                 getClientId(),
                 "checked",
-                _valueConduit.get(this) ? "checked" : null);
+                _value ? "checked" : null);
 
         getValidationDecorator().insideField(this);
     }
@@ -67,16 +62,7 @@
     {
         String postedValue = paramLookup.getParameter(elementName);
 
-        _valueConduit.set(this, postedValue != null);
-    }
-
-    public ValueConduit<Boolean> getValueConduit()
-    {
-        return _valueConduit;
+        _value = postedValue != null;
     }
 
-    public void setValueConduit(ValueConduit<Boolean> valueConduit)
-    {
-        _valueConduit = valueConduit;
-    }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Label.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Label.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Label.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Label.java Sun Feb  4 08:07:30 2007
@@ -80,9 +80,6 @@
                 element.forceAttributes("for", fieldId);
 
                 decorator.insideLabel(field, element);
-
-                element.text(field.getLabel());
-
             }
         };
 
@@ -100,6 +97,8 @@
     @AfterRender
     void after(MarkupWriter writer)
     {
+        writer.write(_field.getLabel());
+
         writer.end(); // label
     }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/PasswordField.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/PasswordField.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/PasswordField.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/PasswordField.java Sun Feb  4 08:07:30 2007
@@ -21,7 +21,7 @@
  * A version of {@link TextField}, but written out as a &lt;input type="password"&gt;. Further, the
  * output value for a PasswordField is always blank.
  */
-public class PasswordField<T> extends AbstractTextField<T>
+public class PasswordField extends AbstractTextField
 {
 
     @Override

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Select.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Select.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Select.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Select.java Sun Feb  4 08:07:30 2007
@@ -15,11 +15,11 @@
 package org.apache.tapestry.corelib.components;
 
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
-import org.apache.tapestry.BindingExprValueConduit;
+import org.apache.tapestry.Binding;
 import org.apache.tapestry.ComponentResources;
-import org.apache.tapestry.DefaultValueEncoder;
 import org.apache.tapestry.EnumSelectModel;
 import org.apache.tapestry.EnumValueEncoder;
 import org.apache.tapestry.FieldValidator;
@@ -29,45 +29,57 @@
 import org.apache.tapestry.SelectModel;
 import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.ValidationTracker;
-import org.apache.tapestry.Validator;
-import org.apache.tapestry.ValueConduit;
 import org.apache.tapestry.ValueEncoder;
 import org.apache.tapestry.annotations.AfterRender;
 import org.apache.tapestry.annotations.BeforeRenderTemplate;
-import org.apache.tapestry.annotations.BeginRender;
 import org.apache.tapestry.annotations.Environmental;
-import org.apache.tapestry.annotations.FormPersist;
 import org.apache.tapestry.annotations.Inject;
+import org.apache.tapestry.annotations.Parameter;
 import org.apache.tapestry.corelib.base.AbstractField;
-import org.apache.tapestry.internal.services.FieldValidatorImpl;
-import org.apache.tapestry.internal.services.FieldValidatorMessages;
 import org.apache.tapestry.internal.services.FormParameterLookup;
-import org.apache.tapestry.ioc.internal.util.Defense;
+import org.apache.tapestry.services.FieldValidatorDefaultSource;
 
 /**
  * Select an item from a list of values, using an [X]HTML &lt;select&gt; element on the client side.
  * An validation decorations will go around the entire &lt;select&gt; element.
  */
-public final class Select<T> extends AbstractField
+public final class Select extends AbstractField
 {
-    @FormPersist
-    private ValueConduit<T> _valueConduit;
+    @Parameter(required = true, principal = true)
+    private Object _value;
 
     /**
      * The default encoder encodes strings, passing them to the client and back unchanged.
      */
-    @FormPersist
-    private ValueEncoder<T> _encoder;
+    @Parameter
+    private ValueEncoder _encoder = new ValueEncoder<String>()
+    {
+        public String toClient(String value)
+        {
+            return value;
+        }
+
+        public String toValue(String primaryKey)
+        {
+            // We don't do a conversion here, so it stays a String. When that String is assigned to
+            // _value, it will be coerced to the appropriate type (if possible) or an exception
+            // will be thrown.
+
+            return primaryKey;
+        }
+    };
 
     // Maybe this should default to property "<componentId>Model"?
 
-    private SelectModel<T> _model;
+    @Parameter(required = true)
+    private SelectModel _model;
 
-    @Inject("infrastructure:FieldValidatorMessages")
-    private FieldValidatorMessages _fieldValidatorMessages;
+    @Parameter(defaultPrefix = "validate")
+    @SuppressWarnings("unchecked")
+    private FieldValidator<Object> _validate = NOOP_VALIDATOR;
 
-    @FormPersist
-    private Validator<? super T>[] _validators;
+    @Inject("infrastructure:FieldValidatorDefaultSource")
+    private FieldValidatorDefaultSource _fieldValidatorDefaultSource;
 
     @Environmental
     private ValidationTracker _tracker;
@@ -75,75 +87,64 @@
     @Inject
     private ComponentResources _resources;
 
-    @SuppressWarnings("unchecked")
-    private ValueEncoder<T> getDefaultEncoder()
-    {
-        T value = _valueConduit.get(this);
-        return value == null ? null : getDefaultEncoder((Class<T>) value.getClass());
-    }
+    @Inject
+    private Locale _locale;
 
-    @SuppressWarnings("unchecked")
-    private ValueEncoder<T> getDefaultEncoder(Class<T> valueType)
+    Binding defaultValue()
     {
-        Defense.notNull(valueType, "valueType");
-        if (Enum.class.isAssignableFrom(valueType))
-            return (ValueEncoder<T>) new EnumValueEncoder(valueType);
-        ValueEncoder<T> defaultEncoder = (ValueEncoder<T>) new DefaultValueEncoder();
-        return defaultEncoder;
+        return createDefaultParameterBinding("value");
     }
 
-    public void useDefaultEncoder(Class<T> valueType)
+    /**
+     * Computes a default value for the "validate" parameter using
+     * {@link FieldValidatorDefaultSource}.
+     */
+    FieldValidator defaultValidate()
     {
-        _encoder = getDefaultEncoder(valueType);
-    }
+        Class type = _resources.getBoundType("value");
 
-    private void useDefaultEncoder()
-    {
-        _encoder = getDefaultEncoder();
+        if (type == null)
+            return null;
+
+        return _fieldValidatorDefaultSource.createDefaultValidator(
+                this,
+                _resources.getId(),
+                _resources.getContainerMessages(),
+                _locale,
+                type,
+                _resources.getAnnotationProvider("value"));
     }
 
     @SuppressWarnings("unchecked")
-    private SelectModel<T> getDefaultModel(Class<T> valueType)
+    ValueEncoder defaultEncoder()
     {
-        Defense.notNull(valueType, "valueType");
+        Class valueType = _resources.getBoundType("value");
+
+        if (valueType == null)
+            return null;
+
         if (Enum.class.isAssignableFrom(valueType))
-            return new EnumSelectModel(valueType, _resources.getContainerMessages());
+            return new EnumValueEncoder(valueType);
 
         return null;
     }
 
     @SuppressWarnings("unchecked")
-    private SelectModel<T> getDefaultModel()
+    SelectModel defaultModel()
     {
-        T value = _valueConduit.get(this);
-        return value == null ? null : getDefaultModel((Class<T>) value.getClass());
-    }
+        Class valueType = _resources.getBoundType("value");
 
-    public void useDefaultModel(Class<T> valueType)
-    {
-        _model = getDefaultModel(valueType);
-    }
+        if (valueType == null)
+            return null;
 
-    private void useDefaultModel()
-    {
-        _model = getDefaultModel();
+        if (Enum.class.isAssignableFrom(valueType))
+            return new EnumSelectModel(valueType, _resources.getContainerMessages());
+
+        return null;
     }
 
-    @BeginRender
     void beginRender(MarkupWriter writer)
     {
-        if (_valueConduit == null)
-        {
-            setValueBindingExpr(getIdBasedBindingExpression());
-        }
-        if (_encoder == null)
-        {
-            useDefaultEncoder();
-        }
-        if (_model == null)
-        {
-            useDefaultModel();
-        }
         writer.element("select", "name", getElementName(), "id", getClientId());
 
         // Disabled, informals via mixins
@@ -154,7 +155,7 @@
     {
         if (_model.getOptionGroups() != null)
         {
-            for (OptionGroupModel<T> group : _model.getOptionGroups())
+            for (OptionGroupModel group : _model.getOptionGroups())
             {
                 writeOptionGroup(writer, group);
             }
@@ -163,7 +164,7 @@
         writeOptions(writer, _model.getOptions());
     }
 
-    private void writeOptionGroup(MarkupWriter writer, OptionGroupModel<T> model)
+    private void writeOptionGroup(MarkupWriter writer, OptionGroupModel model)
     {
         writer.element("optgroup", "label", model.getLabel());
 
@@ -176,16 +177,16 @@
     }
 
     @SuppressWarnings("unchecked")
-    private void writeOptions(MarkupWriter writer, List<OptionModel<T>> optionModels)
+    private void writeOptions(MarkupWriter writer, List<OptionModel> optionModels)
     {
         if (optionModels == null)
             return;
 
-        for (OptionModel<T> model : optionModels)
+        for (OptionModel model : optionModels)
         {
-            T optionValue = model.getValue();
+            Object optionValue = model.getValue();
 
-            String clientValue = _encoder.toClient(_resources, optionValue);
+            String clientValue = _encoder.toClient(optionValue);
 
             writer.element("option", "value", clientValue);
 
@@ -203,8 +204,7 @@
 
     boolean isOptionValueSelected(Object optionValue)
     {
-        Object value = _valueConduit.get(this);
-        return value == optionValue || (value != null && value.equals(optionValue));
+        return _value == optionValue || (_value != null && _value.equals(optionValue));
     }
 
     private void writeDisabled(MarkupWriter writer, boolean disabled)
@@ -233,16 +233,13 @@
     {
         String primaryKey = paramLookup.getParameter(elementName);
 
-        T selectedValue = _encoder.toValue(_resources, primaryKey);
+        Object selectedValue = _encoder.toValue(primaryKey);
 
         try
         {
-            FieldValidator<T> fieldValidator = new FieldValidatorImpl<T>(this,
-                    _fieldValidatorMessages, _validators);
+            _validate.validate(selectedValue);
 
-            fieldValidator.validate(selectedValue);
-
-            _valueConduit.set(this, selectedValue);
+            _value = selectedValue;
         }
         catch (ValidationException ex)
         {
@@ -251,55 +248,15 @@
         }
     }
 
-    public void setModel(SelectModel<T> model)
-    {
-        _model = model;
-    }
-
-    public ValueConduit<T> getValueConduit()
-    {
-        return _valueConduit;
-    }
-
-    public void setValueConduit(ValueConduit<T> valueConduit)
-    {
-        _valueConduit = valueConduit;
-    }
+    // For testing.
 
-    @SuppressWarnings("unchecked")
-    public void setValueBindingExpr(String valueBindingExpr)
+    void setValue(Object value)
     {
-        _valueConduit = new BindingExprValueConduit(valueBindingExpr);
+        _value = value;
     }
 
-    public ValueEncoder<T> getEncoder()
+    void setModel(SelectModel model)
     {
-        return _encoder;
-    }
-
-    public void setEncoder(ValueEncoder<T> encoder)
-    {
-        _encoder = encoder;
-    }
-
-    public Validator<? super T>[] getValidators()
-    {
-        return _validators;
-    }
-
-    public void setValidators(Validator<? super T>... validators)
-    {
-        _validators = validators;
-    }
-
-    public SelectModel<T> getModel()
-    {
-        return _model;
-    }
-
-    public void useDefaultsFor(Class<T> valueType)
-    {
-        useDefaultEncoder(valueType);
-        useDefaultModel(valueType);
+        _model = model;
     }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/TextArea.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/TextArea.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/TextArea.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/TextArea.java Sun Feb  4 08:07:30 2007
@@ -22,7 +22,7 @@
  * TextArea component corresponds to a &lt;textarea&gt;. The value parameter is almost always bound
  * to a string, but this is not an absolute requirement.
  */
-public final class TextArea<T> extends AbstractTextField<T>
+public final class TextArea extends AbstractTextField
 {
     private String _value;
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/TextField.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/TextField.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/TextField.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/TextField.java Sun Feb  4 08:07:30 2007
@@ -22,7 +22,7 @@
  * editted. TextField is generally used with string values, but other values are acceptible, as long
  * as they can be freely converted back and forth to strings.
  */
-public final class TextField<T> extends AbstractTextField<T>
+public final class TextField extends AbstractTextField
 {
     @Override
     protected final void writeFieldTag(MarkupWriter writer, String value)

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/OptionGroupModelImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/OptionGroupModelImpl.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/OptionGroupModelImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/OptionGroupModelImpl.java Sun Feb  4 08:07:30 2007
@@ -14,33 +14,30 @@
 
 package org.apache.tapestry.internal;
 
-import java.io.Serializable;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.tapestry.OptionGroupModel;
 import org.apache.tapestry.OptionModel;
 
-public final class OptionGroupModelImpl<T> implements OptionGroupModel<T>, Serializable
+public final class OptionGroupModelImpl implements OptionGroupModel
 {
-    private static final long serialVersionUID = 1L;
-    
     private final String _label;
 
     private final boolean _disabled;
 
-    private final List<OptionModel<T>> _options;
+    private final List<OptionModel> _options;
 
     private final Map<String, String> _attributes;
 
-    public OptionGroupModelImpl(String label, boolean disabled, List<OptionModel<T>> options,
+    public OptionGroupModelImpl(String label, boolean disabled, List<OptionModel> options,
             String... attributeKeysAndValues)
     {
         this(label, disabled, options, attributeKeysAndValues.length == 0 ? null : TapestryUtils
                 .mapFromKeysAndValues(attributeKeysAndValues));
     }
 
-    public OptionGroupModelImpl(String label, boolean disabled, List<OptionModel<T>> options,
+    public OptionGroupModelImpl(String label, boolean disabled, List<OptionModel> options,
             Map<String, String> attributes)
     {
         _label = label;
@@ -59,7 +56,7 @@
         return _label;
     }
 
-    public List<OptionModel<T>> getOptions()
+    public List<OptionModel> getOptions()
     {
         return _options;
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/OptionModelImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/OptionModelImpl.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/OptionModelImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/OptionModelImpl.java Sun Feb  4 08:07:30 2007
@@ -14,30 +14,27 @@
 
 package org.apache.tapestry.internal;
 
-import java.io.Serializable;
 import java.util.Map;
 
 import org.apache.tapestry.OptionModel;
 
-public final class OptionModelImpl<T> implements OptionModel<T>, Serializable
+public final class OptionModelImpl implements OptionModel
 {
-    private static final long serialVersionUID = 1L;
-
     private final String _label;
 
     private final boolean _disabled;
 
-    private final T _value;
+    private final Object _value;
 
     private final Map<String, String> _attributes;
 
-    public OptionModelImpl(String label, boolean disabled, T value, String... keysAndValues)
+    public OptionModelImpl(String label, boolean disabled, Object value, String... keysAndValues)
     {
         this(label, disabled, value, keysAndValues.length > 0 ? TapestryUtils
                 .mapFromKeysAndValues(keysAndValues) : null);
     }
 
-    public OptionModelImpl(String label, boolean disabled, T value,
+    public OptionModelImpl(String label, boolean disabled, Object value,
             Map<String, String> attributes)
     {
         _label = label;
@@ -56,7 +53,7 @@
         return _label;
     }
 
-    public T getValue()
+    public Object getValue()
     {
         return _value;
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/SelectModelImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/SelectModelImpl.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/SelectModelImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/SelectModelImpl.java Sun Feb  4 08:07:30 2007
@@ -14,7 +14,6 @@
 
 package org.apache.tapestry.internal;
 
-import java.io.Serializable;
 import java.util.Arrays;
 import java.util.List;
 
@@ -22,37 +21,35 @@
 import org.apache.tapestry.OptionModel;
 import org.apache.tapestry.SelectModel;
 
-public final class SelectModelImpl<T> implements SelectModel<T>, Serializable
+public final class SelectModelImpl implements SelectModel
 {
-    private static final long serialVersionUID = 1L;
-    
-    private final List<OptionGroupModel<T>> _optionGroups;
+    private final List<OptionGroupModel> _optionGroups;
 
-    private final List<OptionModel<T>> _optionModels;
+    private final List<OptionModel> _optionModels;
 
-    public SelectModelImpl(final List<OptionGroupModel<T>> optionGroups,
-            final List<OptionModel<T>> optionModels)
+    public SelectModelImpl(final List<OptionGroupModel> optionGroups,
+            final List<OptionModel> optionModels)
     {
         _optionGroups = optionGroups;
         _optionModels = optionModels;
     }
 
-    public SelectModelImpl(OptionModel<T>... optionModels)
+    public SelectModelImpl(OptionModel... optionModels)
     {
         this(null, Arrays.asList(optionModels));
     }
 
-    public SelectModelImpl(OptionGroupModel<T>... groupModels)
+    public SelectModelImpl(OptionGroupModel... groupModels)
     {
         this(Arrays.asList(groupModels), null);
     }
 
-    public List<OptionGroupModel<T>> getOptionGroups()
+    public List<OptionGroupModel> getOptionGroups()
     {
         return _optionGroups;
     }
 
-    public List<OptionModel<T>> getOptions()
+    public List<OptionModel> getOptions()
     {
         return _optionModels;
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryUtils.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryUtils.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryUtils.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryUtils.java Sun Feb  4 08:07:30 2007
@@ -126,19 +126,19 @@
      * @param input
      * @return
      */
-    public static OptionModel<String> toOptionModel(String input)
+    public static OptionModel toOptionModel(String input)
     {
         Defense.notNull(input, "input");
 
         int equalsx = input.indexOf('=');
 
         if (equalsx < 0)
-            return new OptionModelImpl<String>(input, false, input);
+            return new OptionModelImpl(input, false, input);
 
         String value = input.substring(0, equalsx);
         String label = input.substring(equalsx + 1);
 
-        return new OptionModelImpl<String>(label, false, value);
+        return new OptionModelImpl(label, false, value);
     }
 
     /**
@@ -149,11 +149,11 @@
      *            comma seperated list of terms
      * @return list of option models
      */
-    public static List<OptionModel<String>> toOptionModels(String input)
+    public static List<OptionModel> toOptionModels(String input)
     {
         Defense.notNull(input, "input");
 
-        List<OptionModel<String>> result = newList();
+        List<OptionModel> result = newList();
 
         for (String term : input.split(","))
             result.add(toOptionModel(term.trim()));
@@ -168,11 +168,11 @@
      * @param input
      * @return
      */
-    public static SelectModel<String> toSelectModel(String input)
+    public static SelectModel toSelectModel(String input)
     {
-        List<OptionModel<String>> options = toOptionModels(input);
+        List<OptionModel> options = toOptionModels(input);
 
-        return new SelectModelImpl<String>(null, options);
+        return new SelectModelImpl(null, options);
     }
 
     /**

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/FieldValidatorImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/FieldValidatorImpl.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/FieldValidatorImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/FieldValidatorImpl.java Sun Feb  4 08:07:30 2007
@@ -20,33 +20,35 @@
 import org.apache.tapestry.Validator;
 import org.apache.tapestry.ioc.MessageFormatter;
 
-public class FieldValidatorImpl<T> implements FieldValidator<T>
+public class FieldValidatorImpl implements FieldValidator
 {
     private final Field _field;
 
-    private final Validator<? super T>[] _validators;
+    private final Object _constraintValue;
 
-    private FieldValidatorMessages _fieldValidatorMessages;
+    private final MessageFormatter _messageFormatter;
 
-    public FieldValidatorImpl(Field field, FieldValidatorMessages fieldValidatorMessages,
-            Validator<? super T>... validators)
+    private final Validator _validator;
+
+    public FieldValidatorImpl(Field field, Object constraintValue,
+            MessageFormatter messageFormatter, Validator validator)
     {
         _field = field;
-        _fieldValidatorMessages = fieldValidatorMessages;
-        _validators = validators;
+        _constraintValue = constraintValue;
+        _messageFormatter = messageFormatter;
+        _validator = validator;
     }
 
-    public void validate(T value) throws ValidationException
+    @SuppressWarnings("unchecked")
+    public void validate(Object value) throws ValidationException
     {
-        if (_validators == null)
+        if (! _validator.invokeIfBlank() && isBlank(value))
+            return;
+
+        if (value != null && !_validator.getValueType().isInstance(value))
             return;
-        for (Validator<? super T> validator : _validators)
-        {
-            if (!validator.invokeIfBlank() && isBlank(value))
-                return;
-            MessageFormatter messageFormatter = _fieldValidatorMessages.get(_field, validator);
-            validator.validate(_field, messageFormatter, value);
-        }
+
+        _validator.validate(_field, _constraintValue, _messageFormatter, value);
     }
 
     private boolean isBlank(Object value)

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalClassTransformationImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalClassTransformationImpl.java?view=diff&rev=503433&r1=503432&r2=503433
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalClassTransformationImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalClassTransformationImpl.java Sun Feb  4 08:07:30 2007
@@ -786,12 +786,6 @@
 
     public List<String> findFieldsWithAnnotation(final Class<? extends Annotation> annotationClass)
     {
-        return findFieldsWithAnnotation(annotationClass, false);
-    }
-
-    public List<String> findFieldsWithAnnotation(final Class<? extends Annotation> annotationClass,
-            boolean searchAncestors)
-    {
         FieldFilter filter = new FieldFilter()
         {
             public boolean accept(String fieldName, String fieldType)
@@ -830,6 +824,7 @@
         {
             throw new RuntimeException(ex);
         }
+
         Collections.sort(result);
 
         return result;