org.springframework.webflow.config.FlowBuilderServicesBuilder Maven / Gradle / Ivy
/*
* 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.webflow.config;
import org.springframework.binding.convert.ConversionService;
import org.springframework.binding.convert.service.DefaultConversionService;
import org.springframework.binding.expression.ExpressionParser;
import org.springframework.context.ApplicationContext;
import org.springframework.expression.spel.standard.SpelExpressionParser;
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.mvc.builder.MvcViewFactoryCreator;
import org.springframework.webflow.validation.BeanValidationHintResolver;
import org.springframework.webflow.validation.ValidationHintResolver;
/**
* A builder for creating {@link FlowBuilderServices} instances designed for programmatic
* use in {@code @Bean} factory methods. For XML configuration consider using the
* {@code webflow-config} XML namespace.
*
* @author Rossen Stoyanchev
* @since 2.4
*/
public class FlowBuilderServicesBuilder {
private ConversionService conversionService = new DefaultConversionService();
private ExpressionParser expressionParser;
private ViewFactoryCreator viewFactoryCreator;
private Validator validator;
private ValidationHintResolver validationHintResolver;
private boolean enableDevelopmentMode;
/**
* Create a new instance with the given ApplicationContext.
*
* @param applicationContext the ApplicationContext to use to initialize a
* default ViewFactoryCreator instance with.
*/
public FlowBuilderServicesBuilder(ApplicationContext applicationContext) {
Assert.notNull(applicationContext, "applicationContext is required");
this.viewFactoryCreator = initViewFactoryCreator(applicationContext);
}
private static ViewFactoryCreator initViewFactoryCreator(ApplicationContext applicationContext) {
MvcViewFactoryCreator viewFactoryCreator = new MvcViewFactoryCreator();
viewFactoryCreator.setApplicationContext(applicationContext);
return viewFactoryCreator;
}
/**
* 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 MvcViewFactoryCreator} 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 bean validation (JSR-303) is enabled if a bean validation provider is
* present on the classpath.
* @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) {
return this.expressionParser;
}
else {
return new WebFlowSpringELExpressionParser(new SpelExpressionParser(), this.conversionService);
}
}
}