Package org.springframework.faces.config

Source Code of org.springframework.faces.config.FlowBuilderServicesBuilder

/*
* Copyright 2004-2014 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.springframework.faces.config;

import org.springframework.binding.convert.ConversionService;
import org.springframework.binding.convert.service.DefaultConversionService;
import org.springframework.binding.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.faces.model.converter.FacesConversionService;
import org.springframework.faces.webflow.FacesSpringELExpressionParser;
import org.springframework.faces.webflow.JsfViewFactoryCreator;
import org.springframework.util.Assert;
import org.springframework.validation.Validator;
import org.springframework.webflow.engine.builder.ViewFactoryCreator;
import org.springframework.webflow.engine.builder.support.FlowBuilderServices;
import org.springframework.webflow.expression.spel.WebFlowSpringELExpressionParser;
import org.springframework.webflow.validation.BeanValidationHintResolver;
import org.springframework.webflow.validation.ValidationHintResolver;

/**
* A builder for {@link FlowBuilderServices} instances for use in JSF applications.
* Designed for programmatic use in {@code @Bean} factory methods. For XML
* configuration consider using the {@code webflow-config} and {@code faces-config}
* XML namespaces.
*
* @author Rossen Stoyanchev
* @since 2.4
*/
public class FlowBuilderServicesBuilder {

  private boolean enableManagedBeans = false;

  private ConversionService conversionService = new FacesConversionService();

  private ExpressionParser expressionParser;

  private ViewFactoryCreator viewFactoryCreator = new JsfViewFactoryCreator();

  private Validator validator;

  private ValidationHintResolver validationHintResolver;

  private boolean enableDevelopmentMode;


  /**
   * Whether to enable access to JSF-managed beans from EL expressions.
   * When this attribute is set to true, a special EL expression parser will be registered.
   * @param enableManagedBeans whether to enable JSF managed bean resolution
   */
  public FlowBuilderServicesBuilder setEnableManagedBeans(boolean enableManagedBeans) {
    this.enableManagedBeans = enableManagedBeans;
    return this;
  }

  /**
   * Set the {@link ConversionService} to use.
   * By default a {@link DefaultConversionService} instance is used.
   * @param conversionService the conversion service
   */
  public FlowBuilderServicesBuilder setConversionService(ConversionService conversionService) {
    this.conversionService = conversionService;
    return this;
  }

  /**
   * Set the {@link ExpressionParser} to use.
   * By default a {@link WebFlowSpringELExpressionParser} with SpEL expressions is used.
   * @param expressionParser the expression parser to use
   */
  public FlowBuilderServicesBuilder setExpressionParser(ExpressionParser expressionParser) {
    this.expressionParser = expressionParser;
    return this;
  }

  /**
   * Set a custom {@link ViewFactoryCreator} to use for rendering.
   * By default an {@link JsfViewFactoryCreator} instance is used.
   * @param viewFactoryCreator the ViewFactory creator to use
   */
  public FlowBuilderServicesBuilder setViewFactoryCreator(ViewFactoryCreator viewFactoryCreator) {
    this.viewFactoryCreator = viewFactoryCreator;
    return this;
  }

  /**
   * Set the {@link Validator} to use for validating a model declared on a view state.
   * By default no validator is set.
   * @param validator the validator to use
   */
  public FlowBuilderServicesBuilder setValidator(Validator validator) {
    this.validator = validator;
    return this;
  }

  /**
   * The {@link ValidationHintResolver} to use to resolve validation hints such as bean validation groups.
   * By default a {@link BeanValidationHintResolver} is used.
   * @param resolver the resolver to use
   */
  public FlowBuilderServicesBuilder setValidationHintResolver(ValidationHintResolver resolver) {
    this.validationHintResolver = resolver;
    return this;
  }

  /**
   * Put all flows in development mode. When set to {@code true}, changes to a flow
   * definition are auto-detected and result in a flow refresh.
   * By default this is set to {@code false}
   * @param enableDevelopmentMode whether to enable development mode
   */
  public FlowBuilderServicesBuilder setDevelopmentMode(boolean enableDevelopmentMode) {
    this.enableDevelopmentMode = enableDevelopmentMode;
    return this;
  }

  /**
   * Create and return a {@link FlowBuilderServices} instance.
   */
  public FlowBuilderServices build() {
    FlowBuilderServices flowBuilderServices = new FlowBuilderServices();
    flowBuilderServices.setConversionService(this.conversionService);
    flowBuilderServices.setExpressionParser(getExpressionParser());
    flowBuilderServices.setViewFactoryCreator(this.viewFactoryCreator);
    flowBuilderServices.setValidator(this.validator);
    flowBuilderServices.setValidationHintResolver(this.validationHintResolver);
    flowBuilderServices.setDevelopment(this.enableDevelopmentMode);
    return flowBuilderServices;
  }

  private ExpressionParser getExpressionParser() {
    if (this.expressionParser != null) {
      Assert.isTrue(!this.enableManagedBeans,
          "Do not specify a custom expression-parser when enable-managed-beans is true");
      return this.expressionParser;
    }
    else {
      return (this.enableManagedBeans ?
          new FacesSpringELExpressionParser(new SpelExpressionParser(), this.conversionService) :
          new WebFlowSpringELExpressionParser(new SpelExpressionParser(), this.conversionService));
    }
  }

}
TOP

Related Classes of org.springframework.faces.config.FlowBuilderServicesBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.