You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2010/11/22 20:39:09 UTC

svn commit: r1037853 - /myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/

Author: gpetracek
Date: Mon Nov 22 19:39:08 2010
New Revision: 1037853

URL: http://svn.apache.org/viewvc?rev=1037853&view=rev
Log:
EXTVAL-100 config for the bean validation module

Added:
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/DefaultExtValBeanValidationModuleConfiguration.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationModuleConfiguration.java
Modified:
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java

Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/DefaultExtValBeanValidationModuleConfiguration.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/DefaultExtValBeanValidationModuleConfiguration.java?rev=1037853&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/DefaultExtValBeanValidationModuleConfiguration.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/DefaultExtValBeanValidationModuleConfiguration.java Mon Nov 22 19:39:08 2010
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.beanval;
+
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
+
+import javax.validation.ValidatorFactory;
+
+/**
+ * @author Gerhard Petracek
+ */
+public class DefaultExtValBeanValidationModuleConfiguration extends ExtValBeanValidationModuleConfiguration
+{
+    public ValidatorFactory customValidatorFactory()
+    {
+        Object factory = ExtValContext.getContext().getGlobalProperty(ValidatorFactory.class.getName());
+
+        if(factory instanceof ValidatorFactory)
+        {
+            return (ValidatorFactory)factory;
+        }
+
+        return null;
+    }
+
+    @Override
+    public ExtValBeanValidationContext customExtValBeanValidationContext()
+    {
+        Object context = ExtValContext.getContext().getGlobalProperty(ExtValBeanValidationContext.class.getName());
+
+        if(context instanceof ExtValBeanValidationContext)
+        {
+            return (ExtValBeanValidationContext)context;
+        }
+
+        return null;
+    }
+}

Modified: myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java?rev=1037853&r1=1037852&r2=1037853&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java Mon Nov 22 19:39:08 2010
@@ -29,7 +29,6 @@ import org.apache.myfaces.extensions.val
 import org.apache.myfaces.extensions.validator.core.validation.message.resolver.MessageResolver;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
 import org.apache.myfaces.extensions.validator.core.storage.GroupStorage;
-import org.apache.myfaces.extensions.validator.core.ExtValContext;
 import org.apache.myfaces.extensions.validator.core.JsfProjectStage;
 import org.apache.myfaces.extensions.validator.util.ExtValUtils;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
@@ -53,6 +52,8 @@ public class ExtValBeanValidationContext
 
     private static final String KEY = ExtValBeanValidationContext.class.getName() + ":KEY";
 
+    protected ValidatorFactory validatorFactory;
+
     protected MessageInterpolator defaultMessageInterpolator;
 
     protected MessageResolver messageResolver;
@@ -88,7 +89,12 @@ public class ExtValBeanValidationContext
 
         if(currentContext == null)
         {
-            currentContext = new ExtValBeanValidationContext();
+            currentContext = ExtValBeanValidationModuleConfiguration.get().customExtValBeanValidationContext();
+
+            if(currentContext == null)
+            {
+                currentContext = new ExtValBeanValidationContext();
+            }
             requestMap.put(KEY, currentContext);
         }
 
