From 2cf1c71861c768f5dba8430e3b3bbe81f2fe6357 Mon Sep 17 00:00:00 2001 From: Scott Andrews Date: Mon, 24 Mar 2008 16:22:46 +0000 Subject: [PATCH] IN PROGRESS - issue SWF-550: Allow FlowModels to be marked abstract http://jira.springframework.org/browse/SWF-550 --- .../builder/model/FlowModelFlowBuilder.java | 3 +++ .../webflow/engine/model/FlowModel.java | 19 +++++++++++++++++++ .../builder/xml/XmlFlowModelBuilder.java | 1 + .../model/builder/xml/spring-webflow-2.0.xsd | 9 +++++++++ .../model/FlowModelFlowBuilderTests.java | 10 ++++++++++ 5 files changed, 42 insertions(+) diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilder.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilder.java index e862b9ba..99af02fd 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilder.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilder.java @@ -112,6 +112,9 @@ public class FlowModelFlowBuilder extends AbstractFlowBuilder { */ protected void doInit() throws FlowBuilderException { flowModel = flowModelHolder.getFlowModel(); + if ("true".equals(flowModel.getAbstract())) { + throw new FlowBuilderException("Abstract flow models cannot be instantiated."); + } initLocalFlowContext(); } diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/FlowModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/FlowModel.java index 23430000..1ea1532f 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/FlowModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/FlowModel.java @@ -47,6 +47,7 @@ import org.springframework.util.StringUtils; */ public class FlowModel extends AbstractModel { // private String id; + private String abztract; private String parent; private String startStateId; private LinkedList attributes; @@ -94,6 +95,24 @@ public class FlowModel extends AbstractModel { setBeanImports(merge(getBeanImports(), flow.getBeanImports())); } + /** + * @return the abstract + */ + public String getAbstract() { + return abztract; + } + + /** + * @param abztract the abstract to set + */ + public void setAbstract(String abztract) { + if (StringUtils.hasText(abztract)) { + this.abztract = abztract; + } else { + this.abztract = null; + } + } + /** * @return the parent */ diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/XmlFlowModelBuilder.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/XmlFlowModelBuilder.java index 5fd6f85d..418609b6 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/XmlFlowModelBuilder.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/XmlFlowModelBuilder.java @@ -220,6 +220,7 @@ public class XmlFlowModelBuilder implements FlowModelBuilder { private FlowModel parseFlow(Element element) { FlowModel flow = new FlowModel(); + flow.setAbstract(element.getAttribute("abstract")); flow.setParent(element.getAttribute("parent")); flow.setStartStateId(element.getAttribute("start-state")); flow.addAttributes(parseAttributes(element)); diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/spring-webflow-2.0.xsd b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/spring-webflow-2.0.xsd index 6d915f0e..e309bbca 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/spring-webflow-2.0.xsd +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/spring-webflow-2.0.xsd @@ -1012,6 +1012,15 @@ For example: + + + + + + + diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilderTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilderTests.java index e31db345..f2f0060b 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilderTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilderTests.java @@ -326,6 +326,16 @@ public class FlowModelFlowBuilderTests extends TestCase { assertEquals("end", flow.getStartState().getId()); } + public void testAbstractFlow() { + model.setAbstract("true"); + try { + getFlow(model); + fail("FlowBuilderException expected"); + } catch (FlowBuilderException e) { + // we want this + } + } + private Flow getFlow(FlowModel model) { FlowModelHolder holder = new StaticFlowModelHolder(model); FlowModelFlowBuilder builder = new FlowModelFlowBuilder(holder);