EXTVAL-100 sync with branch
git-svn-id: https://svn.apache.org/repos/asf/myfaces/extensions/validator/trunk@964028 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/DefaultExtValTrinidadSupportModuleConfiguration.java b/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/DefaultExtValTrinidadSupportModuleConfiguration.java
new file mode 100644
index 0000000..bb85a3a
--- /dev/null
+++ b/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/DefaultExtValTrinidadSupportModuleConfiguration.java
@@ -0,0 +1,49 @@
+/*
+ * 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.trinidad;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+/**
+ * @author Gerhard Petracek
+ * @since r4
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public class DefaultExtValTrinidadSupportModuleConfiguration extends ExtValTrinidadSupportModuleConfiguration
+{
+ /*
+ * web.xml config
+ */
+
+ public boolean deactivateClientSideValidation()
+ {
+ return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_CLIENT_SIDE_TRINIDAD_VALIDATION);
+ }
+
+ public boolean deactivateCoreOutputLabelInitialization()
+ {
+ return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_TRINIDAD_CORE_OUTPUT_LABEL_INITIALIZATION);
+ }
+
+ public boolean deactivateValidationExceptionInterceptor()
+ {
+ return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_TRINIDAD_VALIDATION_EXCEPTION_INTERCEPTOR);
+ }
+}
diff --git a/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/ExtValTrinidadSupportModuleConfiguration.java b/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/ExtValTrinidadSupportModuleConfiguration.java
new file mode 100644
index 0000000..60f574b
--- /dev/null
+++ b/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/ExtValTrinidadSupportModuleConfiguration.java
@@ -0,0 +1,60 @@
+/*
+ * 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.trinidad;
+
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.ExtValModuleConfiguration;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+/**
+ * @author Gerhard Petracek
+ * @since r4
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public abstract class ExtValTrinidadSupportModuleConfiguration implements ExtValModuleConfiguration
+{
+ private static ExtValContext extValContext = ExtValContext.getContext();
+
+ protected ExtValTrinidadSupportModuleConfiguration()
+ {
+ }
+
+ public static ExtValTrinidadSupportModuleConfiguration get()
+ {
+ return extValContext.getModuleConfiguration(ExtValTrinidadSupportModuleConfiguration.class);
+ }
+
+ @UsageInformation(UsageCategory.INTERNAL)
+ public static boolean use(ExtValTrinidadSupportModuleConfiguration config, boolean forceOverride)
+ {
+ return extValContext.addModuleConfiguration(
+ ExtValTrinidadSupportModuleConfiguration.class, config, forceOverride);
+ }
+
+ /*
+ * web.xml config
+ */
+
+ public abstract boolean deactivateClientSideValidation();
+
+ public abstract boolean deactivateCoreOutputLabelInitialization();
+
+ public abstract boolean deactivateValidationExceptionInterceptor();
+}
diff --git a/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/WebXmlParameter.java b/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/WebXmlParameter.java
index 4e0cb74..6ba4033 100644
--- a/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/WebXmlParameter.java
+++ b/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/WebXmlParameter.java
@@ -29,7 +29,7 @@
* @since 1.x.1
*/
@UsageInformation(UsageCategory.INTERNAL)
-public interface WebXmlParameter
+interface WebXmlParameter
{
/*
* deactivate
diff --git a/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/startup/TrinidadModuleStartupListener.java b/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/startup/TrinidadModuleStartupListener.java
index 54b756b..b1d75a0 100644
--- a/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/startup/TrinidadModuleStartupListener.java
+++ b/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/startup/TrinidadModuleStartupListener.java
@@ -20,12 +20,14 @@
import org.apache.myfaces.extensions.validator.core.startup.AbstractStartupListener;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.core.storage.StorageManagerHolder;
import org.apache.myfaces.extensions.validator.core.renderkit.AbstractRenderKitWrapperFactory;
import org.apache.myfaces.extensions.validator.core.renderkit.ExtValRendererProxy;
import org.apache.myfaces.extensions.validator.core.factory.FactoryNames;
import org.apache.myfaces.extensions.validator.trinidad.initializer.component.TrinidadComponentInitializer;
-import org.apache.myfaces.extensions.validator.trinidad.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.trinidad.ExtValTrinidadSupportModuleConfiguration;
+import org.apache.myfaces.extensions.validator.trinidad.DefaultExtValTrinidadSupportModuleConfiguration;
import org.apache.myfaces.extensions.validator.trinidad.storage.TrinidadClientValidatorStorage;
import org.apache.myfaces.extensions.validator.trinidad.storage.DefaultClientValidatorStorageManager;
import org.apache.myfaces.extensions.validator.trinidad.validation.message.TrinidadFacesMessageFactory;
@@ -47,8 +49,15 @@
{
private static final long serialVersionUID = -8034089244903966999L;
+ protected void initModuleConfig()
+ {
+ ExtValTrinidadSupportModuleConfiguration.use(new DefaultExtValTrinidadSupportModuleConfiguration(), false);
+ }
+
protected void init()
{
+ initModuleConfig();
+
deactivateDefaultExtValRenderKitWrapperFactory();
initClientSideValidationSupport();
@@ -82,7 +91,7 @@
private void initClientSideValidationSupport()
{
- if(isClientSideValidationSupportEnabled(WebXmlParameter.DEACTIVATE_CLIENT_SIDE_TRINIDAD_VALIDATION))
+ if(!ExtValTrinidadSupportModuleConfiguration.get().deactivateClientSideValidation())
{
ExtValContext.getContext().addComponentInitializer(new TrinidadComponentInitializer());
}
@@ -90,7 +99,7 @@
private void initLabelInitializationSupport()
{
- if(isLabelInitializationEnabled(WebXmlParameter.DEACTIVATE_TRINIDAD_CORE_OUTPUT_LABEL_INITIALIZATION))
+ if(!ExtValTrinidadSupportModuleConfiguration.get().deactivateCoreOutputLabelInitialization())
{
ExtValContext.getContext().registerRendererInterceptor(new TrinidadRendererInterceptor());
}
@@ -98,7 +107,7 @@
private void initValidationExceptionInterception()
{
- if(useValidationExceptionInterception(WebXmlParameter.DEACTIVATE_TRINIDAD_VALIDATION_EXCEPTION_INTERCEPTOR))
+ if(!ExtValTrinidadSupportModuleConfiguration.get().deactivateValidationExceptionInterceptor())
{
ExtValContext.getContext().addValidationExceptionInterceptor(new TrinidadValidationExceptionInterceptor());
}
@@ -131,22 +140,6 @@
new DefaultClientValidatorStorageManager(), false);
}
- private boolean isLabelInitializationEnabled(String deactivateInitCoreOutputLabel)
- {
- return deactivateInitCoreOutputLabel == null || !deactivateInitCoreOutputLabel.equalsIgnoreCase("true");
- }
-
- private boolean isClientSideValidationSupportEnabled(String deactivateClientSideValidation)
- {
- return deactivateClientSideValidation == null || !deactivateClientSideValidation.equalsIgnoreCase("true");
- }
-
- private boolean useValidationExceptionInterception(String deactivateTrinidadValidationExceptionInterceptor)
- {
- return deactivateTrinidadValidationExceptionInterceptor == null ||
- !deactivateTrinidadValidationExceptionInterceptor.equalsIgnoreCase("true");
- }
-
protected void initRequiredInitialization()
{
if(!isRequiredInitializationDeactivated())
@@ -160,7 +153,6 @@
private boolean isRequiredInitializationDeactivated()
{
- return "false".equalsIgnoreCase(
- org.apache.myfaces.extensions.validator.core.WebXmlParameter.ACTIVATE_REQUIRED_INITIALIZATION);
+ return !ExtValCoreConfiguration.get().activateRequiredInitialization();
}
}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/ExtValInformation.java b/core/src/main/java/org/apache/myfaces/extensions/validator/ExtValInformation.java
index 77d5d1c..6e5b513 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/ExtValInformation.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/ExtValInformation.java
@@ -31,7 +31,8 @@
@UsageInformation(UsageCategory.INTERNAL)
public interface ExtValInformation
{
- static final String EXTENSIONS_VALIDATOR_BASE_PACKAGE_NAME = ExtValInformation.class.getPackage().getName();
- static final String WEBXML_PARAM_PREFIX = ExtValInformation.class.getPackage().getName();
+ // getPackage isn't working with a custom class loader
+ static final String EXTENSIONS_VALIDATOR_BASE_PACKAGE_NAME = ClassUtils.getPackageName(ExtValInformation.class);
+ static final String WEBXML_PARAM_PREFIX = ClassUtils.getPackageName(ExtValInformation.class);
static final String VERSION = ClassUtils.getJarVersion(ExtValInformation.class);
}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/DefaultExtValCoreConfiguration.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/DefaultExtValCoreConfiguration.java
new file mode 100644
index 0000000..adb41cf
--- /dev/null
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/DefaultExtValCoreConfiguration.java
@@ -0,0 +1,271 @@
+/*
+ * 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.core;
+
+import org.apache.myfaces.extensions.validator.core.proxy.ProxyHelper;
+import org.apache.myfaces.extensions.validator.core.proxy.DefaultProxyHelper;
+import org.apache.myfaces.extensions.validator.core.renderkit.ExtValRendererProxy;
+import org.apache.myfaces.extensions.validator.core.validation.ConstraintSource;
+import org.apache.myfaces.extensions.validator.core.validation.IgnoreConstraintSource;
+import org.apache.myfaces.extensions.validator.core.validation.TargetProperty;
+import org.apache.myfaces.extensions.validator.core.validation.TargetPropertyId;
+import org.apache.myfaces.extensions.validator.core.validation.parameter.DisableClientSideValidation;
+import org.apache.myfaces.extensions.validator.core.validation.parameter.ValidationParameter;
+import org.apache.myfaces.extensions.validator.core.validation.parameter.ViolationSeverity;
+import org.apache.myfaces.extensions.validator.util.ClassUtils;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * @author Gerhard Petracek
+ * @since r4
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public class DefaultExtValCoreConfiguration extends ExtValCoreConfiguration
+{
+ public String customMessageBundleBaseName()
+ {
+ return WebXmlParameter.CUSTOM_MESSAGE_BUNDLE;
+ }
+
+ public String customBasePackage()
+ {
+ return WebXmlParameter.CUSTOM_BASE_PACKAGE;
+ }
+
+ public String customInformationProviderBeanClassName()
+ {
+ return WebXmlParameter.CUSTOM_INFORMATION_PROVIDER_BEAN;
+ }
+
+ public String customComponentMetaDataExtractorClassName()
+ {
+ return WebXmlParameter.CUSTOM_COMPONENT_META_DATA_EXTRACTOR;
+ }
+
+ public String customValidationParameterExtractorClassName()
+ {
+ return WebXmlParameter.CUSTOM_VALIDATION_PARAMETER_EXTRACTOR;
+ }
+
+ public String customStaticValidationStrategyMappingSource()
+ {
+ return WebXmlParameter.CUSTOM_STATIC_VALIDATION_STRATEGY_MAPPING;
+ }
+
+ public String customComponentInitializerClassName()
+ {
+ return WebXmlParameter.CUSTOM_COMPONENT_INITIALIZER;
+ }
+
+ public String customValidationExceptionInterceptorClassName()
+ {
+ return WebXmlParameter.CUSTOM_VALIDATION_EXCEPTION_INTERCEPTOR;
+ }
+
+ public String customPropertyValidationInterceptorClassName()
+ {
+ return WebXmlParameter.CUSTOM_PROPERTY_VALIDATION_INTERCEPTOR;
+ }
+
+ public String customMetaDataExtractionInterceptorClassName()
+ {
+ return WebXmlParameter.CUSTOM_META_DATA_EXTRACTION_INTERCEPTOR;
+ }
+
+ public ProxyHelper proxyHelper()
+ {
+ String customProxyHelperClassName = WebXmlParameter.CUSTOM_PROXY_HELPER;
+
+ if (customProxyHelperClassName != null && !"".equals(customProxyHelperClassName))
+ {
+ return (ProxyHelper) ClassUtils.tryToInstantiateClassForName(customProxyHelperClassName);
+ }
+
+ return new DefaultProxyHelper();
+ }
+
+ public ProjectStageResolver projectStageResolver()
+ {
+ return new DefaultProjectStageResolver();
+ }
+
+ public Class<? extends ExtValRendererProxy> rendererProxy()
+ {
+ String proxyClassName = (String) ExtValContext.getContext().getGlobalProperty(ExtValRendererProxy.KEY);
+
+ if (proxyClassName != null && !proxyClassName.endsWith(getClass().getName()))
+ {
+ Class<? extends ExtValRendererProxy> targetClass = ClassUtils.tryToLoadClassForName(proxyClassName);
+
+ if (targetClass == null)
+ {
+ throw new IllegalStateException("a custom invalid renderer proxy is configured: " + proxyClassName);
+ }
+
+ return targetClass;
+ }
+
+ return null;
+ }
+
+ public Class violationSeverity()
+ {
+ return ViolationSeverity.class;
+ }
+
+ public String customValidationStrategyToMessageResolverNameMapperClassName()
+ {
+ return WebXmlParameter.CUSTOM_VALIDATION_STRATEGY_TO_MESSAGE_RESOLVER_NAME_MAPPER;
+ }
+
+ public String customMetaDataToValidationStrategyNameMapperClassName()
+ {
+ return WebXmlParameter.CUSTOM_META_DATA_TO_VALIDATION_STRATEGY_NAME_MAPPER;
+ }
+
+ public String customValidationStrategyToMetaDataTransformerNameMapperClassName()
+ {
+ return WebXmlParameter.CUSTOM_VALIDATION_STRATEGY_TO_META_DATA_TRANSFORMER_NAME_MAPPER;
+ }
+
+ public String customMetaDataStorageFilterClassName()
+ {
+ return WebXmlParameter.CUSTOM_META_DATA_STORAGE_FILTER;
+ }
+
+ public String customValidationStrategyFactoryClassName()
+ {
+ return WebXmlParameter.CUSTOM_VALIDATION_STRATEGY_FACTORY;
+ }
+
+ public String customMessageResolverFactoryClassName()
+ {
+ return WebXmlParameter.CUSTOM_MESSAGE_RESOLVER_FACTORY;
+ }
+
+ public String customComponentMetaDataExtractorFactoryClassName()
+ {
+ return WebXmlParameter.CUSTOM_COMPONENT_META_DATA_EXTRACTOR_FACTORY;
+ }
+
+ public String customValidationParameterExtractorFactoryClassName()
+ {
+ return WebXmlParameter.CUSTOM_VALIDATION_PARAMETER_EXTRACTOR_FACTORY;
+ }
+
+ public String customValidationParameterFactoryClassName()
+ {
+ return WebXmlParameter.CUSTOM_VALIDATION_PARAMETER_FACTORY;
+ }
+
+ public String customMetaDataTransformerFactoryClassName()
+ {
+ return WebXmlParameter.CUSTOM_META_DATA_TRANSFORMER_FACTORY;
+ }
+
+ public String customStorageManagerFactoryClassName()
+ {
+ return WebXmlParameter.CUSTOM_STORAGE_MANAGER_FACTORY;
+ }
+
+ public String customFacesMessageFactoryClassName()
+ {
+ return WebXmlParameter.CUSTOM_FACES_MESSAGE_FACTORY;
+ }
+
+ public Class<? extends Annotation> constraintSourceAnnotation()
+ {
+ return ConstraintSource.class;
+ }
+
+ public Class<? extends Annotation> ignoreConstraintSourceAnnotation()
+ {
+ return IgnoreConstraintSource.class;
+ }
+
+ public Class<? extends Annotation> targetPropertyAnnotation()
+ {
+ return TargetProperty.class;
+ }
+
+ public Class<? extends Annotation> targetPropertyIdAnnotation()
+ {
+ return TargetPropertyId.class;
+ }
+
+ public Class<? extends ValidationParameter> disableClientSideValidationValidationParameter()
+ {
+ return DisableClientSideValidation.class;
+ }
+
+ public boolean activateRequiredInitialization()
+ {
+ return WebXmlParameter.ACTIVATE_REQUIRED_INITIALIZATION != null &&
+ "true".equalsIgnoreCase(WebXmlParameter.ACTIVATE_REQUIRED_INITIALIZATION.trim());
+ }
+
+ public boolean deactivateDefaultConvention()
+ {
+ return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_DEFAULT_CONVENTION);
+ }
+
+ public boolean deactivateDefaultNameMappers()
+ {
+ String deactivateDefaultNameMappers = WebXmlParameter.DEACTIVATE_DEFAULT_NAME_MAPPERS;
+ return deactivateDefaultNameMappers != null && deactivateDefaultNameMappers.trim().equalsIgnoreCase("true");
+ }
+
+ public boolean deactivateElResolver()
+ {
+ return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_EL_RESOLVER);
+ }
+
+ public boolean deactivateComponentInitialization()
+ {
+ return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_COMPONENT_INITIALIZATION);
+ }
+
+ public boolean deactivateValidationParameters()
+ {
+ return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_VALIDATION_PARAMETERS);
+ }
+
+ public boolean deactivateRenderKitFactory()
+ {
+ return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_RENDER_KIT_FACTORY);
+ }
+
+ public boolean deactivateRequiredAttributeSupport()
+ {
+ return activateRequiredInitialization();
+ }
+
+ public boolean interpretEmptyStringSubmittedValuesAsNull()
+ {
+ return !"false".equalsIgnoreCase(WebXmlParameter.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL);
+ }
+
+ public boolean validateEmptyFields()
+ {
+ return !"false".equalsIgnoreCase(WebXmlParameter.VALIDATE_EMPTY_FIELDS);
+ }
+}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
index 7467e8e..3f16820 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
@@ -46,6 +46,8 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
+import static org.apache.myfaces.extensions.validator.util.WebXmlUtils.getInitParameter;
+
/**
* @author Gerhard Petracek
* @since 1.x.1
@@ -61,6 +63,9 @@
private static final String CUSTOM_EXTVAL_CONTEXT_CLASS_NAME =
ExtValContext.class.getName().replace(".core.", ".custom.");
+ private static final String CUSTOM_EXTVAL_MODULE_CONFIGURATION_RESOLVER_CLASS_NAME =
+ ExtValModuleConfigurationResolver.class.getName().replace(".core.", ".custom.");
+
private ViolationSeverityInterpreter violationSeverityInterpreter;
private FactoryFinder factoryFinder = DefaultFactoryFinder.getInstance();
private Map<String, RendererInterceptor> rendererInterceptors =
@@ -73,6 +78,11 @@
private Map<String, Object> globalProperties = new HashMap<String, Object>();
+ private Map<Class<? extends ExtValModuleConfiguration>, ExtValModuleConfiguration> extValConfig =
+ new ConcurrentHashMap<Class<? extends ExtValModuleConfiguration>, ExtValModuleConfiguration>();
+
+ private ExtValModuleConfigurationResolver defaultModuleConfigurationResolver;
+
private Map<StaticConfigurationNames, List<StaticConfiguration<String, String>>> staticConfigMap
= new HashMap<StaticConfigurationNames, List<StaticConfiguration<String, String>>>();
@@ -83,6 +93,30 @@
{
this.contextHelper = new ExtValContextInternals();
this.invocationOrderAwareContextHelper = new ExtValContextInvocationOrderAwareInternals(this.contextHelper);
+
+ Object customExtValModuleConfigurationResolver =
+ ClassUtils.tryToInstantiateClassForName(CUSTOM_EXTVAL_MODULE_CONFIGURATION_RESOLVER_CLASS_NAME);
+
+ if(customExtValModuleConfigurationResolver instanceof ExtValModuleConfigurationResolver)
+ {
+ this.defaultModuleConfigurationResolver =
+ (ExtValModuleConfigurationResolver)customExtValModuleConfigurationResolver;
+ }
+
+ String customExtValModuleConfigurationResolverClassName =
+ getInitParameter(null, ExtValModuleConfigurationResolver.class.getName());
+
+ if(customExtValModuleConfigurationResolverClassName != null)
+ {
+ customExtValModuleConfigurationResolver =
+ ClassUtils.tryToInstantiateClassForName(customExtValModuleConfigurationResolverClassName);
+
+ if(customExtValModuleConfigurationResolver instanceof ExtValModuleConfigurationResolver)
+ {
+ this.defaultModuleConfigurationResolver =
+ (ExtValModuleConfigurationResolver)customExtValModuleConfigurationResolver;
+ }
+ }
}
public static ExtValContext getContext()
@@ -408,4 +442,82 @@
{
return this.globalProperties.get(name);
}
+
+ public <T extends ExtValModuleConfiguration> T getModuleConfiguration(Class<T> targetType)
+ {
+ ExtValModuleConfiguration result = this.extValConfig.get(targetType);
+
+ //noinspection unchecked
+ return (T)result;
+ }
+
+ public boolean addModuleConfiguration(Class<? extends ExtValModuleConfiguration> key,
+ ExtValModuleConfiguration extValConfig)
+ {
+ return addModuleConfiguration(key, extValConfig, true);
+ }
+
+ public boolean addModuleConfiguration(Class<? extends ExtValModuleConfiguration> key,
+ ExtValModuleConfiguration config,
+ boolean forceOverride)
+ {
+ if (this.extValConfig.containsKey(key))
+ {
+ if (!forceOverride)
+ {
+ return false;
+ }
+
+ this.logger.info("override config for key '" + config.getClass() + "'");
+ }
+
+ //anonymous class are only supported for test-cases and
+ //there we don't need a custom config defined in the web.xml
+ if(!config.getClass().isAnonymousClass())
+ {
+ config = tryToLoadCustomConfigImplementation(config);
+ }
+
+ this.extValConfig.put(key, config);
+
+ if(JsfProjectStage.is(JsfProjectStage.Development))
+ {
+ this.logger.info("config for key [" + config.getClass() + "] added");
+ }
+
+ return true;
+ }
+
+ private ExtValModuleConfiguration tryToLoadCustomConfigImplementation(ExtValModuleConfiguration config)
+ {
+
+ Class configClass = config.getClass().getSuperclass();
+
+ if(!ExtValModuleConfiguration.class.isAssignableFrom(configClass))
+ {
+ return config;
+ }
+
+ @SuppressWarnings({"unchecked"})
+ Class<? extends ExtValModuleConfiguration> configDefinitionClass =
+ (Class<? extends ExtValModuleConfiguration>)configClass;
+
+ if(this.defaultModuleConfigurationResolver != null)
+ {
+ config = this.defaultModuleConfigurationResolver.getCustomConfiguration(configDefinitionClass);
+ }
+
+ String customConfigClassName = getInitParameter(null, configDefinitionClass.getName());
+
+ if(customConfigClassName != null)
+ {
+ Object customConfig = ClassUtils.tryToInstantiateClassForName(customConfigClassName);
+
+ if(customConfig instanceof ExtValModuleConfiguration)
+ {
+ return (ExtValModuleConfiguration)customConfig;
+ }
+ }
+ return config;
+ }
}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContextInternals.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContextInternals.java
index d2cfd5c..a60ec25 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContextInternals.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContextInternals.java
@@ -39,15 +39,15 @@
{
boolean isComponentInitializationActivated()
{
- return !"true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_COMPONENT_INITIALIZATION);
+ return !ExtValCoreConfiguration.get().deactivateComponentInitialization();
}
@SuppressWarnings({"unchecked"})
- InformationProviderBean initInformationProviderBean(Map applicationMap)
+ synchronized InformationProviderBean initInformationProviderBean(Map applicationMap)
{
List<String> informationProviderBeanClassNames = new ArrayList<String>();
- informationProviderBeanClassNames.add(WebXmlParameter.CUSTOM_INFORMATION_PROVIDER_BEAN);
+ informationProviderBeanClassNames.add(ExtValCoreConfiguration.get().customInformationProviderBeanClassName());
informationProviderBeanClassNames.add(InformationProviderBean.CUSTOM_BEAN);
InformationProviderBean informationProviderBean;
@@ -72,7 +72,7 @@
}
@SuppressWarnings({"unchecked"})
- void tryToInitCustomConfiguredInformationProviderBeanClassName(Map applicationMap)
+ synchronized void tryToInitCustomConfiguredInformationProviderBeanClassName(Map applicationMap)
{
InformationProviderBean bean = (InformationProviderBean) ExtValUtils.getELHelper()
.getBean(InformationProviderBean.CUSTOM_BEAN.replace(".", "_"));
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContextInvocationOrderAwareInternals.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContextInvocationOrderAwareInternals.java
index 5071509..a9c700d 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContextInvocationOrderAwareInternals.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContextInvocationOrderAwareInternals.java
@@ -273,7 +273,7 @@
List<String> validationExceptionInterceptorClassNames = new ArrayList<String>();
validationExceptionInterceptorClassNames
- .add(WebXmlParameter.CUSTOM_VALIDATION_EXCEPTION_INTERCEPTOR);
+ .add(ExtValCoreConfiguration.get().customValidationExceptionInterceptorClassName());
validationExceptionInterceptorClassNames
.add(this.contextHelper.getInformationProviderBean().get(
CustomInformation.VALIDATION_EXCEPTION_INTERCEPTOR));
@@ -309,7 +309,7 @@
List<String> metaDataExtractionInterceptorClassNames = new ArrayList<String>();
metaDataExtractionInterceptorClassNames
- .add(WebXmlParameter.CUSTOM_META_DATA_EXTRACTION_INTERCEPTOR);
+ .add(ExtValCoreConfiguration.get().customMetaDataExtractionInterceptorClassName());
metaDataExtractionInterceptorClassNames
.add(this.contextHelper.getInformationProviderBean().get(
CustomInformation.META_DATA_EXTRACTION_INTERCEPTOR));
@@ -338,7 +338,7 @@
componentInitializers = new CopyOnWriteArrayList<ComponentInitializer>();
List<String> componentInitializerClassNames = new ArrayList<String>();
componentInitializerClassNames
- .add(WebXmlParameter.CUSTOM_COMPONENT_INITIALIZER);
+ .add(ExtValCoreConfiguration.get().customComponentInitializerClassName());
componentInitializerClassNames
.add(this.contextHelper.getInformationProviderBean().get(CustomInformation.COMPONENT_INITIALIZER));
@@ -372,7 +372,7 @@
List<String> validationInterceptorClassNames = new ArrayList<String>();
validationInterceptorClassNames
- .add(WebXmlParameter.CUSTOM_PROPERTY_VALIDATION_INTERCEPTOR);
+ .add(ExtValCoreConfiguration.get().customPropertyValidationInterceptorClassName());
validationInterceptorClassNames
.add(this.contextHelper.getInformationProviderBean().get(
CustomInformation.PROPERTY_VALIDATION_INTERCEPTOR));
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValCoreConfiguration.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValCoreConfiguration.java
new file mode 100644
index 0000000..2eccf12
--- /dev/null
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValCoreConfiguration.java
@@ -0,0 +1,188 @@
+/*
+ * 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.core;
+
+import org.apache.myfaces.extensions.validator.core.proxy.ProxyHelper;
+import org.apache.myfaces.extensions.validator.core.renderkit.ExtValRendererProxy;
+import org.apache.myfaces.extensions.validator.core.validation.parameter.ValidationParameter;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+import java.lang.annotation.Annotation;
+import java.util.logging.Logger;
+
+/**
+ * '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 ExtValCoreConfiguration implements ExtValModuleConfiguration
+{
+ private static ExtValContext extValContext = ExtValContext.getContext();
+
+ private static final Logger LOGGER = Logger.getLogger(ExtValCoreConfiguration.class.getName());
+
+ private static final String MISSING_MODULE_CONFIG_MESSAGE =
+ "no config for " + ExtValCoreConfiguration.class.getName() + " found. " +
+ "maybe the call of ExtValCoreConfig#get is triggered before the registration process." +
+ "the default config gets used.";
+
+ protected ExtValCoreConfiguration()
+ {
+ }
+
+ public static ExtValCoreConfiguration get()
+ {
+ ExtValCoreConfiguration moduleConfig = extValContext.getModuleConfiguration(ExtValCoreConfiguration.class);
+
+ if(moduleConfig == null)
+ {
+ LOGGER.fine(MISSING_MODULE_CONFIG_MESSAGE);
+ }
+ return moduleConfig != null ? moduleConfig : new DefaultExtValCoreConfiguration();
+ }
+
+ @UsageInformation(UsageCategory.INTERNAL)
+ public static boolean use(ExtValCoreConfiguration config, boolean forceOverride)
+ {
+ return extValContext.addModuleConfiguration(ExtValCoreConfiguration.class, config, forceOverride);
+ }
+
+ /*
+ * web.xml config
+ */
+ public abstract String customMessageBundleBaseName();
+
+ public abstract String customBasePackage();
+
+ public abstract String customInformationProviderBeanClassName();
+
+ public abstract String customComponentMetaDataExtractorClassName();
+
+ public abstract String customValidationParameterExtractorClassName();
+
+ public abstract String customStaticValidationStrategyMappingSource();
+
+ public abstract String customComponentInitializerClassName();
+
+ public abstract String customValidationExceptionInterceptorClassName();
+
+ public abstract String customPropertyValidationInterceptorClassName();
+
+ public abstract String customMetaDataExtractionInterceptorClassName();
+
+ /*
+ * others
+ */
+ public abstract ProxyHelper proxyHelper();
+
+ public abstract ProjectStageResolver projectStageResolver();
+
+ public abstract Class<? extends ExtValRendererProxy> rendererProxy();
+
+ /*
+ * ConstraintSource
+ */
+
+ public abstract Class<? extends Annotation> constraintSourceAnnotation();
+
+ public abstract Class<? extends Annotation> ignoreConstraintSourceAnnotation();
+
+ public abstract Class<? extends Annotation> targetPropertyAnnotation();
+
+ public abstract Class<? extends Annotation> targetPropertyIdAnnotation();
+
+ /*
+ * validation parameter
+ */
+
+ public abstract Class violationSeverity();
+
+ public abstract Class<? extends ValidationParameter> disableClientSideValidationValidationParameter();
+
+ /*
+ * name mapper
+ */
+ public abstract String customValidationStrategyToMessageResolverNameMapperClassName();
+
+ public abstract String customMetaDataToValidationStrategyNameMapperClassName();
+
+ public abstract String customValidationStrategyToMetaDataTransformerNameMapperClassName();
+
+ /*
+ * filter
+ */
+ public abstract String customMetaDataStorageFilterClassName();
+
+ /*
+ * factories
+ */
+ public abstract String customValidationStrategyFactoryClassName();
+
+ public abstract String customMessageResolverFactoryClassName();
+
+ public abstract String customComponentMetaDataExtractorFactoryClassName();
+
+ public abstract String customValidationParameterExtractorFactoryClassName();
+
+ public abstract String customValidationParameterFactoryClassName();
+
+ public abstract String customMetaDataTransformerFactoryClassName();
+
+ public abstract String customStorageManagerFactoryClassName();
+
+ public abstract String customFacesMessageFactoryClassName();
+
+ /*
+ * activate
+ */
+ public abstract boolean activateRequiredInitialization();
+
+ /*
+ * deactivate
+ */
+ //currently just used by AbstractValidationErrorMessageResolver
+ public abstract boolean deactivateDefaultConvention();
+
+ public abstract boolean deactivateDefaultNameMappers();
+
+ public abstract boolean deactivateElResolver();
+
+ public abstract boolean deactivateComponentInitialization();
+
+ public abstract boolean deactivateValidationParameters();
+
+ public abstract boolean deactivateRenderKitFactory();
+
+ //there is nothing like DEACTIVATE_DEFAULT_VALIDATION_INTERCEPTOR
+ //use ExtValContext.getContext().denyRendererInterceptor(...) within an extval-StartupListener
+
+ public abstract boolean deactivateRequiredAttributeSupport();
+
+ /*
+ * spec parameters
+ */
+ public abstract boolean interpretEmptyStringSubmittedValuesAsNull();
+
+ public abstract boolean validateEmptyFields();
+}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValModuleConfiguration.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValModuleConfiguration.java
new file mode 100644
index 0000000..993b6b1
--- /dev/null
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValModuleConfiguration.java
@@ -0,0 +1,31 @@
+/*
+ * 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.core;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+/**
+ * @author Gerhard Petracek
+ * @since r4
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public interface ExtValModuleConfiguration
+{
+}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValModuleConfigurationResolver.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValModuleConfigurationResolver.java
new file mode 100644
index 0000000..f658b40
--- /dev/null
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValModuleConfigurationResolver.java
@@ -0,0 +1,32 @@
+/*
+ * 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.core;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+/**
+ * @author Gerhard Petracek
+ * @since r4
+ */
+@UsageInformation({UsageCategory.API, UsageCategory.CUSTOMIZABLE})
+public interface ExtValModuleConfigurationResolver
+{
+ <T extends ExtValModuleConfiguration> ExtValModuleConfiguration getCustomConfiguration(Class<T> configType);
+}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java
index 6ccc001..b6d95fb 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java
@@ -19,11 +19,11 @@
package org.apache.myfaces.extensions.validator.core;
import org.apache.myfaces.extensions.validator.ExtValInformation;
+import org.apache.myfaces.extensions.validator.util.NullValueAwareConcurrentHashMap;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import java.util.Map;
-import java.util.HashMap;
import java.util.logging.Logger;
/**
@@ -55,11 +55,12 @@
applyCustomValues(this.customizableInfos);
}
- private Map<CustomInformation, String> customizableInfos = new HashMap<CustomInformation, String>();
+ private Map<CustomInformation, String> customizableInfos =
+ new NullValueAwareConcurrentHashMap<CustomInformation, String>(String.class);
private void setupCustomizableInformation()
{
- String basePackage = WebXmlParameter.CUSTOM_BASE_PACKAGE;
+ String basePackage = ExtValCoreConfiguration.get().customBasePackage();
if (basePackage == null)
{
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/ProjectStage.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ProjectStage.java
index 9ba444d..5899a1a 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/ProjectStage.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ProjectStage.java
@@ -56,12 +56,11 @@
private static ProjectStageName getCurrentProjectStage()
{
//set ProjectStageResolver to null to tweak the performance
- Object projectStageResolver = ExtValContext.getContext()
- .getGlobalProperty(ProjectStageResolver.class.getName());
+ ProjectStageResolver projectStageResolver = ExtValCoreConfiguration.get().projectStageResolver();
- if(projectStageResolver instanceof ProjectStageResolver)
+ if(projectStageResolver != null)
{
- return ((ProjectStageResolver)projectStageResolver).getCurrentProjectStage().getValue();
+ return (projectStageResolver).getCurrentProjectStage().getValue();
}
return ExtValUtils.getDefaultStageName();
}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
index 7931abe..99d4112 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
@@ -29,7 +29,7 @@
* @since 1.x.1
*/
@UsageInformation(UsageCategory.INTERNAL)
-public interface WebXmlParameter
+interface WebXmlParameter
{
/*
* misc
@@ -121,10 +121,6 @@
/*
* deactivate
*/
- @Deprecated
- static final String DEACTIVATE_RENDERKIT = WebXmlUtils
- .getInitParameter("DEACTIVATE_RENDERKIT");
-
//currently just used by AbstractValidationErrorMessageResolver
static final String DEACTIVATE_DEFAULT_CONVENTION = WebXmlUtils
.getInitParameter("DEACTIVATE_DEFAULT_CONVENTION");
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java
index 97ca749..52b03aa 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java
@@ -24,8 +24,8 @@
import org.apache.myfaces.extensions.validator.internal.Priority;
import org.apache.myfaces.extensions.validator.util.ReflectionUtils;
import org.apache.myfaces.extensions.validator.util.ProxyUtils;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.ExtValInformation;
import javax.el.ValueExpression;
@@ -54,7 +54,7 @@
@UsageInformation(UsageCategory.INTERNAL)
public class DefaultELHelper implements ELHelper
{
- private static final String DEACTIVATE_EL_RESOLVER = WebXmlParameter.DEACTIVATE_EL_RESOLVER;
+ private static final boolean DEACTIVATE_EL_RESOLVER = ExtValCoreConfiguration.get().deactivateElResolver();
protected final Logger logger = Logger.getLogger(getClass().getName());
@@ -143,7 +143,7 @@
public PropertyDetails getPropertyDetailsOfValueBinding(UIComponent uiComponent)
{
- if("true".equalsIgnoreCase(DEACTIVATE_EL_RESOLVER))
+ if(DEACTIVATE_EL_RESOLVER)
{
return getPropertyDetailsViaReflectionFallback(uiComponent);
}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/DefaultFactoryFinder.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/DefaultFactoryFinder.java
index d7038a1..e2d2097 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/DefaultFactoryFinder.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/DefaultFactoryFinder.java
@@ -23,9 +23,9 @@
import org.apache.myfaces.extensions.validator.internal.ToDo;
import org.apache.myfaces.extensions.validator.internal.Priority;
import org.apache.myfaces.extensions.validator.core.metadata.extractor.DefaultComponentMetaDataExtractorFactory;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.core.CustomInformation;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.core.storage.DefaultStorageManagerFactory;
import org.apache.myfaces.extensions.validator.core.el.DefaultELHelperFactory;
import org.apache.myfaces.extensions.validator.core.renderkit.DefaultRenderKitWrapperFactory;
@@ -140,7 +140,7 @@
List<String> metaDataExtractorFactoryClassNames = new ArrayList<String>();
- metaDataExtractorFactoryClassNames.add(WebXmlParameter.CUSTOM_COMPONENT_META_DATA_EXTRACTOR_FACTORY);
+ metaDataExtractorFactoryClassNames.add(getCoreConfig().customComponentMetaDataExtractorFactoryClassName());
metaDataExtractorFactoryClassNames
.add(ExtValContext.getContext().getInformationProviderBean()
.get(CustomInformation.COMPONENT_META_DATA_EXTRACTOR_FACTORY));
@@ -165,7 +165,7 @@
List<String> validationStrategyFactoryClassNames = new ArrayList<String>();
- validationStrategyFactoryClassNames.add(WebXmlParameter.CUSTOM_VALIDATION_STRATEGY_FACTORY);
+ validationStrategyFactoryClassNames.add(getCoreConfig().customValidationStrategyFactoryClassName());
validationStrategyFactoryClassNames
.add(ExtValContext.getContext().getInformationProviderBean()
.get(CustomInformation.VALIDATION_STRATEGY_FACTORY));
@@ -190,7 +190,7 @@
Object factory = null;
List<String> messageResolverFactoryClassNames = new ArrayList<String>();
- messageResolverFactoryClassNames.add(WebXmlParameter.CUSTOM_MESSAGE_RESOLVER_FACTORY);
+ messageResolverFactoryClassNames.add(getCoreConfig().customMessageResolverFactoryClassName());
messageResolverFactoryClassNames
.add(ExtValContext.getContext().getInformationProviderBean()
.get(CustomInformation.MESSAGE_RESOLVER_FACTORY));
@@ -216,7 +216,7 @@
Object factory = null;
List<String> metaDataTransformerFactoryClassNames = new ArrayList<String>();
- metaDataTransformerFactoryClassNames.add(WebXmlParameter.CUSTOM_META_DATA_TRANSFORMER_FACTORY );
+ metaDataTransformerFactoryClassNames.add(getCoreConfig().customMetaDataTransformerFactoryClassName());
metaDataTransformerFactoryClassNames
.add(ExtValContext.getContext().getInformationProviderBean()
.get(CustomInformation.META_DATA_TRANSFORMER_FACTORY));
@@ -247,7 +247,7 @@
List<String> facesMessageFactoryClassNames = new ArrayList<String>();
- facesMessageFactoryClassNames.add(WebXmlParameter.CUSTOM_FACES_MESSAGE_FACTORY);
+ facesMessageFactoryClassNames.add(getCoreConfig().customFacesMessageFactoryClassName());
facesMessageFactoryClassNames
.add(ExtValContext.getContext().getInformationProviderBean()
.get(CustomInformation.FACES_MESSAGE_FACTORY));
@@ -285,7 +285,7 @@
List<String> validationParameterExtractorFactoryClassNames = new ArrayList<String>();
validationParameterExtractorFactoryClassNames
- .add(WebXmlParameter.CUSTOM_VALIDATION_PARAMETER_EXTRACTOR_FACTORY);
+ .add(getCoreConfig().customValidationParameterExtractorFactoryClassName());
validationParameterExtractorFactoryClassNames
.add(ExtValContext.getContext().getInformationProviderBean()
.get(CustomInformation.VALIDATION_PARAMETER_EXTRACTOR_FACTORY));
@@ -310,7 +310,7 @@
List<String> storageManagerFactoryClassNames = new ArrayList<String>();
storageManagerFactoryClassNames
- .add(WebXmlParameter.CUSTOM_STORAGE_MANAGER_FACTORY);
+ .add(getCoreConfig().customStorageManagerFactoryClassName());
storageManagerFactoryClassNames
.add(ExtValContext.getContext().getInformationProviderBean()
.get(CustomInformation.STORAGE_MANAGER_FACTORY));
@@ -335,7 +335,7 @@
List<String> validationParameterFactoryClassNames = new ArrayList<String>();
validationParameterFactoryClassNames
- .add(WebXmlParameter.CUSTOM_VALIDATION_PARAMETER_FACTORY);
+ .add(getCoreConfig().customValidationParameterFactoryClassName());
validationParameterFactoryClassNames
.add(ExtValContext.getContext().getInformationProviderBean()
.get(CustomInformation.VALIDATION_PARAMETER_FACTORY));
@@ -353,4 +353,8 @@
return factory;
}
+ private ExtValCoreConfiguration getCoreConfig()
+ {
+ return ExtValCoreConfiguration.get();
+ }
}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java
index 547b271..b95e8e3 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java
@@ -21,8 +21,8 @@
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
import org.apache.myfaces.extensions.validator.core.ValidationModuleKey;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.core.metadata.extractor.MetaDataExtractor;
import org.apache.myfaces.extensions.validator.core.property.PropertyInformation;
import org.apache.myfaces.extensions.validator.core.storage.RendererInterceptorPropertyStorage;
@@ -254,7 +254,7 @@
private boolean isComponentInitializationDeactivated()
{
- return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_COMPONENT_INITIALIZATION);
+ return ExtValCoreConfiguration.get().deactivateComponentInitialization();
}
protected boolean recordProcessedInformation()
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractorFactory.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractorFactory.java
index 912c6ef..3193512 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractorFactory.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractorFactory.java
@@ -18,9 +18,9 @@
*/
package org.apache.myfaces.extensions.validator.core.metadata.extractor;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.core.CustomInformation;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.util.ClassUtils;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
import org.apache.myfaces.extensions.validator.internal.ToDo;
@@ -71,7 +71,7 @@
{
List<String> metaDataExtractorClassNames = new ArrayList<String>();
- metaDataExtractorClassNames.add(WebXmlParameter.CUSTOM_COMPONENT_META_DATA_EXTRACTOR);
+ metaDataExtractorClassNames.add(ExtValCoreConfiguration.get().customComponentMetaDataExtractorClassName());
metaDataExtractorClassNames
.add(ExtValContext.getContext().getInformationProviderBean()
.get(CustomInformation.COMPONENT_META_DATA_EXTRACTOR));
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/CustomConfiguredValidationStrategyToMetaDataTransformerNameMapper.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/CustomConfiguredValidationStrategyToMetaDataTransformerNameMapper.java
index e21aaf9..65bbcd1 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/CustomConfiguredValidationStrategyToMetaDataTransformerNameMapper.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/CustomConfiguredValidationStrategyToMetaDataTransformerNameMapper.java
@@ -18,8 +18,8 @@
*/
package org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
import org.apache.myfaces.extensions.validator.core.InvocationOrder;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
import org.apache.myfaces.extensions.validator.core.mapper.AbstractCustomNameMapper;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
@@ -39,6 +39,6 @@
{
protected String getCustomNameMapperClassName()
{
- return WebXmlParameter.CUSTOM_VALIDATION_STRATEGY_TO_META_DATA_TRANSFORMER_NAME_MAPPER;
+ return ExtValCoreConfiguration.get().customValidationStrategyToMetaDataTransformerNameMapperClassName();
}
}
\ No newline at end of file
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValLazyRendererProxy.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValLazyRendererProxy.java
index e58b199..0191f92 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValLazyRendererProxy.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValLazyRendererProxy.java
@@ -20,8 +20,7 @@
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
-import org.apache.myfaces.extensions.validator.core.ExtValContext;
-import org.apache.myfaces.extensions.validator.util.ClassUtils;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import javax.faces.context.FacesContext;
import javax.faces.render.Renderer;
@@ -109,17 +108,10 @@
private Renderer getLazyRenderer()
{
- String proxyClassName = (String) ExtValContext.getContext().getGlobalProperty(ExtValRendererProxy.KEY);
+ Class<? extends Renderer> targetClass = ExtValCoreConfiguration.get().rendererProxy();
- if(proxyClassName != null && !proxyClassName.endsWith(getClass().getName()))
+ if(targetClass != null)
{
- Class targetClass = ClassUtils.tryToLoadClassForName(proxyClassName);
-
- if(targetClass == null)
- {
- throw new IllegalStateException("a custom invalid renderer proxy is configured: " + proxyClassName);
- }
-
Class[] argClasses = new Class[1];
argClasses[0] = Renderer.class;
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRenderKit.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRenderKit.java
index 4461379..9cdb5c0 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRenderKit.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRenderKit.java
@@ -68,8 +68,6 @@
return renderer instanceof ExtValRendererWrapper ? renderer : createWrapper(renderer);
}
- this.logger.finest("no renderer found for family " + family + " and type " + rendererType);
-
return renderer;
}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRenderKitFactory.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRenderKitFactory.java
index b924402..2ec6303 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRenderKitFactory.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRenderKitFactory.java
@@ -21,7 +21,7 @@
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.core.factory.FactoryNames;
import org.apache.myfaces.extensions.validator.util.ClassUtils;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
@@ -99,7 +99,7 @@
if(this.defaultRenderKitWrapperFactory.isApplicationInitialized())
{
- this.isDeactivated = isRenderKitFactoryDeactivatedViaWebXml();
+ this.isDeactivated = isRenderKitFactoryDeactivated();
}
else
{
@@ -149,9 +149,9 @@
return this.wrapped.getRenderKitIds();
}
- private boolean isRenderKitFactoryDeactivatedViaWebXml()
+ private boolean isRenderKitFactoryDeactivated()
{
- return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_RENDER_KIT_FACTORY);
+ return ExtValCoreConfiguration.get().deactivateRenderKitFactory();
}
private boolean isRenderKitFactoryDeactivatedViaVMParameter()
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererWrapper.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererWrapper.java
index 32479eb..52fdfc1 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererWrapper.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererWrapper.java
@@ -22,10 +22,10 @@
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.core.interceptor.RendererInterceptor;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.core.renderkit.exception.SkipBeforeInterceptorsException;
import org.apache.myfaces.extensions.validator.core.renderkit.exception.SkipAfterInterceptorsException;
import org.apache.myfaces.extensions.validator.core.renderkit.exception.SkipRendererDelegationException;
-import org.apache.myfaces.extensions.validator.util.ClassUtils;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
@@ -59,19 +59,9 @@
public ExtValRendererWrapper(Renderer renderer)
{
- String proxyClassName = (String)ExtValContext.getContext().getGlobalProperty(ExtValRendererProxy.KEY);
+ Class<? extends ExtValRendererProxy> proxyClass = ExtValCoreConfiguration.get().rendererProxy();
- if(proxyClassName == null)
- {
- logger.finest("no extval renderer proxy configured");
-
- this.wrapped = new ExtValLazyRendererProxy(renderer);
- return;
- }
-
- Class targetClass = ClassUtils.tryToLoadClassForName(proxyClassName);
-
- if(targetClass == null)
+ if(proxyClass == null)
{
logger.finest("no extval renderer proxy configured");
@@ -84,7 +74,7 @@
try
{
- Constructor constructor = targetClass.getConstructor(argClasses);
+ Constructor constructor = proxyClass.getConstructor(argClasses);
this.wrapped = (Renderer)constructor.newInstance(renderer);
}
catch (Throwable t)
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/AbstractStartupListener.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/AbstractStartupListener.java
index b426903..b29f1a2 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/AbstractStartupListener.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/AbstractStartupListener.java
@@ -25,7 +25,7 @@
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.core.ProjectStageResolver;
-import org.apache.myfaces.extensions.validator.core.DefaultProjectStageResolver;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
@@ -76,6 +76,8 @@
{
if(!isStartupListenerDeactivated())
{
+ initModuleConfig();
+
initProjectStageResolver();
init();
@@ -109,6 +111,11 @@
}
}
+ protected void initModuleConfig()
+ {
+ //override if needed
+ }
+
public PhaseId getPhaseId()
{
return PhaseId.RESTORE_VIEW;
@@ -132,7 +139,7 @@
protected ProjectStageResolver getProjectStageResolver()
{
- return new DefaultProjectStageResolver();
+ return ExtValCoreConfiguration.get().projectStageResolver();
}
protected abstract void init();
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java
index 8aa6568..e63cabc 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java
@@ -26,7 +26,8 @@
import org.apache.myfaces.extensions.validator.core.interceptor.FacesMessagePropertyValidationInterceptor;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.core.CustomInformation;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
+import org.apache.myfaces.extensions.validator.core.DefaultExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.core.PhaseIdRecordingPhaseListener;
import org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper
.BeanValidationStrategyToMetaDataTransformerNameMapper;
@@ -61,10 +62,6 @@
import org.apache.myfaces.extensions.validator.core.validation.parameter.DefaultViolationSeverityInterpreter;
import org.apache.myfaces.extensions.validator.core.validation.parameter.ViolationSeverity;
import org.apache.myfaces.extensions.validator.core.validation.parameter.DisableClientSideValidation;
-import org.apache.myfaces.extensions.validator.core.validation.ConstraintSource;
-import org.apache.myfaces.extensions.validator.core.validation.IgnoreConstraintSource;
-import org.apache.myfaces.extensions.validator.core.validation.TargetProperty;
-import org.apache.myfaces.extensions.validator.core.validation.TargetPropertyId;
import org.apache.myfaces.extensions.validator.util.ClassUtils;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
import org.apache.myfaces.extensions.validator.util.JsfUtils;
@@ -79,6 +76,11 @@
{
private static final long serialVersionUID = -2504826421086572012L;
+ protected void initModuleConfig()
+ {
+ ExtValCoreConfiguration.use(new DefaultExtValCoreConfiguration(), false);
+ }
+
protected void init()
{
if(ExtValInformation.VERSION != null)
@@ -100,15 +102,13 @@
initViolationSeverityKey();
initDisableClientSideValidationKey();
initRequiredInitialization();
- initDefaultConstraintSourceAnnotations();
executeCustomStartupListener();
}
private void initNameMappers()
{
- String deactivateDefaultNameMappers = WebXmlParameter.DEACTIVATE_DEFAULT_NAME_MAPPERS;
- if ((deactivateDefaultNameMappers != null && deactivateDefaultNameMappers.equalsIgnoreCase("true")))
+ if (ExtValCoreConfiguration.get().deactivateDefaultNameMappers())
{
return;
}
@@ -201,50 +201,45 @@
JsfUtils.registerPhaseListener(new PhaseIdRecordingPhaseListener());
}
+ @Deprecated
private void initViolationSeverityKey()
{
- ExtValContext.getContext().addGlobalProperty(ViolationSeverity.class.getName(), ViolationSeverity.class, false);
+ ExtValContext.getContext().addGlobalProperty(ViolationSeverity.class.getName(),
+ ExtValCoreConfiguration.get().violationSeverity(), false);
}
+ @Deprecated
private void initDisableClientSideValidationKey()
{
- ExtValContext.getContext().addGlobalProperty(
- DisableClientSideValidation.class.getName(), DisableClientSideValidation.class, false);
+ ExtValContext.getContext().addGlobalProperty(DisableClientSideValidation.class.getName(),
+ ExtValCoreConfiguration.get().disableClientSideValidationValidationParameter(), false);
}
private void initRequiredInitialization()
{
- if(WebXmlParameter.ACTIVATE_REQUIRED_INITIALIZATION != null)
- {
- boolean requiredInitialization = "true".equalsIgnoreCase(WebXmlParameter.ACTIVATE_REQUIRED_INITIALIZATION);
+ boolean requiredInitialization = ExtValCoreConfiguration.get().activateRequiredInitialization();
- ExtValContext.getContext().addGlobalProperty("mode:init:required", requiredInitialization, false);
+ //noinspection deprecation
+ addRequiredInitializationAsGlobalProperty(requiredInitialization);
- if(requiredInitialization)
- {
- deactivateRequiredAttributeSupport();
- }
- }
+ initRequiredAttributeSupport();
}
- private void initDefaultConstraintSourceAnnotations()
+ @Deprecated
+ private void addRequiredInitializationAsGlobalProperty(boolean requiredInitialization)
{
- ExtValContext.getContext()
- .addGlobalProperty(ConstraintSource.class.getName(), ConstraintSource.class, false);
- ExtValContext.getContext()
- .addGlobalProperty(IgnoreConstraintSource.class.getName(), IgnoreConstraintSource.class, false);
- ExtValContext.getContext()
- .addGlobalProperty(TargetProperty.class.getName(), TargetProperty.class, false);
- ExtValContext.getContext()
- .addGlobalProperty(TargetPropertyId.class.getName(), TargetPropertyId.class, false);
+ ExtValContext.getContext().addGlobalProperty("mode:init:required", requiredInitialization, false);
}
/**
* if it's configured that required init should happen,
* it's required to deactivate the support for the required attribute
*/
- private void deactivateRequiredAttributeSupport()
+ @Deprecated
+ private void initRequiredAttributeSupport()
{
- ExtValContext.getContext().addGlobalProperty("mode:reset:required", Boolean.TRUE, false);
+ ExtValContext.getContext().addGlobalProperty("mode:reset:required",
+ ExtValCoreConfiguration.get().deactivateRequiredAttributeSupport(),
+ false);
}
}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/AbstractStorageManager.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/AbstractStorageManager.java
index 1228ff3..77c53cc 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/AbstractStorageManager.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/AbstractStorageManager.java
@@ -79,14 +79,17 @@
if(!storageMap.containsKey(storageKey))
{
- storageMap.put(storageKey, (T)ClassUtils.tryToInstantiateClassForName(storageClassName));
+ synchronized (storageMap)
+ {
+ storageMap.put(storageKey, (T)ClassUtils.tryToInstantiateClassForName(storageClassName));
+ }
}
return storageMap.get(storageKey);
}
protected abstract Map<String, T> resolveStorageMap();
- public void reset(String storageKey)
+ public synchronized void reset(String storageKey)
{
Map<String, T> storageMap = resolveStorageMap();
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultMetaDataStorage.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultMetaDataStorage.java
index 9a31810..5f8ac64 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultMetaDataStorage.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultMetaDataStorage.java
@@ -18,6 +18,7 @@
*/
package org.apache.myfaces.extensions.validator.core.storage;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.internal.ToDo;
import org.apache.myfaces.extensions.validator.internal.Priority;
@@ -27,7 +28,6 @@
import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
import org.apache.myfaces.extensions.validator.core.property.DefaultPropertyInformation;
import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
import org.apache.myfaces.extensions.validator.core.CustomInformation;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.util.ClassUtils;
@@ -67,7 +67,7 @@
List<String> metaDataStorageFilterClassNames = new ArrayList<String>();
metaDataStorageFilterClassNames
- .add(WebXmlParameter.CUSTOM_META_DATA_STORAGE_FILTER);
+ .add(ExtValCoreConfiguration.get().customMetaDataStorageFilterClassName());
metaDataStorageFilterClassNames
.add(ExtValContext.getContext().getInformationProviderBean().get(
CustomInformation.META_DATA_STORAGE_FILTER));
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/AbstractValidationErrorMessageResolver.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/AbstractValidationErrorMessageResolver.java
index 4b33720..2c80567 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/AbstractValidationErrorMessageResolver.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/AbstractValidationErrorMessageResolver.java
@@ -18,9 +18,9 @@
*/
package org.apache.myfaces.extensions.validator.core.validation.message.resolver;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.core.CustomInformation;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
@@ -46,7 +46,7 @@
protected final Logger logger = Logger.getLogger(getClass().getName());
- private static String deactivateDefaultConvention = WebXmlParameter.DEACTIVATE_DEFAULT_CONVENTION;
+ private static boolean deactivateDefaultConvention = ExtValCoreConfiguration.get().deactivateDefaultConvention();
private static ResourceBundle defaultBundle = null;
private String messageBundleBaseName;
//with jsf 1.1 only available if there is a custom bean
@@ -162,8 +162,7 @@
private String tryToUseMessageBundleConvention(String key, Locale locale)
{
- if ((deactivateDefaultConvention == null || !deactivateDefaultConvention.equalsIgnoreCase("true"))
- && isDefaultMessageBundleConventionActive())
+ if ((deactivateDefaultConvention) && isDefaultMessageBundleConventionActive())
{
if (defaultBundle == null)
{
@@ -175,7 +174,7 @@
catch (Exception e)
{
//do nothing
- deactivateDefaultConvention = "true";
+ deactivateDefaultConvention = true;
}
}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/DefaultValidationErrorMessageResolver.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/DefaultValidationErrorMessageResolver.java
index 079edc6..38e37ec 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/DefaultValidationErrorMessageResolver.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/DefaultValidationErrorMessageResolver.java
@@ -18,8 +18,8 @@
*/
package org.apache.myfaces.extensions.validator.core.validation.message.resolver;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
import org.apache.myfaces.extensions.validator.core.InternalConventionProvider;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
@@ -33,12 +33,19 @@
@UsageInformation({UsageCategory.INTERNAL, UsageCategory.CUSTOMIZABLE})
public class DefaultValidationErrorMessageResolver extends AbstractValidationErrorMessageResolver
{
- private static final String CUSTOM_BUNDLE = WebXmlParameter.CUSTOM_MESSAGE_BUNDLE;
+ private static final String CUSTOM_BUNDLE = ExtValCoreConfiguration.get().customMessageBundleBaseName();
+
+ private final String baseName;
+
+ public DefaultValidationErrorMessageResolver()
+ {
+ this.baseName = InternalConventionProvider.getModuleMessageBundleName(getClass().getPackage().getName());
+ }
//not used at the moment - just for a convention
protected String getBaseName()
{
- return InternalConventionProvider.getModuleMessageBundleName(getClass().getPackage().getName());
+ return this.baseName;
}
protected String getCustomBaseName()
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/mapper/CustomConfiguredValidationStrategyToMsgResolverNameMapper.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/mapper/CustomConfiguredValidationStrategyToMsgResolverNameMapper.java
index 76c08e8..b0731a4 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/mapper/CustomConfiguredValidationStrategyToMsgResolverNameMapper.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/mapper/CustomConfiguredValidationStrategyToMsgResolverNameMapper.java
@@ -18,8 +18,8 @@
*/
package org.apache.myfaces.extensions.validator.core.validation.message.resolver.mapper;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
import org.apache.myfaces.extensions.validator.core.InvocationOrder;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.core.mapper.AbstractCustomNameMapper;
import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
@@ -40,6 +40,6 @@
protected String getCustomNameMapperClassName()
{
- return WebXmlParameter.CUSTOM_VALIDATION_STRATEGY_TO_MESSAGE_RESOLVER_NAME_MAPPER;
+ return ExtValCoreConfiguration.get().customValidationStrategyToMessageResolverNameMapperClassName();
}
}
\ No newline at end of file
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/DefaultValidationParameterExtractorFactory.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/DefaultValidationParameterExtractorFactory.java
index 613ef5a..6ea844a 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/DefaultValidationParameterExtractorFactory.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/DefaultValidationParameterExtractorFactory.java
@@ -20,9 +20,9 @@
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.core.CustomInformation;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.util.ClassUtils;
import java.util.ArrayList;
@@ -51,7 +51,8 @@
{
List<String> validationParameterExtractorClassNames = new ArrayList<String>();
- validationParameterExtractorClassNames.add(WebXmlParameter.CUSTOM_VALIDATION_PARAMETER_EXTRACTOR);
+ validationParameterExtractorClassNames
+ .add(ExtValCoreConfiguration.get().customValidationParameterExtractorClassName());
validationParameterExtractorClassNames
.add(ExtValContext.getContext().getInformationProviderBean()
.get(CustomInformation.VALIDATION_PARAMETER_EXTRACTOR));
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/DefaultValidationStrategyFactory.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/DefaultValidationStrategyFactory.java
index 7841cad..e7976f3 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/DefaultValidationStrategyFactory.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/DefaultValidationStrategyFactory.java
@@ -18,9 +18,9 @@
*/
package org.apache.myfaces.extensions.validator.core.validation.strategy;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.core.factory.ClassMappingFactory;
import org.apache.myfaces.extensions.validator.core.factory.AbstractNameMapperAwareFactory;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.core.CustomInformation;
import org.apache.myfaces.extensions.validator.core.mapper.NameMapper;
@@ -158,7 +158,7 @@
}
//setup custom mapping - overrides all other mappings
- String customMappingBaseName = WebXmlParameter.CUSTOM_STATIC_VALIDATION_STRATEGY_MAPPING;
+ String customMappingBaseName = ExtValCoreConfiguration.get().customStaticValidationStrategyMappingSource();
if (customMappingBaseName != null)
{
try
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/mapper/CustomConfiguredAnnotationToValidationStrategyNameMapper.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/mapper/CustomConfiguredAnnotationToValidationStrategyNameMapper.java
index fd03206..fc2bcfc 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/mapper/CustomConfiguredAnnotationToValidationStrategyNameMapper.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/mapper/CustomConfiguredAnnotationToValidationStrategyNameMapper.java
@@ -18,8 +18,8 @@
*/
package org.apache.myfaces.extensions.validator.core.validation.strategy.mapper;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
import org.apache.myfaces.extensions.validator.core.InvocationOrder;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.core.mapper.AbstractCustomNameMapper;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
@@ -36,8 +36,15 @@
public class CustomConfiguredAnnotationToValidationStrategyNameMapper extends
AbstractCustomNameMapper<String>
{
+ private final String customNameMapperClassName;
+ public CustomConfiguredAnnotationToValidationStrategyNameMapper()
+ {
+ this.customNameMapperClassName =
+ ExtValCoreConfiguration.get().customMetaDataToValidationStrategyNameMapperClassName();
+ }
+
protected String getCustomNameMapperClassName()
{
- return WebXmlParameter.CUSTOM_META_DATA_TO_VALIDATION_STRATEGY_NAME_MAPPER;
+ return this.customNameMapperClassName;
}
}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/util/ClassUtils.java b/core/src/main/java/org/apache/myfaces/extensions/validator/util/ClassUtils.java
index 6c9c03b..7de82c9 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/util/ClassUtils.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/util/ClassUtils.java
@@ -117,4 +117,23 @@
return null;
}
}
+
+ /**
+ * Gets the package name.
+ * Needed for ClassLoaderTestSuite
+ *
+ * @param targetClass the the class
+ * @return the package name
+ */
+ public static String getPackageName(Class targetClass)
+ {
+ Package currentPackage = targetClass.getPackage();
+
+ if(currentPackage != null)
+ {
+ return currentPackage.getName();
+ }
+
+ return targetClass.getName().substring(0, targetClass.getName().lastIndexOf("."));
+ }
}
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/util/ConstraintSourceUtils.java b/core/src/main/java/org/apache/myfaces/extensions/validator/util/ConstraintSourceUtils.java
index a7aca49..5423aa5 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/util/ConstraintSourceUtils.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/util/ConstraintSourceUtils.java
@@ -23,14 +23,10 @@
import java.beans.Introspector;
import java.lang.reflect.Method;
-import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
import org.apache.myfaces.extensions.validator.core.storage.MappedConstraintSourceStorage;
import org.apache.myfaces.extensions.validator.core.storage.PropertyStorage;
-import org.apache.myfaces.extensions.validator.core.validation.ConstraintSource;
-import org.apache.myfaces.extensions.validator.core.validation.IgnoreConstraintSource;
-import org.apache.myfaces.extensions.validator.core.validation.TargetProperty;
-import org.apache.myfaces.extensions.validator.core.validation.TargetPropertyId;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
@@ -42,7 +38,7 @@
@SuppressWarnings("unchecked")
public final class ConstraintSourceUtils
{
- private ConstraintSourceUtils()
+ protected ConstraintSourceUtils()
{
// Utility class, don't allow instantiation.
}
@@ -108,8 +104,8 @@
private static Class findMappedClass(PropertyStorage storage, Class baseBeanClass, String property)
{
- Class<? extends Annotation> constraintSourceAnnotationImplementation = (Class) ExtValContext.getContext()
- .getGlobalProperty(ConstraintSource.class.getName());
+ Class<? extends Annotation> constraintSourceAnnotationImplementation = ExtValCoreConfiguration.get()
+ .constraintSourceAnnotation();
Annotation foundConstraintSourceAnnotation = tryToGetAnnotationFromProperty(
storage, baseBeanClass, property, constraintSourceAnnotationImplementation);
@@ -166,12 +162,12 @@
private static Class<? extends Annotation> getTargetPropertyAnnotationImplementation()
{
- return (Class) ExtValContext.getContext().getGlobalProperty(TargetProperty.class.getName());
+ return ExtValCoreConfiguration.get().targetPropertyAnnotation();
}
private static Class<? extends Annotation> getTargetPropertyIdAnnotationImplementation()
{
- return (Class) ExtValContext.getContext().getGlobalProperty(TargetPropertyId.class.getName());
+ return ExtValCoreConfiguration.get().targetPropertyIdAnnotation();
}
private static String extractNewPropertyName(Class targetClass, Annotation annotation)
@@ -302,7 +298,7 @@
private static Class<? extends Annotation> getIgnoreConstraintSourceAnnotationImplementation()
{
- return (Class) ExtValContext.getContext().getGlobalProperty(IgnoreConstraintSource.class.getName());
+ return ExtValCoreConfiguration.get().ignoreConstraintSourceAnnotation();
}
private static Annotation tryToGetAnnotationFromField(
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java b/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
index 6e1bf73..48d2300 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
@@ -19,7 +19,7 @@
package org.apache.myfaces.extensions.validator.util;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.core.ValidationModuleKey;
import org.apache.myfaces.extensions.validator.core.ProjectStageName;
import org.apache.myfaces.extensions.validator.core.el.AbstractELHelperFactory;
@@ -532,7 +532,7 @@
private static boolean isValidationParameterExtractionDeactivated()
{
- return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_VALIDATION_PARAMETERS);
+ return ExtValCoreConfiguration.get().deactivateValidationParameters();
}
public static boolean executeLocalBeforeValidationInterceptors(FacesContext facesContext,
@@ -848,12 +848,12 @@
public static boolean interpretEmptyStringValuesAsNull()
{
//to deactivate: the parameter has to be explicitly false
- return !"false".equalsIgnoreCase(WebXmlParameter.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL);
+ return ExtValCoreConfiguration.get().interpretEmptyStringSubmittedValuesAsNull();
}
public static boolean validateEmptyFields()
{
- return !"false".equalsIgnoreCase(WebXmlParameter.VALIDATE_EMPTY_FIELDS);
+ return ExtValCoreConfiguration.get().validateEmptyFields();
}
public static PropertyDetails getPropertyDetails(PropertyInformation propertyInformation)
@@ -1020,7 +1020,7 @@
*/
public static boolean isRequiredInitializationActive()
{
- return Boolean.TRUE.equals(ExtValContext.getContext().getGlobalProperty("mode:init:required"));
+ return ExtValCoreConfiguration.get().activateRequiredInitialization();
}
/**
@@ -1032,7 +1032,7 @@
*/
public static boolean isRequiredResetActivated()
{
- return Boolean.TRUE.equals(ExtValContext.getContext().getGlobalProperty("mode:reset:required"));
+ return ExtValCoreConfiguration.get().deactivateRequiredAttributeSupport();
}
public static ProjectStageName getDefaultStageName()
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/util/ProxyUtils.java b/core/src/main/java/org/apache/myfaces/extensions/validator/util/ProxyUtils.java
index c75c23e..7a48950 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/util/ProxyUtils.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/util/ProxyUtils.java
@@ -20,7 +20,7 @@
import org.apache.myfaces.extensions.validator.core.proxy.ProxyHelper;
import org.apache.myfaces.extensions.validator.core.proxy.DefaultProxyHelper;
-import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
@@ -73,26 +73,8 @@
return new DefaultProxyHelper();
}
- proxyHelper = createProxyHelper();
+ proxyHelper = ExtValCoreConfiguration.get().proxyHelper();
}
return proxyHelper;
}
-
- //don't use the default approach (factory finder) - ProxyHelper is called too often...
- private static ProxyHelper createProxyHelper()
- {
- String customProxyHelperClassName = WebXmlParameter.CUSTOM_PROXY_HELPER;
-
- ProxyHelper result = null;
- if(customProxyHelperClassName != null && !"".equals(customProxyHelperClassName))
- {
- result = (ProxyHelper)ClassUtils.tryToInstantiateClassForName(customProxyHelperClassName);
- }
- if(result == null)
- {
- result = new DefaultProxyHelper();
- }
-
- return result;
- }
}
diff --git a/test-modules/base-test-infrastructure/src/test/java/org/apache/myfaces/extensions/validator/test/base/AbstractExValTestCase.java b/test-modules/base-test-infrastructure/src/test/java/org/apache/myfaces/extensions/validator/test/base/AbstractExValTestCase.java
index de92ec6..74fc549 100644
--- a/test-modules/base-test-infrastructure/src/test/java/org/apache/myfaces/extensions/validator/test/base/AbstractExValTestCase.java
+++ b/test-modules/base-test-infrastructure/src/test/java/org/apache/myfaces/extensions/validator/test/base/AbstractExValTestCase.java
@@ -30,7 +30,8 @@
import org.apache.myfaces.extensions.validator.core.factory.DefaultFactoryFinder;
import org.apache.myfaces.extensions.validator.core.factory.FactoryNames;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
-import org.apache.myfaces.extensions.validator.core.ProjectStageResolver;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
+import org.apache.myfaces.extensions.validator.core.DefaultExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.core.el.AbstractELHelperFactory;
import org.apache.myfaces.extensions.validator.core.el.ELHelper;
import org.apache.myfaces.shared_impl.config.MyfacesConfig;
@@ -119,6 +120,9 @@
servletContext.addInitParameter(ExtValInformation.WEBXML_PARAM_PREFIX + ".CUSTOM_VALIDATION_STRATEGY_FACTORY", MockValidationStrategyFactory.class.getName());
servletContext.addInitParameter(ExtValInformation.WEBXML_PARAM_PREFIX + ".CUSTOM_MESSAGE_RESOLVER_FACTORY", MockMessageResolverFactory.class.getName());
servletContext.addInitParameter(ExtValInformation.WEBXML_PARAM_PREFIX + ".CUSTOM_META_DATA_TRANSFORMER_FACTORY", MockMetaDataTransformerFactory.class.getName());
+
+ addInitializationParameters();
+
config = new MockServletConfig(servletContext);
session = new MockHttpSession();
session.setServletContext(servletContext);
@@ -169,15 +173,29 @@
}
});
+ final ExtValCoreConfiguration customExtValCoreConfiguration = getCustomExtValCoreConfiguration();
+
//execute startup listener
new ExtValStartupListener() {
private static final long serialVersionUID = -3861810605160281884L;
@Override
+ protected void initModuleConfig()
+ {
+ if(customExtValCoreConfiguration != null)
+ {
+ ExtValCoreConfiguration.use(customExtValCoreConfiguration, true);
+ }
+ else
+ {
+ ExtValCoreConfiguration.use(new DefaultExtValCoreConfiguration(), true);
+ }
+ }
+
+ @Override
protected void init()
{
- ExtValContext.getContext()
- .addGlobalProperty(ProjectStageResolver.class.getName(), getProjectStageResolver(), false);
+ initModuleConfig();
super.init();
}
}.init();
@@ -185,7 +203,23 @@
invokeStartupListeners();
}
- protected abstract void invokeStartupListeners();
+ protected ExtValCoreConfiguration getCustomExtValCoreConfiguration()
+ {
+ //override it - if needed
+ return null;
+ }
+
+ protected void addInitializationParameters()
+ {
+ //override it - if needed
+ }
+
+ protected void addInitParameter(String key, String value)
+ {
+ servletContext.addInitParameter(key, value);
+ }
+
+ protected abstract void invokeStartupListeners();
/**
* Tear down the test environment.
diff --git a/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/AbstractBeanValidationTestCase.java b/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/AbstractBeanValidationTestCase.java
index e8c4b7e..ff5e3f0 100644
--- a/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/AbstractBeanValidationTestCase.java
+++ b/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/AbstractBeanValidationTestCase.java
@@ -41,6 +41,7 @@
@Override
protected void init()
{
+ super.initModuleConfig();
super.init();
}
}.init();
diff --git a/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ConstraintSourceAwareValidation6TestCase.java b/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ConstraintSourceAwareValidation6TestCase.java
index 12a43a9..4a9e264 100644
--- a/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ConstraintSourceAwareValidation6TestCase.java
+++ b/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ConstraintSourceAwareValidation6TestCase.java
@@ -20,18 +20,16 @@
import junit.framework.Test;
import junit.framework.TestSuite;
-import org.apache.myfaces.extensions.validator.test.beanval.model.ConstraintSourceAware6Bean;
+import org.apache.myfaces.extensions.validator.core.DefaultExtValCoreConfiguration;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.test.beanval.custom.CustomConstraintSource;
import org.apache.myfaces.extensions.validator.test.beanval.custom.CustomIgnoreConstraintSource;
import org.apache.myfaces.extensions.validator.test.beanval.custom.CustomTargetProperty;
import org.apache.myfaces.extensions.validator.test.beanval.custom.CustomTargetPropertyId;
-import org.apache.myfaces.extensions.validator.core.ExtValContext;
-import org.apache.myfaces.extensions.validator.core.validation.ConstraintSource;
-import org.apache.myfaces.extensions.validator.core.validation.IgnoreConstraintSource;
-import org.apache.myfaces.extensions.validator.core.validation.TargetProperty;
-import org.apache.myfaces.extensions.validator.core.validation.TargetPropertyId;
+import org.apache.myfaces.extensions.validator.test.beanval.model.ConstraintSourceAware6Bean;
import javax.faces.application.FacesMessage;
+import java.lang.annotation.Annotation;
/**
* EXTVAL-83
@@ -59,12 +57,32 @@
protected void setUp() throws Exception
{
super.setUp();
- ExtValContext extValContext = ExtValContext.getContext();
- extValContext.addGlobalProperty(ConstraintSource.class.getName(), CustomConstraintSource.class);
- extValContext.addGlobalProperty(IgnoreConstraintSource.class.getName(), CustomIgnoreConstraintSource.class);
- extValContext.addGlobalProperty(TargetProperty.class.getName(), CustomTargetProperty.class);
- extValContext.addGlobalProperty(TargetPropertyId.class.getName(), CustomTargetPropertyId.class);
+ ExtValCoreConfiguration.use(new DefaultExtValCoreConfiguration() {
+ @Override
+ public Class<? extends Annotation> constraintSourceAnnotation()
+ {
+ return CustomConstraintSource.class;
+ }
+
+ @Override
+ public Class<? extends Annotation> ignoreConstraintSourceAnnotation()
+ {
+ return CustomIgnoreConstraintSource.class;
+ }
+
+ @Override
+ public Class<? extends Annotation> targetPropertyAnnotation()
+ {
+ return CustomTargetProperty.class;
+ }
+
+ @Override
+ public Class<? extends Annotation> targetPropertyIdAnnotation()
+ {
+ return CustomTargetPropertyId.class;
+ }
+ }, true);
}
public void testCustomAnnotations1()
diff --git a/test-modules/core-tests/src/test/java/org/apache/myfaces/extensions/validator/test/core/stage/IndependentProjectStageTestCase.java b/test-modules/core-tests/src/test/java/org/apache/myfaces/extensions/validator/test/core/stage/IndependentProjectStageTestCase.java
index ceb2a2c..2583a75 100644
--- a/test-modules/core-tests/src/test/java/org/apache/myfaces/extensions/validator/test/core/stage/IndependentProjectStageTestCase.java
+++ b/test-modules/core-tests/src/test/java/org/apache/myfaces/extensions/validator/test/core/stage/IndependentProjectStageTestCase.java
@@ -49,51 +49,58 @@
{
super.setUp();
- ExtValContext.getContext().addGlobalProperty(ProjectStageResolver.class.getName(), new DefaultProjectStageResolver()
+ ExtValCoreConfiguration.use(new DefaultExtValCoreConfiguration()
{
@Override
- public ProjectStage getCurrentProjectStage()
+ public ProjectStageResolver projectStageResolver()
{
- String jsfProjectStageName = resolveProjectStageName("javax.faces.PROJECT_STAGE");
- String independentProjectStageName = resolveProjectStageName(INDEPENDENT_PROJECT_STAGE);
-
- if (!(jsfProjectStageName == null || "".equals(jsfProjectStageName)))
+ return new DefaultProjectStageResolver()
{
- ProjectStageName result = ProjectStage.createStageName(jsfProjectStageName.trim());
- for(JsfProjectStage jsfProjectStage : JsfProjectStage.values())
+ @Override
+ public ProjectStage getCurrentProjectStage()
{
- if(jsfProjectStage.getValue().equals(result))
+ String jsfProjectStageName = resolveProjectStageName("javax.faces.PROJECT_STAGE");
+ String independentProjectStageName = resolveProjectStageName(INDEPENDENT_PROJECT_STAGE);
+
+ if (!(jsfProjectStageName == null || "".equals(jsfProjectStageName)))
{
- return ProjectStage.createStage(result);
+ ProjectStageName result = ProjectStage.createStageName(jsfProjectStageName.trim());
+ for (JsfProjectStage jsfProjectStage : JsfProjectStage.values())
+ {
+ if (jsfProjectStage.getValue().equals(result))
+ {
+ return ProjectStage.createStage(result);
+ }
+ }
}
- }
- }
- if(!(independentProjectStageName == null || "".equals(independentProjectStageName)))
- {
- ProjectStageName independentResult = ProjectStage.createStageName(independentProjectStageName.trim());
-
- //check jsf stage values first
- ProjectStageName result = ProjectStage.createStageName(independentProjectStageName.trim());
- for(JsfProjectStage jsfProjectStage : JsfProjectStage.values())
- {
- if(jsfProjectStage.getValue().equals(result))
+ if (!(independentProjectStageName == null || "".equals(independentProjectStageName)))
{
- return ProjectStage.createStage(result);
+ ProjectStageName independentResult = ProjectStage.createStageName(independentProjectStageName.trim());
+
+ //check jsf stage values first
+ ProjectStageName result = ProjectStage.createStageName(independentProjectStageName.trim());
+ for (JsfProjectStage jsfProjectStage : JsfProjectStage.values())
+ {
+ if (jsfProjectStage.getValue().equals(result))
+ {
+ return ProjectStage.createStage(result);
+ }
+ }
+
+ //check custom stage values
+ if (ProjectStage.createStageName(CUSTOM_DEV).equals(independentResult) ||
+ ProjectStage.createStageName(CUSTOM_TEST).equals(independentResult))
+ {
+ return ProjectStage.createStage(independentResult);
+ }
}
- }
- //check custom stage values
- if(ProjectStage.createStageName(CUSTOM_DEV).equals(independentResult) ||
- ProjectStage.createStageName(CUSTOM_TEST).equals(independentResult))
- {
- return ProjectStage.createStage(independentResult);
+ return createProjectStage(ProjectStage.createStageName(CUSTOM_PROD));
}
- }
-
- return createProjectStage(ProjectStage.createStageName(CUSTOM_PROD));
+ };
}
- });
+ }, true);
}
private String resolveProjectStageName(String parameterName)
@@ -109,13 +116,6 @@
}
}
- @Override
- protected void tearDown() throws Exception
- {
- super.tearDown();
- ExtValContext.getContext().addGlobalProperty(ProjectStageResolver.class.getName(), new DefaultProjectStageResolver());
- }
-
public void testDevelopmentStage()
{
servletContext.addInitParameter(INDEPENDENT_PROJECT_STAGE, CUSTOM_DEV);
@@ -165,4 +165,4 @@
{
assertFalse(ProjectStage.is(ProjectStage.createStageName(CUSTOM_TEST)));
}
-}
\ No newline at end of file
+}
diff --git a/test-modules/property-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/propval/AbstractPropertyValidationTestCase.java b/test-modules/property-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/propval/AbstractPropertyValidationTestCase.java
index 50953d6..04efbca 100644
--- a/test-modules/property-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/propval/AbstractPropertyValidationTestCase.java
+++ b/test-modules/property-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/propval/AbstractPropertyValidationTestCase.java
@@ -40,6 +40,7 @@
@Override
protected void init()
{
+ super.initModuleConfig();
super.init();
}
}.init();
diff --git a/test-modules/property-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/propval/constraintsource/ConstraintSourceAwareValidation6TestCase.java b/test-modules/property-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/propval/constraintsource/ConstraintSourceAwareValidation6TestCase.java
index f819967..217a8ca 100644
--- a/test-modules/property-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/propval/constraintsource/ConstraintSourceAwareValidation6TestCase.java
+++ b/test-modules/property-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/propval/constraintsource/ConstraintSourceAwareValidation6TestCase.java
@@ -1,21 +1,18 @@
package org.apache.myfaces.extensions.validator.test.propval.constraintsource;
-import javax.faces.application.FacesMessage;
-
import junit.framework.Test;
import junit.framework.TestSuite;
-
-import org.apache.myfaces.extensions.validator.core.ExtValContext;
-import org.apache.myfaces.extensions.validator.core.validation.ConstraintSource;
-import org.apache.myfaces.extensions.validator.core.validation.IgnoreConstraintSource;
-import org.apache.myfaces.extensions.validator.core.validation.TargetProperty;
-import org.apache.myfaces.extensions.validator.core.validation.TargetPropertyId;
+import org.apache.myfaces.extensions.validator.core.DefaultExtValCoreConfiguration;
+import org.apache.myfaces.extensions.validator.core.ExtValCoreConfiguration;
import org.apache.myfaces.extensions.validator.test.propval.constraintsource.custom.CustomConstraintSource;
import org.apache.myfaces.extensions.validator.test.propval.constraintsource.custom.CustomIgnoreConstraintSource;
import org.apache.myfaces.extensions.validator.test.propval.constraintsource.custom.CustomTargetProperty;
import org.apache.myfaces.extensions.validator.test.propval.constraintsource.custom.CustomTargetPropertyId;
import org.apache.myfaces.extensions.validator.test.propval.constraintsource.model.ConstraintSourceAware6Bean;
+import javax.faces.application.FacesMessage;
+import java.lang.annotation.Annotation;
+
public class ConstraintSourceAwareValidation6TestCase extends
AbstractConstraintSourceTestCase<ConstraintSourceAware6Bean>
{
@@ -38,16 +35,31 @@
protected void setUp() throws Exception
{
super.setUp();
- ExtValContext extValContext = ExtValContext.getContext();
+ ExtValCoreConfiguration.use(new DefaultExtValCoreConfiguration() {
+ @Override
+ public Class<? extends Annotation> constraintSourceAnnotation()
+ {
+ return CustomConstraintSource.class;
+ }
- extValContext.addGlobalProperty(ConstraintSource.class.getName(),
- CustomConstraintSource.class);
- extValContext.addGlobalProperty(IgnoreConstraintSource.class.getName(),
- CustomIgnoreConstraintSource.class);
- extValContext.addGlobalProperty(TargetProperty.class.getName(),
- CustomTargetProperty.class);
- extValContext.addGlobalProperty(TargetPropertyId.class.getName(),
- CustomTargetPropertyId.class);
+ @Override
+ public Class<? extends Annotation> ignoreConstraintSourceAnnotation()
+ {
+ return CustomIgnoreConstraintSource.class;
+ }
+
+ @Override
+ public Class<? extends Annotation> targetPropertyAnnotation()
+ {
+ return CustomTargetProperty.class;
+ }
+
+ @Override
+ public Class<? extends Annotation> targetPropertyIdAnnotation()
+ {
+ return CustomTargetPropertyId.class;
+ }
+ }, true);
}
public void testCustomAnnotations1()
diff --git a/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java
index 395bbe9..ad03cf6 100644
--- a/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java
+++ b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java
@@ -18,7 +18,8 @@
*/
package org.apache.myfaces.extensions.validator;
-import org.apache.myfaces.extensions.validator.baseval.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.baseval.ExtValBaseValidationModuleConfiguration;
+import org.apache.myfaces.extensions.validator.baseval.DefaultExtValBaseValidationModuleConfiguration;
import org.apache.myfaces.extensions.validator.baseval.annotation.SkipValidationSupport;
import org.apache.myfaces.extensions.validator.core.startup.AbstractStartupListener;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
@@ -44,6 +45,8 @@
import org.apache.myfaces.extensions.validator.crossval.storage.mapper.CrossValidationStorageNameMapper;
import org.apache.myfaces.extensions.validator.crossval.storage.mapper.ProcessedInformationStorageNameMapper;
import org.apache.myfaces.extensions.validator.crossval.CrossValidationPhaseListener;
+import org.apache.myfaces.extensions.validator.crossval.ExtValCrossValidationModuleConfiguration;
+import org.apache.myfaces.extensions.validator.crossval.DefaultExtValCrossValidationModuleConfiguration;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
import org.apache.myfaces.extensions.validator.util.JsfUtils;
@@ -56,6 +59,12 @@
{
private static final long serialVersionUID = -2474361612857222283L;
+ protected void initModuleConfig()
+ {
+ ExtValBaseValidationModuleConfiguration.use(new DefaultExtValBaseValidationModuleConfiguration(), false);
+ ExtValCrossValidationModuleConfiguration.use(new DefaultExtValCrossValidationModuleConfiguration(), false);
+ }
+
protected void init()
{
initProcessedInformationRecorders();
@@ -76,9 +85,7 @@
private void initStaticStrategyMappings()
{
- String jpaBasedValidation = WebXmlParameter.DEACTIVATE_JPA_BASED_VALIDATION;
- if (jpaBasedValidation == null
- || !jpaBasedValidation.equalsIgnoreCase("true"))
+ if (!ExtValBaseValidationModuleConfiguration.get().deactivateJpaBasedValidation())
{
StaticConfiguration<String, String> staticConfig = new StaticResourceBundleConfiguration();
staticConfig.setSourceOfMapping(
diff --git a/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/DefaultExtValBaseValidationModuleConfiguration.java b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/DefaultExtValBaseValidationModuleConfiguration.java
new file mode 100644
index 0000000..368205b
--- /dev/null
+++ b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/DefaultExtValBaseValidationModuleConfiguration.java
@@ -0,0 +1,40 @@
+/*
+ * 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.baseval;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+/**
+ * @author Gerhard Petracek
+ * @since r4
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public class DefaultExtValBaseValidationModuleConfiguration extends ExtValBaseValidationModuleConfiguration
+{
+ public String jpaValidationErrorMessages()
+ {
+ return WebXmlParameter.VALIDATION_MESSAGES_JPA;
+ }
+
+ public boolean deactivateJpaBasedValidation()
+ {
+ return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_JPA_BASED_VALIDATION);
+ }
+}
diff --git a/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/ExtValBaseValidationModuleConfiguration.java b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/ExtValBaseValidationModuleConfiguration.java
new file mode 100644
index 0000000..3ac052b
--- /dev/null
+++ b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/ExtValBaseValidationModuleConfiguration.java
@@ -0,0 +1,58 @@
+/*
+ * 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.baseval;
+
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.ExtValModuleConfiguration;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+/**
+ * @author Gerhard Petracek
+ * @since r4
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public abstract class ExtValBaseValidationModuleConfiguration implements ExtValModuleConfiguration
+{
+ private static ExtValContext extValContext = ExtValContext.getContext();
+
+ protected ExtValBaseValidationModuleConfiguration()
+ {
+ }
+
+ public static ExtValBaseValidationModuleConfiguration get()
+ {
+ return extValContext.getModuleConfiguration(ExtValBaseValidationModuleConfiguration.class);
+ }
+
+ @UsageInformation(UsageCategory.INTERNAL)
+ public static boolean use(ExtValBaseValidationModuleConfiguration config, boolean forceOverride)
+ {
+ return extValContext.addModuleConfiguration(
+ ExtValBaseValidationModuleConfiguration.class, config, forceOverride);
+ }
+
+ /*
+ * web.xml config
+ */
+
+ public abstract String jpaValidationErrorMessages();
+
+ public abstract boolean deactivateJpaBasedValidation();
+}
diff --git a/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/WebXmlParameter.java b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/WebXmlParameter.java
index b777a4e..9a43d45 100644
--- a/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/WebXmlParameter.java
+++ b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/WebXmlParameter.java
@@ -32,10 +32,10 @@
*/
@ToDo(value = Priority.MEDIUM, description = "documentation")
@UsageInformation(UsageCategory.INTERNAL)
-public interface WebXmlParameter
+interface WebXmlParameter
{
static final String VALIDATION_MESSAGES_JPA = WebXmlUtils
.getInitParameter("JPA_VALIDATION_ERROR_MESSAGES");
static final String DEACTIVATE_JPA_BASED_VALIDATION = WebXmlUtils
.getInitParameter("DEACTIVATE_JPA_BASED_VALIDATION");
-}
\ No newline at end of file
+}
diff --git a/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/message/resolver/JpaValidationErrorMessageResolver.java b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/message/resolver/JpaValidationErrorMessageResolver.java
index d476ad9..5aff2af 100644
--- a/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/message/resolver/JpaValidationErrorMessageResolver.java
+++ b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/message/resolver/JpaValidationErrorMessageResolver.java
@@ -18,7 +18,7 @@
*/
package org.apache.myfaces.extensions.validator.baseval.message.resolver;
-import org.apache.myfaces.extensions.validator.baseval.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.baseval.ExtValBaseValidationModuleConfiguration;
import org.apache.myfaces.extensions.validator.core.validation.message.resolver.AbstractValidationErrorMessageResolver;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
@@ -37,7 +37,9 @@
{
public static final String JPA_VALIDATION_ERROR_MESSAGES = "JPA_VALIDATION_ERROR_MESSAGES";
- private static final String CUSTOM_BASE_NAME = WebXmlParameter.VALIDATION_MESSAGES_JPA;
+ private static final String CUSTOM_BASE_NAME =
+ ExtValBaseValidationModuleConfiguration.get().jpaValidationErrorMessages();
+
private static final String BASE_NAME = JpaValidationErrorMessageResolver.class
.getPackage().getName().replace(".message.resolver", ".message.bundle")+ ".jpa_messages";
@@ -56,4 +58,4 @@
return BASE_NAME;
}
-}
\ No newline at end of file
+}
diff --git a/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/CrossValidationPhaseListener.java b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/CrossValidationPhaseListener.java
index 571d3d6..3cf179e 100644
--- a/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/CrossValidationPhaseListener.java
+++ b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/CrossValidationPhaseListener.java
@@ -151,8 +151,7 @@
{
if (!isInitialized)
{
- if (WebXmlParameter.DEACTIVATE_CROSSVALIDATION != null
- && WebXmlParameter.DEACTIVATE_CROSSVALIDATION.equalsIgnoreCase("true"))
+ if (ExtValCrossValidationModuleConfiguration.get().deactivateCrossvalidation())
{
JsfUtils.deregisterPhaseListener(this);
}
diff --git a/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/DefaultExtValCrossValidationModuleConfiguration.java b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/DefaultExtValCrossValidationModuleConfiguration.java
new file mode 100644
index 0000000..15f624f
--- /dev/null
+++ b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/DefaultExtValCrossValidationModuleConfiguration.java
@@ -0,0 +1,35 @@
+/*
+ * 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.crossval;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+/**
+ * @author Gerhard Petracek
+ * @since r4
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public class DefaultExtValCrossValidationModuleConfiguration extends ExtValCrossValidationModuleConfiguration
+{
+ public boolean deactivateCrossvalidation()
+ {
+ return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_CROSSVALIDATION);
+ }
+}
diff --git a/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/ExtValCrossValidationModuleConfiguration.java b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/ExtValCrossValidationModuleConfiguration.java
new file mode 100644
index 0000000..2dfc830
--- /dev/null
+++ b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/ExtValCrossValidationModuleConfiguration.java
@@ -0,0 +1,56 @@
+/*
+ * 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.crossval;
+
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.ExtValModuleConfiguration;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+/**
+ * @author Gerhard Petracek
+ * @since r4
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public abstract class ExtValCrossValidationModuleConfiguration implements ExtValModuleConfiguration
+{
+ private static ExtValContext extValContext = ExtValContext.getContext();
+
+ protected ExtValCrossValidationModuleConfiguration()
+ {
+ }
+
+ public static ExtValCrossValidationModuleConfiguration get()
+ {
+ return extValContext.getModuleConfiguration(ExtValCrossValidationModuleConfiguration.class);
+ }
+
+ @UsageInformation(UsageCategory.INTERNAL)
+ public static boolean use(ExtValCrossValidationModuleConfiguration config, boolean forceOverride)
+ {
+ return extValContext.addModuleConfiguration(
+ ExtValCrossValidationModuleConfiguration.class, config, forceOverride);
+ }
+
+ /*
+ * web.xml config
+ */
+
+ abstract boolean deactivateCrossvalidation();
+}
diff --git a/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/WebXmlParameter.java b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/WebXmlParameter.java
index 1c40279..9440880 100644
--- a/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/WebXmlParameter.java
+++ b/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/WebXmlParameter.java
@@ -29,8 +29,8 @@
* @since 1.x.1
*/
@UsageInformation(UsageCategory.INTERNAL)
-public interface WebXmlParameter
+interface WebXmlParameter
{
static final String DEACTIVATE_CROSSVALIDATION = WebXmlUtils
.getInitParameter("DEACTIVATE_CROSSVALIDATION");
-}
\ No newline at end of file
+}