@@ -97,18 +103,23 @@ public class ExtValBeanValidationContext
 
     public ValidatorFactory getValidatorFactory()
     {
-        Object validatorFactory = ExtValContext.getContext().getGlobalProperty(ValidatorFactory.class.getName());
-
-        if(validatorFactory instanceof ValidatorFactory)
+        if(this.validatorFactory != null)
         {
-            return (ValidatorFactory)validatorFactory;
+            return this.validatorFactory;
         }
 
-        if(this.developmentMode)
+        this.validatorFactory = ExtValBeanValidationModuleConfiguration.get().customValidatorFactory();
+
+        if(this.validatorFactory == null)
         {
-            this.logger.warning("fallback to the default bv validator factory");
+            if(this.developmentMode)
+            {
+                this.logger.warning("fallback to the default bv validator factory");
+            }
+            this.validatorFactory = BeanValidationUtils.getDefaultValidatorFactory();
         }
-        return BeanValidationUtils.getDefaultValidatorFactory();
+
+        return this.validatorFactory;
     }
 
     public MessageInterpolator getMessageInterpolator()

Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationModuleConfiguration.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationModuleConfiguration.java?rev=1037853&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationModuleConfiguration.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationModuleConfiguration.java Mon Nov 22 19:39:08 2010
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.beanval;
+
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.ExtValModuleConfiguration;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+
+import javax.validation.ValidatorFactory;
+import java.util.logging.Logger;
+
+/**
+ * ExtVal Core Module configuration.
+ * 'custom' as prefix is used for 'optional' configurations. That means
+ * if a method returns null ExtVal uses a different approach to find an implementation e.g. via a naming convention
+ * -> all other methods aren't allowed to return null if there is no additional rule.
+ *
+ * @author Gerhard Petracek
+ * @since r4
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public abstract class ExtValBeanValidationModuleConfiguration implements ExtValModuleConfiguration
+{
+    private static ExtValContext extValContext = null;
+
+    private static final Logger LOGGER = Logger.getLogger(ExtValBeanValidationModuleConfiguration.class.getName());
+
+    private static final String MISSING_MODULE_CONFIG_MESSAGE =
+            "no config for " + ExtValBeanValidationModuleConfiguration.class.getName() + " found. " +
+            "maybe the call of ExtValBeanValidationModuleConfiguration#get" +
+            " is triggered before the registration process. the default config gets used.";
+
+    protected ExtValBeanValidationModuleConfiguration()
+    {
+    }
+
+    /**
+     * Don't access ExtValContext during initialization of the class. E.g. OpenWebBeans initializes all classes during
+     * startup of the WebContainer.
+     * ({@link org.apache.myfaces.extensions.validator.core.ExtValContext}
+     * constructor tries to access Web.xml parameters through
+     * {@link javax.faces.context.FacesContext} which isn't available during the classpath-scanning.)
+     *
+     * @return The ExtValContext
+     */
+    private static ExtValContext getExtValContext()
+    {
+        if (extValContext == null)
+        {
+            extValContext = ExtValContext.getContext();
+        }
+        return extValContext;
+    }
+
+    /**
+     * Returns the configuration for the core-module stored in the context.
+     * If this doesn't exists (usually a startup-listener registers a (custom) implementation),
+     * it returns a new instance of the default implementation.
+     *
+     * @return The active ExtVal Core Module Configuration
+     */
+    public static ExtValBeanValidationModuleConfiguration get()
+    {
+        ExtValBeanValidationModuleConfiguration moduleConfig =
+                getExtValContext().getModuleConfiguration(ExtValBeanValidationModuleConfiguration.class);
+
+        if(moduleConfig == null)
+        {
+            LOGGER.fine(MISSING_MODULE_CONFIG_MESSAGE);
+        }
+        return moduleConfig != null ? moduleConfig : new DefaultExtValBeanValidationModuleConfiguration();
+    }
+
+    /**
+     * Sets a new configuration for the core-module
+     *
+     * @param config The new configuration for the core-module
+     * @param forceOverride use true to replace an existing configuration
+     * @return true if the new config was registered successfully
+     */
+    @UsageInformation(UsageCategory.INTERNAL)
+    public static boolean use(ExtValBeanValidationModuleConfiguration config, boolean forceOverride)
+    {
+        return getExtValContext()
+                .addModuleConfiguration(ExtValBeanValidationModuleConfiguration.class, config, forceOverride);
+    }
+
+    /**
+     * Allows to customize the {@link ValidatorFactory}
+     *
+     * @return an instance of a custom {@link ValidatorFactory}, null otherwise
+     */
+    public abstract ValidatorFactory customValidatorFactory();
+
+    /**
+     * Allows to customize the {@link ExtValBeanValidationContext}
+     * 
+     * @return an instance of a custom {@link ExtValBeanValidationContext}, null otherwise
+     */
+    public abstract ExtValBeanValidationContext customExtValBeanValidationContext();
+}