\r
package com.vaadin.data.validator;\r
\r
-import java.io.IOException;\r
-import java.io.ObjectInputStream;\r
import java.io.Serializable;\r
import java.lang.annotation.Annotation;\r
import java.lang.reflect.Method;\r
public class BeanValidationValidator implements Validator {\r
\r
private static final long serialVersionUID = 1L;\r
- private static ValidatorFactory factory = Validation\r
- .buildDefaultValidatorFactory();\r
+ private static ValidatorFactory factory;\r
\r
- private transient javax.validation.Validator validator;\r
+ private transient javax.validation.Validator javaxBeanValidator;\r
private String propertyName;\r
private Class<?> beanClass;\r
private Locale locale;\r
public BeanValidationValidator(Class<?> beanClass, String propertyName) {\r
this.beanClass = beanClass;\r
this.propertyName = propertyName;\r
- validator = factory.getValidator();\r
locale = Locale.getDefault();\r
}\r
\r
* @return the created validator\r
*/\r
public static BeanValidationValidator addValidator(Field field,\r
- Object propertyId, Class<?> beanClass) {\r
+ Object objectPropertyId, Class<?> beanClass) {\r
+ String propertyId = (String) objectPropertyId;\r
BeanValidationValidator validator = new BeanValidationValidator(\r
- beanClass, String.valueOf(propertyId));\r
- PropertyDescriptor constraintsForProperty = validator.validator\r
- .getConstraintsForClass(beanClass).getConstraintsForProperty(\r
- propertyId.toString());\r
+ beanClass, propertyId);\r
+ PropertyDescriptor constraintsForProperty = validator\r
+ .getJavaxBeanValidator().getConstraintsForClass(beanClass)\r
+ .getConstraintsForProperty(propertyId);\r
if (constraintsForProperty != null) {\r
int nonNotNullValidators = constraintsForProperty\r
.getConstraintDescriptors().size();\r
* @return true if the field is marked as not null\r
*/\r
public boolean isRequired() {\r
- PropertyDescriptor desc = validator.getConstraintsForClass(beanClass)\r
- .getConstraintsForProperty(propertyName);\r
+ PropertyDescriptor desc = getJavaxBeanValidator()\r
+ .getConstraintsForClass(beanClass).getConstraintsForProperty(\r
+ propertyName);\r
if (desc != null) {\r
Iterator<ConstraintDescriptor<?>> it = desc\r
.getConstraintDescriptors().iterator();\r
}\r
\r
public void validate(final Object value) throws InvalidValueException {\r
- Set<?> violations = validator.validateValue(beanClass, propertyName,\r
- value);\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 = factory.getMessageInterpolator().interpolate(\r
+ String msg = getJavaxBeanValidatorFactory().getMessageInterpolator().interpolate(\r
violation.getMessageTemplate(),\r
new SimpleContext(value, violation\r
.getConstraintDescriptor()), locale);\r
\r
private String getErrorMessage(final Object value,\r
Class<? extends Annotation>... an) {\r
- BeanDescriptor beanDesc = validator.getConstraintsForClass(beanClass);\r
+ BeanDescriptor beanDesc = getJavaxBeanValidator()\r
+ .getConstraintsForClass(beanClass);\r
PropertyDescriptor desc = beanDesc\r
.getConstraintsForProperty(propertyName);\r
if (desc == null) {\r
throw new InvalidValueException(\r
"Annotation must have message attribute");\r
}\r
- String msg = factory.getMessageInterpolator().interpolate(\r
+ String msg = getJavaxBeanValidatorFactory().getMessageInterpolator().interpolate(\r
messageTemplate, new SimpleContext(value, d), locale);\r
exceptions.add(msg);\r
}\r
return locale;\r
}\r
\r
- private void readObject(ObjectInputStream in) throws IOException,\r
- ClassNotFoundException {\r
- in.defaultReadObject();\r
- validator = factory.getValidator();\r
+ protected static ValidatorFactory getJavaxBeanValidatorFactory() {\r
+ if (factory == null) {\r
+ factory = Validation.buildDefaultValidatorFactory();\r
+ }\r
+\r
+ return factory;\r
+ }\r
+\r
+ protected javax.validation.Validator getJavaxBeanValidator() {\r
+ if (javaxBeanValidator == null) {\r
+ javaxBeanValidator = getJavaxBeanValidatorFactory().getValidator();\r
+ }\r
+\r
+ return javaxBeanValidator;\r
+ }\r
+\r
+ public static boolean isImplementationAvailable() {\r
+ try {\r
+ getJavaxBeanValidatorFactory();\r
+ return true;\r
+ } catch (Exception e) {\r
+ return false;\r
+ }\r
}\r
}
\ No newline at end of file