All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.joinfaces.myfaces.MyfacesServletContextConfigurer Maven / Gradle / Ivy

/*
 * Copyright 2016-2016 the original author or authors.
 *
 * Licensed 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.joinfaces.myfaces;

import javax.servlet.ServletContext;

import lombok.Builder;

import org.apache.myfaces.application.ResourceHandlerImpl;
import org.apache.myfaces.application.StateCache;
import org.apache.myfaces.config.FacesConfigValidator;
import org.apache.myfaces.config.annotation.CdiAnnotationProviderExtension;
import org.apache.myfaces.config.annotation.DefaultAnnotationProvider;
import org.apache.myfaces.el.unified.ResolverBuilderBase;
import org.apache.myfaces.lifecycle.ClientWindowFactoryImpl;
import org.apache.myfaces.renderkit.ErrorPageWriter;
import org.apache.myfaces.renderkit.html.HtmlResponseStateManager;
import org.apache.myfaces.resource.InternalClassLoaderResourceLoader;
import org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy;
import org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage;
import org.apache.myfaces.view.facelets.el.ContextAwareUtils;
import org.apache.myfaces.view.facelets.impl.FaceletCompositionContextImpl;
import org.apache.myfaces.view.facelets.pool.ViewPool;
import org.apache.myfaces.webapp.AbstractFacesInitializer;

import org.joinfaces.ServletContextConfigurer;

/**
 * Servlet context configurer of MyFaces.
 * @author Marcelo Fernandes
 */
public class MyfacesServletContextConfigurer extends ServletContextConfigurer {

	private MyfacesProperties myfacesProperties;

	/**
	 * Preffix of original MyFaces parameters.
	 */
	public static final String PREFFIX = "org.apache.myfaces.";

	@Builder
	public MyfacesServletContextConfigurer(MyfacesProperties myfacesProperties, ServletContext servletContext) {
		super(servletContext, "");
		this.myfacesProperties = myfacesProperties;
	}

	private void configureExpressionLanguage() {
		setInitParameterString(PREFFIX + "STRICT_JSF_2_CC_EL_RESOLVER", this.myfacesProperties.getStrictJsf2CcElResolver());
		setInitParameterBoolean(PREFFIX + "SUPPORT_JSP_AND_FACES_EL", this.myfacesProperties.getSupportJspAndFacesEl());
		setInitParameterBoolean(PREFFIX + "SUPPORT_EL_3_IMPORT_HANDLER", this.myfacesProperties.getSupportEl3ImportHandler());
		setInitParameterString(ResolverBuilderBase.EL_RESOLVER_COMPARATOR, this.myfacesProperties.getElResolverComparator());
		setInitParameterString(ResolverBuilderBase.EL_RESOLVER_PREDICATE, this.myfacesProperties.getElResolverPredicate());
		setInitParameterBoolean(FaceletCompositionContextImpl.INIT_PARAM_CACHE_EL_EXPRESSIONS, this.myfacesProperties.getCacheElExpressions());
		setInitParameterString(PREFFIX + "EXPRESSION_FACTORY", this.myfacesProperties.getExpressionFactory());
	}

	private void configureCDI() {
		setInitParameterBoolean(PREFFIX + "CDI_MANAGED_CONVERTERS_ENABLED", this.myfacesProperties.getCdiManagedConvertersEnabled());
		setInitParameterBoolean(PREFFIX + "CDI_MANAGED_VALIDATORS_ENABLED", this.myfacesProperties.getCdiManagedValidatorsEnabled());
	}

