/* | |
* 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.internal.Priority; | |
import org.apache.myfaces.extensions.validator.internal.ToDo; | |
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; | |
/** | |
* Default ExtVal Core Module Configuration that retrieves most of the values from the Web.xml initialization | |
* parameters. | |
* | |
* @since r4 | |
*/ | |
@UsageInformation(UsageCategory.INTERNAL) | |
public class DefaultExtValCoreConfiguration extends ExtValCoreConfiguration | |
{ | |
private static final String GLOBAL_PROPERTY_MODE_INIT_REQUIRED = "mode:init:required"; | |
private static final String GLOBAL_PROPERTY_MODE_RESET_REQUIRED = "mode:reset:required"; | |
/** | |
* {@inheritDoc} | |
* Parameter taken from the Web.xml initialization parameter CUSTOM_MESSAGE_BUNDLE. | |
*/ | |
public String customMessageBundleBaseName() | |
{ | |
return WebXmlParameter.CUSTOM_MESSAGE_BUNDLE; | |
} | |
/** | |
* {@inheritDoc} | |
* Parameter taken from the Web.xml initialization parameter CUSTOM_BASE_PACKAGE. | |
*/ | |
public String customBasePackage() | |
{ | |
return WebXmlParameter.CUSTOM_BASE_PACKAGE; | |
} | |
/** | |
* {@inheritDoc} | |
* Parameter taken from the Web.xml initialization parameter CUSTOM_INFORMATION_PROVIDER_BEAN. | |
*/ | |
public String customInformationProviderBeanClassName() | |
{ | |
return WebXmlParameter.CUSTOM_INFORMATION_PROVIDER_BEAN; | |
} | |
/** | |
* {@inheritDoc} | |
* Parameter taken from the Web.xml initialization parameter CUSTOM_COMPONENT_META_DATA_EXTRACTOR. | |
*/ | |
public String customComponentMetaDataExtractorClassName() | |
{ | |
return WebXmlParameter.CUSTOM_COMPONENT_META_DATA_EXTRACTOR; | |
} | |
/** | |
* {@inheritDoc} | |
* Parameter taken from the Web.xml initialization parameter CUSTOM_VALIDATION_PARAMETER_EXTRACTOR. | |
*/ | |
public String customValidationParameterExtractorClassName() | |
{ | |
return WebXmlParameter.CUSTOM_VALIDATION_PARAMETER_EXTRACTOR; | |
} | |
/** | |
* {@inheritDoc} | |
* Parameter taken from the Web.xml initialization parameter CUSTOM_STATIC_VALIDATION_STRATEGY_MAPPING. | |
*/ | |
public String customStaticValidationStrategyMappingSource() | |
{ | |
return WebXmlParameter.CUSTOM_STATIC_VALIDATION_STRATEGY_MAPPING; | |
} | |
/** | |
* {@inheritDoc} | |
* Parameter taken from the Web.xml initialization parameter CUSTOM_COMPONENT_INITIALIZER. | |
*/ | |
public String customComponentInitializerClassName() | |
{ | |
return WebXmlParameter.CUSTOM_COMPONENT_INITIALIZER; | |
} | |
/** | |
* {@inheritDoc} | |
* Parameter taken from the Web.xml initialization parameter CUSTOM_VALIDATION_EXCEPTION_INTERCEPTOR. | |
*/ | |
public String customValidationExceptionInterceptorClassName() | |
{ | |
return WebXmlParameter.CUSTOM_VALIDATION_EXCEPTION_INTERCEPTOR; | |
} | |
/** | |
* {@inheritDoc} | |
* Parameter taken from the Web.xml initialization parameter CUSTOM_PROPERTY_VALIDATION_INTERCEPTOR. | |
*/ | |
public String customPropertyValidationInterceptorClassName() | |
{ | |
return WebXmlParameter.CUSTOM_PROPERTY_VALIDATION_INTERCEPTOR; | |
} | |
/** | |
* {@inheritDoc} | |
* Parameter taken from the Web.xml initialization parameter CUSTOM_META_DATA_EXTRACTION_INTERCEPTOR. | |
*/ | |
public String customMetaDataExtractionInterceptorClassName() | |
{ | |
return WebXmlParameter.CUSTOM_META_DATA_EXTRACTION_INTERCEPTOR; | |
} | |
/** | |
* {@inheritDoc} | |
* Parameter taken from the Web.xml initialization parameter CUSTOM_META_DATA_EXTRACTION_INTERCEPTOR. When no | |
* value is specified, the {@link DefaultProxyHelper} is returned. | |
*/ | |
@ToDo(value = Priority.MEDIUM, description = "The tryToInstantiateClassForName can return a null value which isn't " | |
+ "handled correctly afterwards. We should throw an exception like in rendererProxy method.") | |
public ProxyHelper proxyHelper() | |
{ | |
String customProxyHelperClassName = WebXmlParameter.CUSTOM_PROXY_HELPER; | |
if (customProxyHelperClassName != null && !"".equals(customProxyHelperClassName)) | |
{ | |
return (ProxyHelper) ClassUtils.tryToInstantiateClassForName(customProxyHelperClassName); | |
} | |
return new DefaultProxyHelper(); | |
} | |
/** | |
* {@inheritDoc} | |
* Returns always the DefaultProjectStageResolver. | |
*/ | |
public ProjectStageResolver projectStageResolver() | |
{ | |
return new DefaultProjectStageResolver(); | |
} | |
/** | |
* {@inheritDoc} | |
* Returns the ExtValRendererProxy class which is configured in the global property of ExtVal. When no property | |
* defined, null is returned (which is correctly handled by the calling methods) or an exception can be thrown | |
* when the global property contains an invalid class name. | |
*/ | |
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; | |
} | |
/** | |
* {@inheritDoc} | |
* Returns always the ViolationSeverity. | |
*/ | |
public Class violationSeverity() | |
{ | |
return ViolationSeverity.class; | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter CUSTOM_VALIDATION_STRATEGY_TO_MESSAGE_RESOLVER_NAME_MAPPER. | |
*/ | |
public String customValidationStrategyToMessageResolverNameMapperClassName() | |
{ | |
return WebXmlParameter.CUSTOM_VALIDATION_STRATEGY_TO_MESSAGE_RESOLVER_NAME_MAPPER; | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter CUSTOM_META_DATA_TO_VALIDATION_STRATEGY_NAME_MAPPER. | |
*/ | |
public String customMetaDataToValidationStrategyNameMapperClassName() | |
{ | |
return WebXmlParameter.CUSTOM_META_DATA_TO_VALIDATION_STRATEGY_NAME_MAPPER; | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter | |
* CUSTOM_VALIDATION_STRATEGY_TO_META_DATA_TRANSFORMER_NAME_MAPPER. | |
*/ | |
public String customValidationStrategyToMetaDataTransformerNameMapperClassName() | |
{ | |
return WebXmlParameter.CUSTOM_VALIDATION_STRATEGY_TO_META_DATA_TRANSFORMER_NAME_MAPPER; | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter CUSTOM_META_DATA_STORAGE_FILTER. | |
*/ | |
public String customMetaDataStorageFilterClassName() | |
{ | |
return WebXmlParameter.CUSTOM_META_DATA_STORAGE_FILTER; | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter CUSTOM_VALIDATION_STRATEGY_FACTORY. | |
*/ | |
public String customValidationStrategyFactoryClassName() | |
{ | |
return WebXmlParameter.CUSTOM_VALIDATION_STRATEGY_FACTORY; | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter CUSTOM_MESSAGE_RESOLVER_FACTORY. | |
*/ | |
public String customMessageResolverFactoryClassName() | |
{ | |
return WebXmlParameter.CUSTOM_MESSAGE_RESOLVER_FACTORY; | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter CUSTOM_COMPONENT_META_DATA_EXTRACTOR_FACTORY. | |
*/ | |
public String customComponentMetaDataExtractorFactoryClassName() | |
{ | |
return WebXmlParameter.CUSTOM_COMPONENT_META_DATA_EXTRACTOR_FACTORY; | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter CUSTOM_VALIDATION_PARAMETER_EXTRACTOR_FACTORY. | |
*/ | |
public String customValidationParameterExtractorFactoryClassName() | |
{ | |
return WebXmlParameter.CUSTOM_VALIDATION_PARAMETER_EXTRACTOR_FACTORY; | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter CUSTOM_VALIDATION_PARAMETER_FACTORY. | |
*/ | |
public String customValidationParameterFactoryClassName() | |
{ | |
return WebXmlParameter.CUSTOM_VALIDATION_PARAMETER_FACTORY; | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter CUSTOM_META_DATA_TRANSFORMER_FACTORY. | |
*/ | |
public String customMetaDataTransformerFactoryClassName() | |
{ | |
return WebXmlParameter.CUSTOM_META_DATA_TRANSFORMER_FACTORY; | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter CUSTOM_STORAGE_MANAGER_FACTORY. | |
*/ | |
public String customStorageManagerFactoryClassName() | |
{ | |
return WebXmlParameter.CUSTOM_STORAGE_MANAGER_FACTORY; | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter CUSTOM_FACES_MESSAGE_FACTORY. | |
*/ | |
public String customFacesMessageFactoryClassName() | |
{ | |
return WebXmlParameter.CUSTOM_FACES_MESSAGE_FACTORY; | |
} | |
/** | |
* {@inheritDoc} | |
* Returns the {@link ConstraintSource} class as annotation for the Constraint Source feature. | |
*/ | |
public Class<? extends Annotation> constraintSourceAnnotation() | |
{ | |
return ConstraintSource.class; | |
} | |
/** | |
* {@inheritDoc} | |
* Returns the {@link IgnoreConstraintSource} class as annotation for the ignore feature of the Constraint Source. | |
*/ | |
public Class<? extends Annotation> ignoreConstraintSourceAnnotation() | |
{ | |
return IgnoreConstraintSource.class; | |
} | |
/** | |
* {@inheritDoc} | |
* Returns the {@link TargetProperty} class as annotation for the Constraint Source target property feature. | |
*/ | |
public Class<? extends Annotation> targetPropertyAnnotation() | |
{ | |
return TargetProperty.class; | |
} | |
/** | |
* {@inheritDoc} | |
* Returns the {@link TargetPropertyId} class as annotation for the Constraint Source target property feature. | |
*/ | |
public Class<? extends Annotation> targetPropertyIdAnnotation() | |
{ | |
return TargetPropertyId.class; | |
} | |
/** | |
* {@inheritDoc} | |
* Returns the {@link DisableClientSideValidation} class as indicator for this feature. | |
*/ | |
public Class<? extends ValidationParameter> disableClientSideValidationValidationParameter() | |
{ | |
return DisableClientSideValidation.class; | |
} | |
/** | |
* {@inheritDoc} | |
* First a global parameter is checked to see if the Module or Add-on hasn't overruled the value of the | |
* Web.xml initialization parameter ACTIVATE_REQUIRED_INITIALIZATION. If overruled, this value is taken, otherwise | |
* the initialization parameter value. By default, the method return false if there are no values specified. | |
*/ | |
public boolean activateRequiredInitialization() | |
{ | |
Boolean globalProperty = (Boolean)ExtValContext.getContext().getGlobalProperty( | |
GLOBAL_PROPERTY_MODE_INIT_REQUIRED); | |
if(globalProperty != null) | |
{ | |
return globalProperty; | |
} | |
return WebXmlParameter.ACTIVATE_REQUIRED_INITIALIZATION != null && | |
"true".equalsIgnoreCase(WebXmlParameter.ACTIVATE_REQUIRED_INITIALIZATION); | |
} | |
/** | |
* Module and add-on writers can use this method to overrule the value of the parameter | |
* activateRequiredInitialization. it is also useful for them to specify a certain parameter value without the need | |
* for a web.xml initialization parameter. | |
* | |
* @param value The value we want to give the parameter | |
* @param forceOverride do we force overriding of another value set by a call to this overrule method. | |
*/ | |
public static void overruleActivateRequiredInitialization(Boolean value, boolean forceOverride) | |
{ | |
ExtValContext.getContext().addGlobalProperty(GLOBAL_PROPERTY_MODE_INIT_REQUIRED, value, forceOverride); | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter DEACTIVATE_DEFAULT_CONVENTION. | |
*/ | |
public boolean deactivateDefaultConvention() | |
{ | |
return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_DEFAULT_CONVENTION); | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter DEACTIVATE_DEFAULT_NAME_MAPPERS. | |
*/ | |
public boolean deactivateDefaultNameMappers() | |
{ | |
String deactivateDefaultNameMappers = WebXmlParameter.DEACTIVATE_DEFAULT_NAME_MAPPERS; | |
return deactivateDefaultNameMappers != null && deactivateDefaultNameMappers.equalsIgnoreCase("true"); | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter DEACTIVATE_EL_RESOLVER. | |
*/ | |
public boolean deactivateElResolver() | |
{ | |
return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_EL_RESOLVER); | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter DEACTIVATE_COMPONENT_INITIALIZATION. | |
*/ | |
public boolean deactivateComponentInitialization() | |
{ | |
return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_COMPONENT_INITIALIZATION); | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter DEACTIVATE_VALIDATION_PARAMETERS. | |
*/ | |
public boolean deactivateValidationParameters() | |
{ | |
return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_VALIDATION_PARAMETERS); | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter DEACTIVATE_RENDER_KIT_FACTORY. | |
*/ | |
public boolean deactivateRenderKitFactory() | |
{ | |
return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_RENDER_KIT_FACTORY); | |
} | |
/** | |
* {@inheritDoc} | |
* First a global parameter is checked to see if some Module or Add-on hasn't overruled the value of the | |
* Web.xml initialization parameter DEACTIVATE_REQUIRED_ATTRIBUTE_SUPPORT. If overruled, this value is taken, | |
* otherwise the initialization parameter value. By default, the method return false if there are no values | |
* specified. | |
*/ | |
public boolean deactivateRequiredAttributeSupport() | |
{ | |
Boolean globalProperty = (Boolean)ExtValContext.getContext().getGlobalProperty( | |
GLOBAL_PROPERTY_MODE_RESET_REQUIRED); | |
if(globalProperty != null) | |
{ | |
return globalProperty; | |
} | |
return WebXmlParameter.DEACTIVATE_REQUIRED_ATTRIBUTE_SUPPORT != null && | |
"true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_REQUIRED_ATTRIBUTE_SUPPORT); | |
} | |
/** | |
* Module and add-on writers can use this method to overrule the value of the parameter | |
* deactivateRequiredAttributeSupport. It is also useful for them to specify a certain parameter value without the | |
* need for a web.xml initialization parameter. | |
* | |
* @param value The value we want to give the parameter | |
* @param forceOverride do we force overriding of another value set by a call to this overrule method. | |
*/ | |
public static void overruleDeactivateRequiredAttributeSupport(Boolean value, boolean forceOverride) | |
{ | |
ExtValContext.getContext().addGlobalProperty(GLOBAL_PROPERTY_MODE_RESET_REQUIRED, value, forceOverride); | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization (JSF 2) parameter | |
* avax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL. | |
*/ | |
public boolean interpretEmptyStringSubmittedValuesAsNull() | |
{ | |
return !"false".equalsIgnoreCase(WebXmlParameter.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL); | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization (JSF 2) parameter javax.faces.VALIDATE_EMPTY_FIELDS. | |
*/ | |
public boolean validateEmptyFields() | |
{ | |
return !"false".equalsIgnoreCase(WebXmlParameter.VALIDATE_EMPTY_FIELDS); | |
} | |
/** | |
* {@inheritDoc} | |
* Value taken from the Web.xml initialization parameter ACTIVATE_MARKUP_META_DATA. | |
*/ | |
@Override | |
public boolean activateMarkupMetaData() | |
{ | |
return "true".equalsIgnoreCase(WebXmlParameter.ACTIVATE_MARKUP_META_DATA); | |
} | |
} |