Ver código fonte

Move bean validation implementation availability check to

BeanFieldGroup.

The check for bean validation implementation availability has to be
performed using reflection APIs because otherwise, at least the bean
validation API JAR would be needed at runtime.
tags/7.0.0.alpha1
Henri Sara 12 anos atrás
pai
commit
be5404d3f7

+ 30
- 1
src/com/vaadin/data/fieldbinder/BeanFieldGroup.java Ver arquivo

@@ -3,6 +3,8 @@
*/
package com.vaadin.data.fieldbinder;
import java.lang.reflect.Method;
import com.vaadin.data.Item;
import com.vaadin.data.util.BeanItem;
import com.vaadin.data.validator.BeanValidationValidator;
@@ -12,6 +14,8 @@ public class BeanFieldGroup<T> extends FieldGroup {
private Class<T> beanType;
private static Boolean beanValidationImplementationAvailable = null;
public BeanFieldGroup(Class<T> beanType) {
this.beanType = beanType;
}
@@ -115,7 +119,7 @@ public class BeanFieldGroup<T> extends FieldGroup {
protected void configureField(Field<?> field) {
super.configureField(field);
// Add Bean validators if there are annotations
if (BeanValidationValidator.isImplementationAvailable()) {
if (isBeanValidationImplementationAvailable()) {
BeanValidationValidator validator = new BeanValidationValidator(
beanType, getPropertyId(field).toString());
field.addValidator(validator);
@@ -125,4 +129,29 @@ public class BeanFieldGroup<T> extends FieldGroup {
}
}
/**
* Checks whether a bean validation implementation (e.g. Hibernate Validator
* or Apache Bean Validation) is available.
*
* TODO move this method to some more generic location
*
* @return true if a JSR-303 bean validation implementation is available
*/
protected static boolean isBeanValidationImplementationAvailable() {
if (beanValidationImplementationAvailable != null) {
return beanValidationImplementationAvailable;
}
try {
Class<?> validationClass = Class
.forName("javax.validation.Validation");
Method buildFactoryMethod = validationClass
.getMethod("buildDefaultValidatorFactory");
Object factory = buildFactoryMethod.invoke(null);
beanValidationImplementationAvailable = (factory != null);
} catch (Exception e) {
// no bean validation implementation available
beanValidationImplementationAvailable = false;
}
return beanValidationImplementationAvailable;
}
}

+ 0
- 19
src/com/vaadin/data/validator/BeanValidationValidator.java Ver arquivo

@@ -38,7 +38,6 @@ public class BeanValidationValidator implements Validator {
private static final long serialVersionUID = 1L;
private static ValidatorFactory factory;
private static Boolean implementationAvailable = null;
private transient javax.validation.Validator javaxBeanValidator;
private String propertyName;
@@ -171,22 +170,4 @@ public class BeanValidationValidator implements Validator {
return javaxBeanValidator;
}
/**
* Checks whether a bean validation implementation (e.g. Hibernate Validator
* or Apache Bean Validation) is available.
*
* @return true if a JSR-303 bean validation implementation is available
*/
public static boolean isImplementationAvailable() {
if (implementationAvailable == null) {
try {
getJavaxBeanValidatorFactory();
implementationAvailable = true;
} catch (Exception e) {
implementationAvailable = false;
}
}
return implementationAvailable;
}
}

Carregando…
Cancelar
Salvar