blob: 48e973f89d6d3e5256b91f4186bae19bc08ba52f [file] [log] [blame]
/*
* 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);
}
}