]> source.dussan.org Git - vaadin-framework.git/commitdiff
Move bean validation implementation availability check to
authorHenri Sara <hesara@vaadin.com>
Thu, 22 Dec 2011 10:53:52 +0000 (12:53 +0200)
committerHenri Sara <hesara@vaadin.com>
Thu, 22 Dec 2011 10:57:24 +0000 (12:57 +0200)
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.

src/com/vaadin/data/fieldbinder/BeanFieldGroup.java
src/com/vaadin/data/validator/BeanValidationValidator.java

index bd4b519a95c3ca5088b6d7dd035069f17e351e75..ab1e1a5ab2cd3fa74fc7651c6c2d02f24fbac47b 100644 (file)
@@ -3,6 +3,8 @@
  */\r
 package com.vaadin.data.fieldbinder;\r
 \r
+import java.lang.reflect.Method;\r
+\r
 import com.vaadin.data.Item;\r
 import com.vaadin.data.util.BeanItem;\r
 import com.vaadin.data.validator.BeanValidationValidator;\r
@@ -12,6 +14,8 @@ public class BeanFieldGroup<T> extends FieldGroup {
 \r
     private Class<T> beanType;\r
 \r
+    private static Boolean beanValidationImplementationAvailable = null;\r
+\r
     public BeanFieldGroup(Class<T> beanType) {\r
         this.beanType = beanType;\r
     }\r
@@ -115,7 +119,7 @@ public class BeanFieldGroup<T> extends FieldGroup {
     protected void configureField(Field<?> field) {\r
         super.configureField(field);\r
         // Add Bean validators if there are annotations\r
-        if (BeanValidationValidator.isImplementationAvailable()) {\r
+        if (isBeanValidationImplementationAvailable()) {\r
             BeanValidationValidator validator = new BeanValidationValidator(\r
                     beanType, getPropertyId(field).toString());\r
             field.addValidator(validator);\r
@@ -125,4 +129,29 @@ public class BeanFieldGroup<T> extends FieldGroup {
         }\r
     }\r
 \r
+    /**\r
+     * Checks whether a bean validation implementation (e.g. Hibernate Validator\r
+     * or Apache Bean Validation) is available.\r
+     * \r
+     * TODO move this method to some more generic location\r
+     * \r
+     * @return true if a JSR-303 bean validation implementation is available\r
+     */\r
+    protected static boolean isBeanValidationImplementationAvailable() {\r
+        if (beanValidationImplementationAvailable != null) {\r
+            return beanValidationImplementationAvailable;\r
+        }\r
+        try {\r
+            Class<?> validationClass = Class\r
+                    .forName("javax.validation.Validation");\r
+            Method buildFactoryMethod = validationClass\r
+                    .getMethod("buildDefaultValidatorFactory");\r
+            Object factory = buildFactoryMethod.invoke(null);\r
+            beanValidationImplementationAvailable = (factory != null);\r
+        } catch (Exception e) {\r
+            // no bean validation implementation available\r
+            beanValidationImplementationAvailable = false;\r
+        }\r
+        return beanValidationImplementationAvailable;\r
+    }\r
 }
\ No newline at end of file
index 94f9fe28d44f9ec7980ff378606e98a9d79bac40..90f330c11d47fb0806e8d502265b646628721cc0 100644 (file)
@@ -38,7 +38,6 @@ public class BeanValidationValidator implements Validator {
 \r
     private static final long serialVersionUID = 1L;\r
     private static ValidatorFactory factory;\r
-    private static Boolean implementationAvailable = null;\r
 \r
     private transient javax.validation.Validator javaxBeanValidator;\r
     private String propertyName;\r
@@ -171,22 +170,4 @@ public class BeanValidationValidator implements Validator {
         return javaxBeanValidator;\r
     }\r
 \r
-    /**\r
-     * Checks whether a bean validation implementation (e.g. Hibernate Validator\r
-     * or Apache Bean Validation) is available.\r
-     * \r
-     * @return true if a JSR-303 bean validation implementation is available\r
-     */\r
-    public static boolean isImplementationAvailable() {\r
-        if (implementationAvailable == null) {\r
-            try {\r
-                getJavaxBeanValidatorFactory();\r
-                implementationAvailable = true;\r
-            } catch (Exception e) {\r
-                implementationAvailable = false;\r
-            }\r
-        }\r
-        return implementationAvailable;\r
-    }\r
-\r
 }
\ No newline at end of file