	private void configureRendering() {
		setInitParameterBoolean(PREFFIX + "PRETTY_HTML", this.myfacesProperties.getPrettyHtml());
		setInitParameterBoolean(PREFFIX + "ALLOW_JAVASCRIPT", this.myfacesProperties.getAllowJavascript());
		setInitParameterBoolean(PREFFIX + "STRICT_XHTML_LINKS", this.myfacesProperties.getStrictXhtmlLinks());
		setInitParameterBoolean(PREFFIX + "RENDER_CLEAR_JAVASCRIPT_FOR_BUTTON", this.myfacesProperties.getRenderClearJavascriptForButton());
		setInitParameterBoolean(PREFFIX + "RENDER_HIDDEN_FIELDS_FOR_LINK_PARAMS", this.myfacesProperties.getRenderHiddenFieldsForLinkParams());
		setInitParameterBoolean(PREFFIX + "SAVE_FORM_SUBMIT_LINK_IE", this.myfacesProperties.getSaveFormSubmitLinkIe());
		setInitParameterBoolean(PREFFIX + "WRAP_SCRIPT_CONTENT_WITH_XML_COMMENT_TAG", this.myfacesProperties.getWrapScriptContentWithXmlCommentTag());
		setInitParameterBoolean(PREFFIX + "RENDER_FORM_SUBMIT_SCRIPT_INLINE", this.myfacesProperties.getRenderFormSubmitScriptInline());
		setInitParameterString(PREFFIX + "DEFAULT_RESPONSE_WRITER_CONTENT_TYPE_MODE", this.myfacesProperties.getDefaultResponseWriterContentTypeMode());
		setInitParameterBoolean(PREFFIX + "EARLY_FLUSH_ENABLED", this.myfacesProperties.getEarlyFlushEnabled());
		setInitParameterBoolean(PREFFIX + "RENDER_FORM_VIEW_STATE_AT_BEGIN", this.myfacesProperties.getRenderFormViewStateAtBegin());
		setInitParameterBoolean(InternalClassLoaderResourceLoader.USE_MULTIPLE_JS_FILES_FOR_JSF_UNCOMPRESSED_JS, this.myfacesProperties.getUseMultipleJsFilesForJsfUncompressedJs());
		setInitParameterString(InternalClassLoaderResourceLoader.MYFACES_JSF_MODE, this.myfacesProperties.getJsfJsMode());
	}

	private void configureResources() {
		setInitParameterInteger(PREFFIX + "RESOURCE_MAX_TIME_EXPIRES", this.myfacesProperties.getResourceMaxTimeExpires());
		setInitParameterInteger(PREFFIX + "RESOURCE_HANDLER_CACHE_SIZE", this.myfacesProperties.getResourceHandlerCacheSize());
		setInitParameterBoolean(PREFFIX + "RESOURCE_HANDLER_CACHE_ENABLED", this.myfacesProperties.getResourceHandlerCacheEnabled());
		setInitParameterBoolean(ResourceHandlerImpl.INIT_PARAM_STRICT_JSF_2_ALLOW_SLASH_LIBRARY_NAME, this.myfacesProperties.getStrictJsf2AllowSlashLibraryName());
		setInitParameterInteger(ResourceHandlerImpl.INIT_PARAM_RESOURCE_BUFFER_SIZE, this.myfacesProperties.getResourceBufferSize());
	}

