\r
import com.vaadin.data.Item;\r
import com.vaadin.data.util.BeanItem;\r
-import com.vaadin.data.validator.BeanValidationValidator;\r
+import com.vaadin.data.validator.BeanValidator;\r
import com.vaadin.ui.Field;\r
\r
public class BeanFieldGroup<T> extends FieldGroup {\r
super.configureField(field);\r
// Add Bean validators if there are annotations\r
if (isBeanValidationImplementationAvailable()) {\r
- BeanValidationValidator validator = new BeanValidationValidator(\r
+ BeanValidator validator = new BeanValidator(\r
beanType, getPropertyId(field).toString());\r
field.addValidator(validator);\r
if (field.getLocale() != null) {\r
+++ /dev/null
-/* \r
-@VaadinApache2LicenseForJavaFiles@\r
- */\r
-\r
-package com.vaadin.data.validator;\r
-\r
-import java.io.Serializable;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-import java.util.Locale;\r
-import java.util.Set;\r
-\r
-import javax.validation.ConstraintViolation;\r
-import javax.validation.MessageInterpolator.Context;\r
-import javax.validation.Validation;\r
-import javax.validation.ValidatorFactory;\r
-import javax.validation.metadata.ConstraintDescriptor;\r
-\r
-import com.vaadin.data.Validator;\r
-\r
-/**\r
- * Vaadin {@link Validator} using the JSR-303 (javax.validation)\r
- * annotation-based bean validation.\r
- * \r
- * The annotations of the fields of the beans are used to determine the\r
- * validation to perform.\r
- * \r
- * Note that a JSR-303 implementation (e.g. Hibernate Validator or Apache Bean\r
- * Validation - formerly agimatec validation) must be present on the project\r
- * classpath when using bean validation.\r
- * \r
- * @since 7.0\r
- * \r
- * @author Petri Hakala\r
- * @author Henri Sara\r
- */\r
-public class BeanValidationValidator implements Validator {\r
-\r
- private static final long serialVersionUID = 1L;\r
- private static ValidatorFactory factory;\r
-\r
- private transient javax.validation.Validator javaxBeanValidator;\r
- private String propertyName;\r
- private Class<?> beanClass;\r
- private Locale locale;\r
-\r
- /**\r
- * Simple implementation of a message interpolator context that returns\r
- * fixed values.\r
- */\r
- protected static class SimpleContext implements Context, Serializable {\r
-\r
- private final Object value;\r
- private final ConstraintDescriptor<?> descriptor;\r
-\r
- /**\r
- * Create a simple immutable message interpolator context.\r
- * \r
- * @param value\r
- * value being validated\r
- * @param descriptor\r
- * ConstraintDescriptor corresponding to the constraint being\r
- * validated\r
- */\r
- public SimpleContext(Object value, ConstraintDescriptor<?> descriptor) {\r
- this.value = value;\r
- this.descriptor = descriptor;\r
- }\r
-\r
- public ConstraintDescriptor<?> getConstraintDescriptor() {\r
- return descriptor;\r
- }\r
-\r
- public Object getValidatedValue() {\r
- return value;\r
- }\r
-\r
- }\r
-\r
- /**\r
- * Creates a Vaadin {@link Validator} utilizing JSR-303 bean validation.\r
- * \r
- * @param beanClass\r
- * bean class based on which the validation should be performed\r
- * @param propertyName\r
- * property to validate\r
- */\r
- public BeanValidationValidator(Class<?> beanClass, String propertyName) {\r
- this.beanClass = beanClass;\r
- this.propertyName = propertyName;\r
- locale = Locale.getDefault();\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see com.vaadin.data.Validator#validate(java.lang.Object)\r
- */\r
- public void validate(final Object value) throws InvalidValueException {\r
- Set<?> violations = getJavaxBeanValidator().validateValue(beanClass,\r
- propertyName, value);\r
- if (violations.size() > 0) {\r
- List<String> exceptions = new ArrayList<String>();\r
- for (Object v : violations) {\r
- final ConstraintViolation<?> violation = (ConstraintViolation<?>) v;\r
- String msg = getJavaxBeanValidatorFactory()\r
- .getMessageInterpolator().interpolate(\r
- violation.getMessageTemplate(),\r
- new SimpleContext(value, violation\r
- .getConstraintDescriptor()), locale);\r
- exceptions.add(msg);\r
- }\r
- StringBuilder b = new StringBuilder();\r
- for (int i = 0; i < exceptions.size(); i++) {\r
- if (i != 0) {\r
- b.append("<br/>");\r
- }\r
- b.append(exceptions.get(i));\r
- }\r
- throw new InvalidValueException(b.toString());\r
- }\r
- }\r
-\r
- /**\r
- * Sets the locale used for validation error messages.\r
- * \r
- * Revalidation is not automatically triggered by setting the locale.\r
- * \r
- * @param locale\r
- */\r
- public void setLocale(Locale locale) {\r
- this.locale = locale;\r
- }\r
-\r
- /**\r
- * Gets the locale used for validation error messages.\r
- * \r
- * @return locale used for validation\r
- */\r
- public Locale getLocale() {\r
- return locale;\r
- }\r
-\r
- /**\r
- * Returns the underlying JSR-303 bean validator factory used. A factory is\r
- * created using {@link Validation} if necessary.\r
- * \r
- * @return {@link ValidatorFactory} to use\r
- */\r
- protected static ValidatorFactory getJavaxBeanValidatorFactory() {\r
- if (factory == null) {\r
- factory = Validation.buildDefaultValidatorFactory();\r
- }\r
-\r
- return factory;\r
- }\r
-\r
- /**\r
- * Returns a shared Validator instance to use. An instance is created using\r
- * the validator factory if necessary and thereafter reused by the\r
- * {@link BeanValidationValidator} instance.\r
- * \r
- * @return the JSR-303 {@link javax.validation.Validator} to use\r
- */\r
- protected javax.validation.Validator getJavaxBeanValidator() {\r
- if (javaxBeanValidator == null) {\r
- javaxBeanValidator = getJavaxBeanValidatorFactory().getValidator();\r
- }\r
-\r
- return javaxBeanValidator;\r
- }\r
-\r
-}
\ No newline at end of file
--- /dev/null
+/* \r
+@VaadinApache2LicenseForJavaFiles@\r
+ */\r
+\r
+package com.vaadin.data.validator;\r
+\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Locale;\r
+import java.util.Set;\r
+\r
+import javax.validation.ConstraintViolation;\r
+import javax.validation.MessageInterpolator.Context;\r
+import javax.validation.Validation;\r
+import javax.validation.ValidatorFactory;\r
+import javax.validation.metadata.ConstraintDescriptor;\r
+\r
+import com.vaadin.data.Validator;\r
+\r
+/**\r
+ * Vaadin {@link Validator} using the JSR-303 (javax.validation)\r
+ * annotation-based bean validation.\r
+ * \r
+ * The annotations of the fields of the beans are used to determine the\r
+ * validation to perform.\r
+ * \r
+ * Note that a JSR-303 implementation (e.g. Hibernate Validator or Apache Bean\r
+ * Validation - formerly agimatec validation) must be present on the project\r
+ * classpath when using bean validation.\r
+ * \r
+ * @since 7.0\r
+ * \r
+ * @author Petri Hakala\r
+ * @author Henri Sara\r
+ */\r
+public class BeanValidator implements Validator {\r
+\r
+ private static final long serialVersionUID = 1L;\r
+ private static ValidatorFactory factory;\r
+\r
+ private transient javax.validation.Validator javaxBeanValidator;\r
+ private String propertyName;\r
+ private Class<?> beanClass;\r
+ private Locale locale;\r
+\r
+ /**\r
+ * Simple implementation of a message interpolator context that returns\r
+ * fixed values.\r
+ */\r
+ protected static class SimpleContext implements Context, Serializable {\r
+\r
+ private final Object value;\r
+ private final ConstraintDescriptor<?> descriptor;\r
+\r
+ /**\r
+ * Create a simple immutable message interpolator context.\r
+ * \r
+ * @param value\r
+ * value being validated\r
+ * @param descriptor\r
+ * ConstraintDescriptor corresponding to the constraint being\r
+ * validated\r
+ */\r
+ public SimpleContext(Object value, ConstraintDescriptor<?> descriptor) {\r
+ this.value = value;\r
+ this.descriptor = descriptor;\r
+ }\r
+\r
+ public ConstraintDescriptor<?> getConstraintDescriptor() {\r
+ return descriptor;\r
+ }\r
+\r
+ public Object getValidatedValue() {\r
+ return value;\r
+ }\r
+\r
+ }\r
+\r
+ /**\r
+ * Creates a Vaadin {@link Validator} utilizing JSR-303 bean validation.\r
+ * \r
+ * @param beanClass\r
+ * bean class based on which the validation should be performed\r
+ * @param propertyName\r
+ * property to validate\r
+ */\r
+ public BeanValidator(Class<?> beanClass, String propertyName) {\r
+ this.beanClass = beanClass;\r
+ this.propertyName = propertyName;\r
+ locale = Locale.getDefault();\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see com.vaadin.data.Validator#validate(java.lang.Object)\r
+ */\r
+ public void validate(final Object value) throws InvalidValueException {\r
+ Set<?> violations = getJavaxBeanValidator().validateValue(beanClass,\r
+ propertyName, value);\r
+ if (violations.size() > 0) {\r
+ List<String> exceptions = new ArrayList<String>();\r
+ for (Object v : violations) {\r
+ final ConstraintViolation<?> violation = (ConstraintViolation<?>) v;\r
+ String msg = getJavaxBeanValidatorFactory()\r
+ .getMessageInterpolator().interpolate(\r
+ violation.getMessageTemplate(),\r
+ new SimpleContext(value, violation\r
+ .getConstraintDescriptor()), locale);\r
+ exceptions.add(msg);\r
+ }\r
+ StringBuilder b = new StringBuilder();\r
+ for (int i = 0; i < exceptions.size(); i++) {\r
+ if (i != 0) {\r
+ b.append("<br/>");\r
+ }\r
+ b.append(exceptions.get(i));\r
+ }\r
+ throw new InvalidValueException(b.toString());\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Sets the locale used for validation error messages.\r
+ * \r
+ * Revalidation is not automatically triggered by setting the locale.\r
+ * \r
+ * @param locale\r
+ */\r
+ public void setLocale(Locale locale) {\r
+ this.locale = locale;\r
+ }\r
+\r
+ /**\r
+ * Gets the locale used for validation error messages.\r
+ * \r
+ * @return locale used for validation\r
+ */\r
+ public Locale getLocale() {\r
+ return locale;\r
+ }\r
+\r
+ /**\r
+ * Returns the underlying JSR-303 bean validator factory used. A factory is\r
+ * created using {@link Validation} if necessary.\r
+ * \r
+ * @return {@link ValidatorFactory} to use\r
+ */\r
+ protected static ValidatorFactory getJavaxBeanValidatorFactory() {\r
+ if (factory == null) {\r
+ factory = Validation.buildDefaultValidatorFactory();\r
+ }\r
+\r
+ return factory;\r
+ }\r
+\r
+ /**\r
+ * Returns a shared Validator instance to use. An instance is created using\r
+ * the validator factory if necessary and thereafter reused by the\r
+ * {@link BeanValidator} instance.\r
+ * \r
+ * @return the JSR-303 {@link javax.validation.Validator} to use\r
+ */\r
+ protected javax.validation.Validator getJavaxBeanValidator() {\r
+ if (javaxBeanValidator == null) {\r
+ javaxBeanValidator = getJavaxBeanValidatorFactory().getValidator();\r
+ }\r
+\r
+ return javaxBeanValidator;\r
+ }\r
+\r
+}
\ No newline at end of file
import org.junit.Test;
import com.vaadin.data.Validator.InvalidValueException;
-import com.vaadin.data.validator.BeanValidationValidator;
+import com.vaadin.data.validator.BeanValidator;
import com.vaadin.tests.data.bean.BeanToValidate;
public class TestBeanValidation {
@Test(expected = InvalidValueException.class)
public void testBeanValidationNull() {
- BeanValidationValidator validator = new BeanValidationValidator(
- BeanToValidate.class, "firstname");
+ BeanValidator validator = new BeanValidator(BeanToValidate.class,
+ "firstname");
validator.validate(null);
}
@Test(expected = InvalidValueException.class)
public void testBeanValidationStringTooShort() {
- BeanValidationValidator validator = new BeanValidationValidator(
- BeanToValidate.class, "firstname");
+ BeanValidator validator = new BeanValidator(BeanToValidate.class,
+ "firstname");
validator.validate("aa");
}
@Test
public void testBeanValidationStringOk() {
- BeanValidationValidator validator = new BeanValidationValidator(
- BeanToValidate.class, "firstname");
+ BeanValidator validator = new BeanValidator(BeanToValidate.class,
+ "firstname");
validator.validate("aaa");
}
@Test(expected = InvalidValueException.class)
public void testBeanValidationIntegerTooSmall() {
- BeanValidationValidator validator = new BeanValidationValidator(
- BeanToValidate.class, "age");
+ BeanValidator validator = new BeanValidator(BeanToValidate.class, "age");
validator.validate(17);
}
@Test
public void testBeanValidationIntegerOk() {
- BeanValidationValidator validator = new BeanValidationValidator(
- BeanToValidate.class, "age");
+ BeanValidator validator = new BeanValidator(BeanToValidate.class, "age");
validator.validate(18);
}
@Test(expected = InvalidValueException.class)
public void testBeanValidationTooManyDigits() {
- BeanValidationValidator validator = new BeanValidationValidator(
- BeanToValidate.class, "decimals");
+ BeanValidator validator = new BeanValidator(BeanToValidate.class,
+ "decimals");
validator.validate("1234.567");
}
@Test
public void testBeanValidationDigitsOk() {
- BeanValidationValidator validator = new BeanValidationValidator(
- BeanToValidate.class, "decimals");
+ BeanValidator validator = new BeanValidator(BeanToValidate.class,
+ "decimals");
validator.validate("123.45");
}