From 65ced6b3aaa5da44904a1fec33d2333cb4c417bb Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Fri, 11 Apr 2008 16:15:36 +0000 Subject: [PATCH] SWF-573 --- .../FlowExecutorBeanDefinitionParser.java | 34 +++++++++++-------- .../config/FlowExecutorFactoryBean.java | 2 +- .../config/spring-webflow-config-2.0.xsd | 2 +- ...FlowExecutorBeanDefinitionParserTests.java | 4 ++- .../webflow/config/flow-executor.xml | 4 +-- 5 files changed, 26 insertions(+), 20 deletions(-) diff --git a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorBeanDefinitionParser.java b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorBeanDefinitionParser.java index 6f3d84b9..9c317d78 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorBeanDefinitionParser.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorBeanDefinitionParser.java @@ -41,7 +41,7 @@ class FlowExecutorBeanDefinitionParser extends AbstractSingleBeanDefinitionParse private static final String EXECUTION_ATTRIBUTES_ELEMENT = "flow-execution-attributes"; - private static final String ALWAYS_REDIRECT_ON_PAUSE_ELEMENT = "alwaysRedirectOnPause"; + private static final String ALWAYS_REDIRECT_ON_PAUSE_ELEMENT = "always-redirect-on-pause"; private static final String ATTRIBUTE_ELEMENT = "attribute"; @@ -57,7 +57,7 @@ class FlowExecutorBeanDefinitionParser extends AbstractSingleBeanDefinitionParse private static final String MAX_CONVERSATIONS_ATTRIBUTE = "max-conversations"; - private static final String REGISTRY_REF_ATTRIBUTE = "flow-registry"; + private static final String REGISTRY_ATTRIBUTE = "flow-registry"; private static final String REPOSITORY_ELEMENT = "flow-execution-repository"; @@ -82,7 +82,7 @@ class FlowExecutorBeanDefinitionParser extends AbstractSingleBeanDefinitionParse } protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder definitionBuilder) { - definitionBuilder.addPropertyReference(DEFINITION_LOCATOR_PROPERTY, getRegistryRef(element, parserContext)); + definitionBuilder.addPropertyReference(DEFINITION_LOCATOR_PROPERTY, getRegistry(element, parserContext)); definitionBuilder.addPropertyValue(EXECUTION_ATTRIBUTES_PROPERTY, parseAttributes(element)); addExecutionListenerLoader(element, parserContext, definitionBuilder); configureRepository(element, definitionBuilder, parserContext); @@ -98,7 +98,10 @@ class FlowExecutorBeanDefinitionParser extends AbstractSingleBeanDefinitionParse ParserContext parserContext) { Element repositoryElement = DomUtils.getChildElementByTagName(element, REPOSITORY_ELEMENT); if (repositoryElement != null) { - definitionBuilder.addPropertyValue(REPOSITORY_TYPE_PROPERTY, getType(repositoryElement)); + String type = getType(element); + if (StringUtils.hasText(type)) { + definitionBuilder.addPropertyValue(REPOSITORY_TYPE_PROPERTY, type); + } configureContinuations(repositoryElement, definitionBuilder, parserContext); configureConversationManager(repositoryElement, definitionBuilder, parserContext); } @@ -114,9 +117,10 @@ class FlowExecutorBeanDefinitionParser extends AbstractSingleBeanDefinitionParse ParserContext parserContext) { String maxContinuations = getMaxContinuations(repositoryElement); if (StringUtils.hasText(maxContinuations)) { - if (!getType(repositoryElement).equals("CONTINUATION")) { + String type = getType(repositoryElement); + if (StringUtils.hasText(type) && !type.toLowerCase().equals("CONTINUATION")) { parserContext.getReaderContext().error( - "The 'max-continuations' attribute of the 'repository' element must not " + "The 'max-continuations' attribute of the 'flow-execution-repository' element must not " + "have a value if the 'type' attribute is not 'continuation'", repositoryElement); } definitionBuilder.addPropertyValue(MAX_CONTINUATIONS_PROPERTY, maxContinuations); @@ -136,8 +140,8 @@ class FlowExecutorBeanDefinitionParser extends AbstractSingleBeanDefinitionParse if (StringUtils.hasText(conversationManagerRef)) { if (StringUtils.hasText(maxConversations)) { parserContext.getReaderContext().error( - "The 'max-conversations' attribute of the 'repository' element must not " - + "have a value if there is a value for the 'conversation-manager-ref' attribute", + "The 'max-conversations' attribute of the 'flow-execution-repository' element must not " + + "have a value if there is a value for the 'conversation-manager' attribute", repositoryElement); } definitionBuilder.addPropertyReference(CONVERSATION_MANAGER_PROPERTY, conversationManagerRef); @@ -152,13 +156,13 @@ class FlowExecutorBeanDefinitionParser extends AbstractSingleBeanDefinitionParse * @return the name of the registry * @param parserContext the parserContext */ - private String getRegistryRef(Element element, ParserContext parserContext) { - String registryRef = element.getAttribute(REGISTRY_REF_ATTRIBUTE); - if (!StringUtils.hasText(registryRef)) { - parserContext.getReaderContext().error( - "The 'registry-ref' attribute of the 'flow-executor' element must have a value", element); + private String getRegistry(Element element, ParserContext parserContext) { + String registry = element.getAttribute(REGISTRY_ATTRIBUTE); + if (!StringUtils.hasText(registry)) { + return "flowRegistry"; + } else { + return registry; } - return registryRef; } /** @@ -167,7 +171,7 @@ class FlowExecutorBeanDefinitionParser extends AbstractSingleBeanDefinitionParse * @return the type of the repository */ private String getType(Element element) { - return element.getAttribute(TYPE_ATTRIBUTE).toUpperCase(); + return element.getAttribute(TYPE_ATTRIBUTE); } /** diff --git a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorFactoryBean.java b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorFactoryBean.java index 6f6e1a2b..eece9b38 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorFactoryBean.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorFactoryBean.java @@ -264,7 +264,7 @@ class FlowExecutorFactoryBean implements FactoryBean, InitializingBean { if (conversationManager == null) { conversationManager = createDefaultConversationManager(); } - if (repositoryType == FlowExecutionRepositoryType.CONTINUATION) { + if (repositoryType == null || repositoryType == FlowExecutionRepositoryType.CONTINUATION) { DefaultFlowExecutionRepository repository = new DefaultFlowExecutionRepository(conversationManager, executionStateRestorer); if (maxContinuations != null) { diff --git a/spring-webflow/src/main/java/org/springframework/webflow/config/spring-webflow-config-2.0.xsd b/spring-webflow/src/main/java/org/springframework/webflow/config/spring-webflow-config-2.0.xsd index 95e93c8c..c30bca6c 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/config/spring-webflow-config-2.0.xsd +++ b/spring-webflow/src/main/java/org/springframework/webflow/config/spring-webflow-config-2.0.xsd @@ -388,7 +388,7 @@ Example: 'flow1,flow2,flow3'. - + - + - +