	private void configureStateSaving() {
		setInitParameterBoolean(PREFFIX + "RENDER_VIEWSTATE_ID", this.myfacesProperties.getRenderViewstateId());
		setInitParameterString(FaceletViewDeclarationLanguage.REFRESH_TRANSIENT_BUILD_ON_PSS, this.myfacesProperties.getRefreshTransientBuildOnPss());
		setInitParameterBoolean(PREFFIX + "REFRESH_TRANSIENT_BUILD_ON_PSS_PRESERVE_STATE", this.myfacesProperties.getRefreshTransientBuildOnPssPreserveState());
		setInitParameterInteger(PREFFIX + "NUMBER_OF_VIEWS_IN_SESSION", this.myfacesProperties.getNumberOfViewsInSession());
		setInitParameterInteger(PREFFIX + "NUMBER_OF_SEQUENTIAL_VIEWS_IN_SESSION", this.myfacesProperties.getNumberOfSequentialViewsInSession());
		setInitParameterInteger(PREFFIX + "NUMBER_OF_FLASH_TOKENS_IN_SESSION", this.myfacesProperties.getNumberOfFlashTokensInSession());
		setInitParameterInteger(PREFFIX + "FACES_FLOW_CLIENT_WINDOW_IDS_IN_SESSION", this.myfacesProperties.getFacesFlowClientWindowIdsInSession());
		setInitParameterBoolean(PREFFIX + "USE_ENCRYPTION", this.myfacesProperties.getUseEncryption());
		setInitParameterString(PREFFIX + "SECRET", this.myfacesProperties.getSecret());
		setInitParameterString(PREFFIX + "ALGORITHM", this.myfacesProperties.getAlgorithm());
		setInitParameterBoolean(PREFFIX + "SECRET.CACHE", this.myfacesProperties.getSecretCache());
		setInitParameterString(PREFFIX + "ALGORITHM.IV", this.myfacesProperties.getAlgorithmIv());
		setInitParameterString(PREFFIX + "ALGORITHM.PARAMETERS", this.myfacesProperties.getAlgorithmParameters());
		setInitParameterString(PREFFIX + "SERIAL_FACTORY", this.myfacesProperties.getSerialFactory());
		setInitParameterBoolean(PREFFIX + "COMPRESS_STATE_IN_CLIENT", this.myfacesProperties.getCompressStateInClient());
		setInitParameterString(PREFFIX + "MAC_ALGORITHM", this.myfacesProperties.getMacAlgorithm());
		setInitParameterString(PREFFIX + "MAC_SECRET", this.myfacesProperties.getMacSecret());
		setInitParameterBoolean(PREFFIX + "MAC_SECRET.CACHE", this.myfacesProperties.getMacSecretCache());
		setInitParameterString(StateCache.RANDOM_KEY_IN_CSRF_SESSION_TOKEN_PARAM, this.myfacesProperties.getRandomKeyInCsrfSessionToken());
		setInitParameterInteger(StateCache.RANDOM_KEY_IN_CSRF_SESSION_TOKEN_LENGTH_PARAM, this.myfacesProperties.getRandomKeyInCsrfSessionTokenLength());
		setInitParameterString(StateCache.RANDOM_KEY_IN_CSRF_SESSION_TOKEN_SECURE_RANDOM_CLASS_PARAM, this.myfacesProperties.getRandomKeyInCsrfSessionTokenSecureRandomClass());
		setInitParameterString(StateCache.RANDOM_KEY_IN_CSRF_SESSION_TOKEN_SECURE_RANDOM_PROVIDER_PARAM, this.myfacesProperties.getRandomKeyInCsrfSessionTokenSecureRandomProvider());
		setInitParameterString(StateCache.RANDOM_KEY_IN_CSRF_SESSION_TOKEN_SECURE_RANDOM_ALGORITM_PARAM, this.myfacesProperties.getRandomKeyInCsrfSessionTokenSecureRandomAlgoritm());
		setInitParameterInteger(PREFFIX + "CLIENT_VIEW_STATE_TIMEOUT", this.myfacesProperties.getClientViewStateTimeout());
		setInitParameterBoolean(PREFFIX + "COMPRESS_STATE_IN_SESSION", this.myfacesProperties.getCompressStateInSession());
		setInitParameterBoolean(PREFFIX + "USE_FLASH_SCOPE_PURGE_VIEWS_IN_SESSION", this.myfacesProperties.getUseFlashScopePurgeViewsInSession());
		setInitParameterString(PREFFIX + "RANDOM_KEY_IN_VIEW_STATE_SESSION_TOKEN", this.myfacesProperties.getRandomKeyInViewStateSessionToken());
		setInitParameterInteger(PREFFIX + "RANDOM_KEY_IN_VIEW_STATE_SESSION_TOKEN_LENGTH", this.myfacesProperties.getRandomKeyInViewStateSessionTokenLength());
		setInitParameterString(PREFFIX + "RANDOM_KEY_IN_VIEW_STATE_SESSION_TOKEN_SECURE_RANDOM_CLASS", this.myfacesProperties.getRandomKeyInViewStateSessionTokenSecureRandomClass());
		setInitParameterString(PREFFIX + "RANDOM_KEY_IN_VIEW_STATE_SESSION_TOKEN_SECURE_RANDOM_PROVIDER", this.myfacesProperties.getRandomKeyInViewStateSessionTokenSecureRandomProvider());
		setInitParameterString(PREFFIX + "RANDOM_KEY_IN_VIEW_STATE_SESSION_TOKEN_SECURE_RANDOM_ALGORITM", this.myfacesProperties.getRandomKeyInViewStateSessionTokenSecureRandomAlgorithm());
		setInitParameterBoolean(HtmlResponseStateManager.INIT_PARAM_AUTOCOMPLETE_OFF_VIEW_STATE, this.myfacesProperties.getAutocompleteOffViewState());
		setInitParameterString(DefaultFaceletsStateManagementStrategy.CHECK_ID_PRODUCTION_MODE, this.myfacesProperties.getCheckIdProductionMode());
	}

