Applying Christian's suggested patch to get rid of unnecessary dependencies.

This commit is contained in:
Jeremy Grelle
2008-09-19 17:58:42 +00:00
parent cfee84ad5d
commit ea81534a64

View File

@@ -15,29 +15,34 @@
*/
package org.springframework.faces.config;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.parsing.BeanComponentDefinition;
import org.springframework.beans.factory.parsing.CompositeComponentDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.binding.expression.el.DefaultExpressionFactoryUtils;
import org.springframework.faces.model.converter.FacesConversionService;
import org.springframework.faces.webflow.JsfManagedBeanAwareELExpressionParser;
import org.springframework.faces.webflow.JsfViewFactoryCreator;
import org.springframework.util.StringUtils;
import org.springframework.webflow.engine.builder.support.FlowBuilderServices;
import org.springframework.webflow.expression.el.WebFlowELExpressionParser;
import org.w3c.dom.Element;
/**
* Parser for the flow-builder-services tag.
*
* @author Jeremy Grelle
* @author Christian Dupuis
*/
public class FacesFlowBuilderServicesBeanDefinitionParser extends AbstractSingleBeanDefinitionParser implements
BeanDefinitionParser {
// --------------------------- Full qualified class names ----------------------- //
private static final String DEFAULT_EXPRESSION_FACTORY_UTILS_CLASS_NAME = "org.springframework.binding.expression.el.DefaultExpressionFactoryUtils";
private static final String FACES_CONVERSION_SERVICE_CLASS_NAME = "org.springframework.faces.model.converter.FacesConversionService";
private static final String FLOW_BUILDER_SERVICES_CLASS_NAME = "org.springframework.webflow.engine.builder.support.FlowBuilderServices";
private static final String JSF_VIEW_FACTORY_CREATOR_CLASS_NAME = "org.springframework.faces.webflow.JsfViewFactoryCreator";
private static final String JSF_MANAGED_BEAN_AWARE_E_L_EXPRESSION_PARSER_CLASS_NAME = "org.springframework.faces.webflow.JsfManagedBeanAwareELExpressionParser";
private static final String WEBFLOW_EL_EXPRESSION_PARSER_CLASS_NAME = "org.springframework.webflow.expression.el.WebFlowELExpressionParser";
// --------------------------- XML Config Attributes ----------------------- //
private static final String CONVERSION_SERVICE_ATTR = "conversion-service";
private static final String DEVELOPMENT_ATTR = "development";
@@ -51,16 +56,22 @@ public class FacesFlowBuilderServicesBeanDefinitionParser extends AbstractSingle
private static final String EXPRESSION_PARSER_PROPERTY = "expressionParser";
private static final String VIEW_FACTORY_CREATOR_PROPERTY = "viewFactoryCreator";
protected Class getBeanClass(Element element) {
return FlowBuilderServices.class;
protected String getBeanClassName(Element element) {
return FLOW_BUILDER_SERVICES_CLASS_NAME;
}
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder definitionBuilder) {
CompositeComponentDefinition componentDefinition = new CompositeComponentDefinition(element.getLocalName(),
parserContext.extractSource(element));
parserContext.pushContainingComponent(componentDefinition);
parseConversionService(element, parserContext, definitionBuilder);
parseExpressionParser(element, parserContext, definitionBuilder, parseEnableManagedBeans(element,
definitionBuilder));
parseViewFactoryCreator(element, parserContext, definitionBuilder);
parseDevelopment(element, definitionBuilder);
parserContext.popAndRegisterContainingComponent();
}
private boolean parseEnableManagedBeans(Element element, BeanDefinitionBuilder definitionBuilder) {
@@ -76,9 +87,13 @@ public class FacesFlowBuilderServicesBeanDefinitionParser extends AbstractSingle
String conversionService = element.getAttribute(CONVERSION_SERVICE_ATTR);
if (!StringUtils.hasText(conversionService)) {
BeanDefinitionBuilder conversionServiceBuilder = BeanDefinitionBuilder
.genericBeanDefinition(FacesConversionService.class);
conversionService = BeanDefinitionReaderUtils.registerWithGeneratedName(conversionServiceBuilder
.getBeanDefinition(), context.getRegistry());
.genericBeanDefinition(FACES_CONVERSION_SERVICE_CLASS_NAME);
conversionService = context.getReaderContext().generateBeanName(
conversionServiceBuilder.getRawBeanDefinition());
conversionServiceBuilder.getRawBeanDefinition().setSource(context.extractSource(element));
conversionServiceBuilder.getRawBeanDefinition().setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
context.registerBeanComponent(new BeanComponentDefinition(conversionServiceBuilder.getBeanDefinition(),
conversionService));
}
definitionBuilder.addPropertyReference(CONVERSION_SERVICE_PROPERTY, conversionService);
}
@@ -87,9 +102,13 @@ public class FacesFlowBuilderServicesBeanDefinitionParser extends AbstractSingle
String viewFactoryCreator = element.getAttribute(VIEW_FACTORY_CREATOR_ATTR);
if (!StringUtils.hasText(viewFactoryCreator)) {
BeanDefinitionBuilder viewFactoryCreatorBuilder = BeanDefinitionBuilder
.genericBeanDefinition(JsfViewFactoryCreator.class);
viewFactoryCreator = BeanDefinitionReaderUtils.registerWithGeneratedName(viewFactoryCreatorBuilder
.getBeanDefinition(), context.getRegistry());
.genericBeanDefinition(JSF_VIEW_FACTORY_CREATOR_CLASS_NAME);
viewFactoryCreator = context.getReaderContext().generateBeanName(
viewFactoryCreatorBuilder.getRawBeanDefinition());
viewFactoryCreatorBuilder.getRawBeanDefinition().setSource(context.extractSource(element));
viewFactoryCreatorBuilder.getRawBeanDefinition().setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
context.registerBeanComponent(new BeanComponentDefinition(viewFactoryCreatorBuilder.getBeanDefinition(),
viewFactoryCreator));
}
definitionBuilder.addPropertyReference(VIEW_FACTORY_CREATOR_PROPERTY, viewFactoryCreator);
}
@@ -100,28 +119,35 @@ public class FacesFlowBuilderServicesBeanDefinitionParser extends AbstractSingle
String conversionService = getConversionService(definitionBuilder);
String expressionParser = element.getAttribute(EXPRESSION_PARSER_ATTR);
BeanDefinitionBuilder expressionFactoryBuilder = BeanDefinitionBuilder
.genericBeanDefinition(DefaultExpressionFactoryUtils.class);
expressionFactoryBuilder.setFactoryMethod("createExpressionFactory");
if (!StringUtils.hasText(expressionParser)) {
BeanDefinitionBuilder expressionFactoryBuilder = BeanDefinitionBuilder
.genericBeanDefinition(DEFAULT_EXPRESSION_FACTORY_UTILS_CLASS_NAME);
expressionFactoryBuilder.setFactoryMethod("createExpressionFactory");
BeanDefinitionBuilder expressionParserBuilder;
if (enableManagedBeans) {
expressionParserBuilder = BeanDefinitionBuilder
.genericBeanDefinition(JsfManagedBeanAwareELExpressionParser.class);
.genericBeanDefinition(JSF_MANAGED_BEAN_AWARE_E_L_EXPRESSION_PARSER_CLASS_NAME);
} else {
expressionParserBuilder = BeanDefinitionBuilder.genericBeanDefinition(WebFlowELExpressionParser.class);
expressionParserBuilder = BeanDefinitionBuilder
.genericBeanDefinition(WEBFLOW_EL_EXPRESSION_PARSER_CLASS_NAME);
}
expressionParserBuilder.addConstructorArgValue(expressionFactoryBuilder.getBeanDefinition());
expressionParserBuilder.addPropertyReference(CONVERSION_SERVICE_PROPERTY, conversionService);
expressionParser = BeanDefinitionReaderUtils.registerWithGeneratedName(expressionParserBuilder
.getBeanDefinition(), context.getRegistry());
expressionParser = context.getReaderContext().generateBeanName(
expressionParserBuilder.getRawBeanDefinition());
expressionParserBuilder.getRawBeanDefinition().setSource(context.extractSource(element));
expressionParserBuilder.getRawBeanDefinition().setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
context.registerBeanComponent(new BeanComponentDefinition(expressionParserBuilder.getBeanDefinition(),
expressionParser));
} else if (enableManagedBeans) {
throw new IllegalStateException(
"Do not specify a custom expression-parser when enable-managed-beans is true");
context.getReaderContext().error(
"Do not specify a custom expression-parser when enable-managed-beans is true",
context.extractSource(element));
}
definitionBuilder.addPropertyReference(EXPRESSION_PARSER_PROPERTY, expressionParser);