From fd7f35113f8d11e1a8b813867d994d7fe4d44f93 Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Thu, 6 Mar 2008 22:03:23 +0000 Subject: [PATCH] separated out the concept of a template normalized EL and OGNL to respect this concept --- .../support/TextToTargetStateResolver.java | 2 +- .../support/TextToTransitionCriteria.java | 26 +-------- .../engine/builder/xml/XmlFlowBuilder.java | 10 ++-- .../engine/builder/xml/spring-webflow-2.0.xsd | 54 ++++++++++++++----- .../action/AttributeMapperActionTests.java | 4 +- ...lderServicesBeanDefinitionParserTests.java | 5 ++ .../webflow/engine/EndStateTests.java | 2 +- .../webflow/engine/FlowTests.java | 6 +-- .../engine/builder/xml/flow-inputoutput.xml | 21 ++++---- .../webflow/test/search-flow.xml | 8 +-- 10 files changed, 76 insertions(+), 62 deletions(-) diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTargetStateResolver.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTargetStateResolver.java index 26c732c8..a56ce6cb 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTargetStateResolver.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTargetStateResolver.java @@ -75,7 +75,7 @@ class TextToTargetStateResolver extends AbstractConverter { if (targetStateId.startsWith(BEAN_PREFIX)) { return flowBuilderContext.getBeanFactory().getBean(targetStateId.substring(BEAN_PREFIX.length())); } else { - Expression expression = parser.parseExpression(targetStateId, new ParserContextImpl().eval( + Expression expression = parser.parseExpression(targetStateId, new ParserContextImpl().template().eval( RequestContext.class).expect(String.class)); return new DefaultTargetStateResolver(expression); } diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTransitionCriteria.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTransitionCriteria.java index 864e1620..778f1d61 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTransitionCriteria.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTransitionCriteria.java @@ -21,14 +21,12 @@ import org.springframework.binding.convert.support.AbstractConverter; import org.springframework.binding.expression.Expression; import org.springframework.binding.expression.ExpressionParser; import org.springframework.binding.expression.ExpressionVariable; -import org.springframework.binding.expression.ognl.OgnlExpressionParser; import org.springframework.binding.expression.support.ParserContextImpl; import org.springframework.util.StringUtils; import org.springframework.webflow.engine.TransitionCriteria; import org.springframework.webflow.engine.WildcardTransitionCriteria; import org.springframework.webflow.engine.builder.FlowBuilderContext; import org.springframework.webflow.engine.support.BooleanExpressionTransitionCriteria; -import org.springframework.webflow.engine.support.EventIdTransitionCriteria; import org.springframework.webflow.execution.RequestContext; /** @@ -89,30 +87,10 @@ class TextToTransitionCriteria extends AbstractConverter { return flowBuilderContext.getBeanFactory().getBean(encodedCriteria.substring(BEAN_PREFIX.length()), TransitionCriteria.class); } else { - if (parser instanceof OgnlExpressionParser) { - // 1.0 compatability - OgnlExpressionParser ognl = (OgnlExpressionParser) parser; - if (ognl.isTemplateExpression(encodedCriteria)) { - return createBooleanExpressionTransitionCriteria(encodedCriteria, parser); - } else { - return createEventIdTransitionCriteria(encodedCriteria); - } - } else { - return createBooleanExpressionTransitionCriteria(encodedCriteria, parser); - } + return createBooleanExpressionTransitionCriteria(encodedCriteria, parser); } } - /** - * Hook method subclasses can override to return a specialized eventId matching transition criteria implementation. - * @param eventId the event id to match - * @return the transition criteria object - * @throws ConversionException when something goes wrong - */ - protected TransitionCriteria createEventIdTransitionCriteria(String eventId) throws ConversionException { - return new EventIdTransitionCriteria(eventId); - } - /** * Hook method subclasses can override to return a specialized expression evaluating transition criteria * implementation. @@ -123,7 +101,7 @@ class TextToTransitionCriteria extends AbstractConverter { */ protected TransitionCriteria createBooleanExpressionTransitionCriteria(String encodedCriteria, ExpressionParser parser) throws ConversionException { - Expression expression = parser.parseExpression(encodedCriteria, new ParserContextImpl().eval( + Expression expression = parser.parseExpression(encodedCriteria, new ParserContextImpl().template().eval( RequestContext.class).variable(new ExpressionVariable("result", "lastEvent.id"))); return new BooleanExpressionTransitionCriteria(expression); } diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/XmlFlowBuilder.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/XmlFlowBuilder.java index 5d2f7776..f54daad4 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/XmlFlowBuilder.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/XmlFlowBuilder.java @@ -543,7 +543,7 @@ public class XmlFlowBuilder extends AbstractFlowBuilder implements ResourceHolde private Expression parseSubflowExpression(Element element) { String subflow = element.getAttribute("subflow"); Expression subflowId = getExpressionParser().parseExpression(subflow, - new ParserContextImpl().eval(RequestContext.class).expect(String.class)); + new ParserContextImpl().template().eval(RequestContext.class).expect(String.class)); return new SubflowExpression(subflowId, getLocalContext().getFlowDefinitionLocator()); } @@ -595,26 +595,26 @@ public class XmlFlowBuilder extends AbstractFlowBuilder implements ResourceHolde } else { encodedView = getLocalContext().getViewFactoryCreator().createViewIdByConvention(parseId(element)); Expression viewName = getExpressionParser().parseExpression(encodedView, - new ParserContextImpl().eval(RequestContext.class).expect(String.class)); + new ParserContextImpl().template().eval(RequestContext.class).expect(String.class)); return getLocalContext().getViewFactoryCreator().createViewFactory(viewName, getLocalContext().getResourceLoader()); } } else if (encodedView.startsWith("externalRedirect:")) { String encodedUrl = encodedView.substring("externalRedirect:".length()); Expression externalUrl = getExpressionParser().parseExpression(encodedUrl, - new ParserContextImpl().eval(RequestContext.class).expect(String.class)); + new ParserContextImpl().template().eval(RequestContext.class).expect(String.class)); return new ActionExecutingViewFactory(new ExternalRedirectAction(externalUrl)); } else if (encodedView.startsWith("flowRedirect:")) { String flowRedirect = encodedView.substring("flowRedirect:".length()); Expression expression = getExpressionParser().parseExpression(flowRedirect, - new ParserContextImpl().eval(RequestContext.class).expect(String.class)); + new ParserContextImpl().template().eval(RequestContext.class).expect(String.class)); return new ActionExecutingViewFactory(new FlowDefinitionRedirectAction(expression)); } else if (encodedView.startsWith("bean:")) { return (ViewFactory) getLocalContext().getBeanFactory().getBean(encodedView.substring("bean:".length()), ViewFactory.class); } else { Expression viewName = getExpressionParser().parseExpression(encodedView, - new ParserContextImpl().eval(RequestContext.class).expect(String.class)); + new ParserContextImpl().template().eval(RequestContext.class).expect(String.class)); return getLocalContext().getViewFactoryCreator().createViewFactory(viewName, getLocalContext().getResourceLoader()); } diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/spring-webflow-2.0.xsd b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/spring-webflow-2.0.xsd index fdc29af3..dd99b1ad 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/spring-webflow-2.0.xsd +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/spring-webflow-2.0.xsd @@ -41,11 +41,40 @@ The unique identifier of this state; must be unique to this flow. + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -656,11 +685,12 @@ If specified and the result is not compatible with the expected type, a type con - + @@ -723,7 +753,7 @@ Secures this transition. - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - - - - + + + + + \ No newline at end of file diff --git a/spring-webflow/src/test/java/org/springframework/webflow/test/search-flow.xml b/spring-webflow/src/test/java/org/springframework/webflow/test/search-flow.xml index 9d524247..73060941 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/test/search-flow.xml +++ b/spring-webflow/src/test/java/org/springframework/webflow/test/search-flow.xml @@ -5,23 +5,23 @@ - + - + - + - +