	private void configureConversionAndValidation() {
		setInitParameterBoolean(PREFFIX + "ENUM_CONVERTER_ALLOW_STRING_PASSTROUGH", this.myfacesProperties.getEnumConverterAllowStringPasstrough());
		setInitParameterBoolean(PREFFIX + "validator.BEAN_BEFORE_JSF_VALIDATION", this.myfacesProperties.getValidator().getBeanBeforeJsfValidation());
	}

	private void configureViewHandling() {
		setInitParameterInteger(PREFFIX + "CHECKED_VIEWID_CACHE_SIZE", this.myfacesProperties.getCheckedViewidCacheSize());
		setInitParameterBoolean(PREFFIX + "CHECKED_VIEWID_CACHE_ENABLED", this.myfacesProperties.getCheckedViewidCacheEnabled());
		setInitParameterBoolean(PREFFIX + "VIEW_UNIQUE_IDS_CACHE_ENABLED", this.myfacesProperties.getViewUniqueIdsCacheEnabled());
		setInitParameterInteger(PREFFIX + "COMPONENT_UNIQUE_IDS_CACHE_SIZE", this.myfacesProperties.getComponentUniqueIdsCacheSize());
		setInitParameterBoolean(PREFFIX + "STRICT_JSF_2_VIEW_NOT_FOUND", this.myfacesProperties.getStrictJsf2ViewNotFound());
		setInitParameterBoolean(PREFFIX + "STRICT_JSF_2_FACELETS_COMPATIBILITY", this.myfacesProperties.getStrictJsf2FaceletsCompatibility());
	}

	private void configureOther() {
		setInitParameterInteger(PREFFIX + "CONFIG_REFRESH_PERIOD", this.myfacesProperties.getConfigRefreshPeriod());
		setInitParameterString(PREFFIX + "DELEGATE_FACES_SERVLET", this.myfacesProperties.getDelegateFacesServlet());
		setInitParameterBoolean(PREFFIX + "VALIDATE_XML", this.myfacesProperties.getValidateXml());
		setInitParameterBoolean(PREFFIX + "DEBUG_PHASE_LISTENER", this.myfacesProperties.getDebugPhaseListener());
		setInitParameterBoolean(PREFFIX + "STRICT_JSF_2_REFRESH_TARGET_AJAX", this.myfacesProperties.getStrictJsf2RefreshTargetAjax());
		setInitParameterString(PREFFIX + "GAE_JSF_JAR_FILES", this.myfacesProperties.getGaeJsfJarFiles());
		setInitParameterString(PREFFIX + "GAE_JSF_ANNOTATIONS_JAR_FILES", this.myfacesProperties.getGaeJsfAnnotationsJarFiles());
		setInitParameterBoolean(PREFFIX + "FLASH_SCOPE_DISABLED", this.myfacesProperties.getFlashScopeDisabled());
		setInitParameterBoolean(PREFFIX + "LAZY_LOAD_CONFIG_OBJECTS", this.myfacesProperties.getLazyLoadConfigObjects());
		setInitParameterBoolean(FacesConfigValidator.VALIDATE_CONTEXT_PARAM, this.myfacesProperties.getValidate());
		setInitParameterBoolean(PREFFIX + "INITIALIZE_SKIP_JAR_FACES_CONFIG_SCAN", this.myfacesProperties.getInitializeSkipJarFacesConfigScan());
		setInitParameterString(ClientWindowFactoryImpl.INIT_PARAM_DEFAULT_WINDOW_MODE, this.myfacesProperties.getDefaultWindowMode());
		setInitParameterString(PREFFIX + "ERROR_TEMPLATE_RESOURCE", this.myfacesProperties.getErrorTemplateResource());
		setInitParameterString(PREFFIX + "DEBUG_TEMPLATE_RESOURCE", this.myfacesProperties.getDebugTemplateResource());
		setInitParameterBoolean(ErrorPageWriter.ERROR_HANDLING_PARAMETER, this.myfacesProperties.getErrorHandling());
		setInitParameterBoolean(PREFFIX + "TEMPORAL_RESOURCEHANDLER_CACHE_ENABLED", this.myfacesProperties.getTemporalResourcehandlerCacheEnabled());
		setInitParameterBoolean(PREFFIX + "SERVICE_PROVIDER_FINDER", this.myfacesProperties.getServiceProviderFinder());
		setInitParameterString(PREFFIX + "spi.InjectionProvider", this.myfacesProperties.getSpi().getInjectionProvider());
		setInitParameterBoolean(PREFFIX + "MARK_INITIAL_STATE_WHEN_APPLY_BUILD_VIEW", this.myfacesProperties.getMarkInitialStateWhenApplyBuildView());
		setInitParameterBoolean(ContextAwareUtils.INIT_PARAM_WRAP_TAG_EXCEPTIONS_AS_CONTEXT_AWARE, this.myfacesProperties.getWrapTagExceptionsAsContextAware());
		setInitParameterInteger(ViewPool.INIT_PARAM_VIEW_POOL_MAX_POOL_SIZE, this.myfacesProperties.getViewPoolMaxPoolSize());
		setInitParameterInteger(ViewPool.INIT_PARAM_VIEW_POOL_MAX_DYNAMIC_PARTIAL_LIMIT, this.myfacesProperties.getViewPoolMaxDynamicPartialLimit());
		setInitParameterString(ViewPool.INIT_PARAM_VIEW_POOL_ENTRY_MODE, this.myfacesProperties.getViewPoolEntryMode());
		setInitParameterBoolean(ViewPool.INIT_PARAM_VIEW_POOL_DEFERRED_NAVIGATION, this.myfacesProperties.getViewPoolDeferredNavigation());
		setInitParameterString(AbstractFacesInitializer.INIT_PARAM_LOG_WEB_CONTEXT_PARAMS, this.myfacesProperties.getLogWebContextParams());
		setInitParameterString(PREFFIX + "FACES_INITIALIZER", this.myfacesProperties.getFacesInitializer());
		setInitParameterString(PREFFIX + "FACES_INIT_PLUGINS", this.myfacesProperties.getFacesInitPlugins());
		setInitParameterBoolean(CdiAnnotationProviderExtension.USE_CDI_FOR_ANNOTATION_SCANNING, this.myfacesProperties.getAnnotation().getUseCdiForAnnotationScanning());
		setInitParameterString(DefaultAnnotationProvider.SCAN_PACKAGES, this.myfacesProperties.getAnnotation().getScanPackages());
		setInitParameterBoolean(PREFFIX + "INITIALIZE_ALWAYS_STANDALONE", this.myfacesProperties.getInitializeAlwaysStandalone());
	}

	private void configureDeprecated() {
		setInitParameterString(PREFFIX + "ERROR_HANDLER", this.myfacesProperties.getErrorHandler());
		setInitParameterBoolean(PREFFIX + "VIEWSTATE_JAVASCRIPT", this.myfacesProperties.getViewstateJavascript());
		setInitParameterBoolean(PREFFIX + "SERIALIZE_STATE_IN_SESSION", this.myfacesProperties.getSerializeStateInSession());
		setInitParameterBoolean(PREFFIX + "CACHE_OLD_VIEWS_IN_SESSION_MODE", this.myfacesProperties.getCacheOldViewsInSessionMode());
		setInitParameterBoolean(HtmlResponseStateManager.INIT_PARAM_HANDLE_STATE_CACHING_MECHANICS, this.myfacesProperties.getHandleStateCachingMechanics());
		setInitParameterBoolean(DefaultFaceletsStateManagementStrategy.SAVE_STATE_WITH_VISIT_TREE_ON_PSS, this.myfacesProperties.getSaveStateWithVisitTreeOnPass());
	}

	@Override
	public void configure() {
		configureExpressionLanguage();
		configureCDI();
		configureRendering();
		configureResources();
		configureStateSaving();
		configureConversionAndValidation();
		configureViewHandling();
		configureOther();
		configureDeprecated();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy