From 415fce89088250f1178e62dd0e1a736b473ae8ad Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Mon, 14 Jul 2008 21:52:24 +0000 Subject: [PATCH] added binding model; remove unused code; fixed bug in var model merging --- .../engine/model/AbstractActionModel.java | 13 --- .../engine/model/AbstractMappingModel.java | 3 + .../engine/model/AbstractStateModel.java | 85 ++----------------- .../AbstractTransitionableStateModel.java | 55 +----------- .../engine/model/ActionStateModel.java | 28 +----- .../webflow/engine/model/AttributeModel.java | 3 + .../webflow/engine/model/BeanImportModel.java | 1 + .../engine/model/DecisionStateModel.java | 55 +----------- .../webflow/engine/model/EndStateModel.java | 15 +--- .../webflow/engine/model/EvaluateModel.java | 3 + .../webflow/engine/model/FlowModel.java | 51 ++++------- .../webflow/engine/model/IfModel.java | 3 + .../webflow/engine/model/RenderModel.java | 1 + .../webflow/engine/model/SecuredModel.java | 2 + .../webflow/engine/model/SetModel.java | 3 + .../engine/model/SubflowStateModel.java | 57 ++----------- .../webflow/engine/model/TransitionModel.java | 62 ++------------ .../webflow/engine/model/VarModel.java | 12 ++- .../webflow/engine/model/ViewStateModel.java | 62 +++++++------- .../builder/xml/XmlFlowModelBuilder.java | 18 ++++ .../model/builder/xml/spring-webflow-2.0.xsd | 29 +++++++ .../webflow/engine/model/FlowModelTests.java | 10 +-- .../webflow/engine/model/VarModelTests.java | 5 +- .../builder/xml/XmlFlowModelBuilderTests.java | 13 +++ .../xml/flow-viewstate-model-binding.xml | 9 ++ 25 files changed, 181 insertions(+), 417 deletions(-) create mode 100644 spring-webflow/src/test/java/org/springframework/webflow/engine/model/builder/xml/flow-viewstate-model-binding.xml diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractActionModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractActionModel.java index 4f2301dc..a480475f 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractActionModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractActionModel.java @@ -56,19 +56,6 @@ public abstract class AbstractActionModel extends AbstractModel { this.attributes = attributes; } - /** - * @param attribute the attribute to add - */ - public void addAttribute(AttributeModel attribute) { - if (attribute == null) { - return; - } - if (attributes == null) { - attributes = new LinkedList(); - } - attributes.add(attribute); - } - /** * @param attributes the attributes to add */ diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractMappingModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractMappingModel.java index d609de50..d3239851 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractMappingModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractMappingModel.java @@ -25,8 +25,11 @@ import org.springframework.util.StringUtils; public abstract class AbstractMappingModel extends AbstractModel { private String name; + private String value; + private String type; + private String required; /** diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractStateModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractStateModel.java index 349617fd..71665f72 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractStateModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractStateModel.java @@ -25,11 +25,17 @@ import org.springframework.util.StringUtils; * @author Scott Andrews */ public abstract class AbstractStateModel extends AbstractModel { + private String id; + private String parent; + private LinkedList attributes; + private SecuredModel secured; + private LinkedList onEntryActions; + private LinkedList exceptionHandlers; /** @@ -82,32 +88,6 @@ public abstract class AbstractStateModel extends AbstractModel { this.attributes = attributes; } - /** - * @param attribute the attribute to add - */ - public void addAttribute(AttributeModel attribute) { - if (attribute == null) { - return; - } - if (attributes == null) { - attributes = new LinkedList(); - } - attributes.add(attribute); - } - - /** - * @param attributes the attributes to add - */ - public void addAttributes(LinkedList attributes) { - if (attributes == null || attributes.isEmpty()) { - return; - } - if (this.attributes == null) { - this.attributes = new LinkedList(); - } - this.attributes.addAll(attributes); - } - /** * @return the secured */ @@ -136,32 +116,6 @@ public abstract class AbstractStateModel extends AbstractModel { this.onEntryActions = onEntryActions; } - /** - * @param onEntryAction the on entry action to add - */ - public void addOnEntryAction(AbstractActionModel onEntryAction) { - if (onEntryAction == null) { - return; - } - if (onEntryActions == null) { - onEntryActions = new LinkedList(); - } - onEntryActions.add(onEntryAction); - } - - /** - * @param onEntryActions the on entry actions to add - */ - public void addOnEntryActions(LinkedList onEntryActions) { - if (onEntryActions == null || onEntryActions.isEmpty()) { - return; - } - if (this.onEntryActions == null) { - this.onEntryActions = new LinkedList(); - } - this.onEntryActions.addAll(onEntryActions); - } - /** * @return the exception handlers */ @@ -176,29 +130,4 @@ public abstract class AbstractStateModel extends AbstractModel { this.exceptionHandlers = exceptionHandlers; } - /** - * @param exceptionHandler the exception handler to add - */ - public void addExceptionHandler(ExceptionHandlerModel exceptionHandler) { - if (exceptionHandler == null) { - return; - } - if (exceptionHandlers == null) { - exceptionHandlers = new LinkedList(); - } - exceptionHandlers.add(exceptionHandler); - } - - /** - * @param exceptionHandlers the exception handlers to add - */ - public void addExceptionHandlers(LinkedList exceptionHandlers) { - if (exceptionHandlers == null || exceptionHandlers.isEmpty()) { - return; - } - if (this.exceptionHandlers == null) { - this.exceptionHandlers = new LinkedList(); - } - this.exceptionHandlers.addAll(exceptionHandlers); - } -} +} \ No newline at end of file diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractTransitionableStateModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractTransitionableStateModel.java index f5b97053..f2a4960c 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractTransitionableStateModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractTransitionableStateModel.java @@ -23,7 +23,9 @@ import java.util.LinkedList; * @author Scott Andrews */ public abstract class AbstractTransitionableStateModel extends AbstractStateModel { + private LinkedList transitions; + private LinkedList onExitActions; /** @@ -40,32 +42,6 @@ public abstract class AbstractTransitionableStateModel extends AbstractStateMode this.transitions = transitions; } - /** - * @param transition the transition to add - */ - public void addTransition(TransitionModel transition) { - if (transition == null) { - return; - } - if (transitions == null) { - transitions = new LinkedList(); - } - transitions.add(transition); - } - - /** - * @param transitions the transitions to add - */ - public void addTransitions(LinkedList transitions) { - if (transitions == null || transitions.isEmpty()) { - return; - } - if (this.transitions == null) { - this.transitions = new LinkedList(); - } - this.transitions.addAll(transitions); - } - /** * @return the on exit actions */ @@ -80,29 +56,4 @@ public abstract class AbstractTransitionableStateModel extends AbstractStateMode this.onExitActions = onExitActions; } - /** - * @param onExitAction the on exit action to add - */ - public void addOnExitAction(AbstractActionModel onExitAction) { - if (onExitAction == null) { - return; - } - if (this.onExitActions == null) { - this.onExitActions = new LinkedList(); - } - this.onExitActions.add(onExitAction); - } - - /** - * @param onExitActions the on exit actions to add - */ - public void addOnExitsActions(LinkedList onExitActions) { - if (onExitActions == null || onExitActions.isEmpty()) { - return; - } - if (this.onExitActions == null) { - this.onExitActions = new LinkedList(); - } - this.onExitActions.addAll(onExitActions); - } -} +} \ No newline at end of file diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ActionStateModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ActionStateModel.java index d13fe639..e2ed3712 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ActionStateModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ActionStateModel.java @@ -24,6 +24,7 @@ import org.springframework.util.ObjectUtils; * @author Scott Andrews */ public class ActionStateModel extends AbstractTransitionableStateModel { + private LinkedList actions; /** @@ -68,29 +69,4 @@ public class ActionStateModel extends AbstractTransitionableStateModel { this.actions = actions; } - /** - * @param action the action to add - */ - public void addAction(AbstractActionModel action) { - if (action == null) { - return; - } - if (actions == null) { - actions = new LinkedList(); - } - actions.add(action); - } - - /** - * @param actions the actions to add - */ - public void addAction(LinkedList actions) { - if (actions == null || actions.isEmpty()) { - return; - } - if (this.actions == null) { - this.actions = new LinkedList(); - } - this.actions.addAll(actions); - } -} +} \ No newline at end of file diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AttributeModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AttributeModel.java index 30ebd896..cd737615 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AttributeModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AttributeModel.java @@ -26,8 +26,11 @@ import org.springframework.util.StringUtils; * @author Scott Andrews */ public class AttributeModel extends AbstractModel { + private String name; + private String type; + private String value; /** diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/BeanImportModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/BeanImportModel.java index c8f12b96..3d916caa 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/BeanImportModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/BeanImportModel.java @@ -26,6 +26,7 @@ import org.springframework.util.StringUtils; * @author Scott Andrews */ public class BeanImportModel extends AbstractModel { + private String resource; /** diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/DecisionStateModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/DecisionStateModel.java index 5d0b9b3d..86719bb9 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/DecisionStateModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/DecisionStateModel.java @@ -24,7 +24,9 @@ import org.springframework.util.ObjectUtils; * @author Scott Andrews */ public class DecisionStateModel extends AbstractStateModel { + private LinkedList ifs; + private LinkedList onExitActions; /** @@ -68,32 +70,6 @@ public class DecisionStateModel extends AbstractStateModel { this.ifs = ifs; } - /** - * @param conditional the if to add - */ - public void addIf(IfModel conditional) { - if (conditional == null) { - return; - } - if (ifs == null) { - ifs = new LinkedList(); - } - ifs.add(conditional); - } - - /** - * @param ifs the ifs to add - */ - public void addIf(LinkedList ifs) { - if (ifs == null || ifs.isEmpty()) { - return; - } - if (this.ifs == null) { - this.ifs = new LinkedList(); - } - this.ifs.addAll(ifs); - } - /** * @return the on exit actions */ @@ -108,29 +84,4 @@ public class DecisionStateModel extends AbstractStateModel { this.onExitActions = onExitActions; } - /** - * @param onExitAction the on exit action to add - */ - public void addOnExitAction(AbstractActionModel onExitAction) { - if (onExitAction == null) { - return; - } - if (onExitActions == null) { - onExitActions = new LinkedList(); - } - onExitActions.add(onExitAction); - } - - /** - * @param onExitActions the on exit actions to add - */ - public void addOnExitActions(LinkedList onExitActions) { - if (onExitActions == null || onExitActions.isEmpty()) { - return; - } - if (this.onExitActions == null) { - this.onExitActions = new LinkedList(); - } - this.onExitActions.addAll(onExitActions); - } -} +} \ No newline at end of file diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/EndStateModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/EndStateModel.java index b1723f2e..31c0b7c2 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/EndStateModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/EndStateModel.java @@ -25,8 +25,11 @@ import org.springframework.util.StringUtils; * @author Scott Andrews */ public class EndStateModel extends AbstractStateModel { + private String view; + private String commit; + private LinkedList outputs; /** @@ -120,16 +123,4 @@ public class EndStateModel extends AbstractStateModel { outputs.add(output); } - /** - * @param outputs the output mappings to add - */ - public void addOutputs(LinkedList outputs) { - if (outputs == null || outputs.isEmpty()) { - return; - } - if (this.outputs == null) { - this.outputs = new LinkedList(); - } - this.outputs.addAll(outputs); - } } diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/EvaluateModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/EvaluateModel.java index 0e66632e..60741293 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/EvaluateModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/EvaluateModel.java @@ -25,8 +25,11 @@ import org.springframework.util.StringUtils; * @author Scott Andrews */ public class EvaluateModel extends AbstractActionModel { + private String expression; + private String result; + private String resultType; /** 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 043f7843..f2988b5f 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 @@ -46,21 +46,35 @@ import org.springframework.util.StringUtils; * @author Scott Andrews */ public class FlowModel extends AbstractModel { - // private String id; + private String abztract; + private String parent; + private String startStateId; + private LinkedList attributes; + private SecuredModel secured; + private PersistenceContextModel persistenceContext; + private LinkedList vars; + private LinkedList inputs; + private LinkedList outputs; + private LinkedList onStartActions; + private LinkedList states; + private LinkedList globalTransitions; + private LinkedList onEndActions; + private LinkedList exceptionHandlers; + private LinkedList beanImports; /** @@ -448,13 +462,6 @@ public class FlowModel extends AbstractModel { addState(state); } - /** - * @param states the action states to add - */ - public void addActionStates(LinkedList states) { - addStates(states); - } - /** * @param state the view state to add */ @@ -462,13 +469,6 @@ public class FlowModel extends AbstractModel { addState(state); } - /** - * @param states the view states to add - */ - public void addViewStates(LinkedList states) { - addStates(states); - } - /** * @param state the decision state to add */ @@ -476,13 +476,6 @@ public class FlowModel extends AbstractModel { addState(state); } - /** - * @param states the decision states to add - */ - public void addDecisionStates(LinkedList states) { - addStates(states); - } - /** * @param state the subflow state to add */ @@ -490,13 +483,6 @@ public class FlowModel extends AbstractModel { addState(state); } - /** - * @param states the subflow states to add - */ - public void addSubflowStates(LinkedList states) { - addStates(states); - } - /** * @param state the end state to add */ @@ -504,13 +490,6 @@ public class FlowModel extends AbstractModel { addState(state); } - /** - * @param states the end states to add - */ - public void addEndStates(LinkedList states) { - addStates(states); - } - /** * @return the global transitions */ diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/IfModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/IfModel.java index a99d4827..c1709ee9 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/IfModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/IfModel.java @@ -28,8 +28,11 @@ import org.springframework.util.StringUtils; * @author Scott Andrews */ public class IfModel extends AbstractModel { + private String test; + private String then; + private String elze; /** diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/RenderModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/RenderModel.java index c83a400e..d26cf112 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/RenderModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/RenderModel.java @@ -26,6 +26,7 @@ import org.springframework.util.StringUtils; * @author Scott Andrews */ public class RenderModel extends AbstractActionModel { + private String fragments; /** diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/SecuredModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/SecuredModel.java index f4218d77..43c8995d 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/SecuredModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/SecuredModel.java @@ -32,7 +32,9 @@ import org.springframework.webflow.security.SecurityFlowExecutionListener; * @author Scott Andrews */ public class SecuredModel extends AbstractModel { + private String attributes; + private String match; /** diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/SetModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/SetModel.java index e90558fa..c1a7453f 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/SetModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/SetModel.java @@ -25,8 +25,11 @@ import org.springframework.util.StringUtils; * @author Scott Andrews */ public class SetModel extends AbstractActionModel { + private String name; + private String value; + private String type; /** diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/SubflowStateModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/SubflowStateModel.java index 6083780a..49e64123 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/SubflowStateModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/SubflowStateModel.java @@ -25,9 +25,13 @@ import org.springframework.util.StringUtils; * @author Scott Andrews */ public class SubflowStateModel extends AbstractTransitionableStateModel { + private String subflow; + private String subflowAttributeMapper; + private LinkedList inputs; + private LinkedList outputs; /** @@ -113,32 +117,6 @@ public class SubflowStateModel extends AbstractTransitionableStateModel { this.inputs = inputs; } - /** - * @param input the input mapping to add - */ - public void addInput(InputModel input) { - if (input == null) { - return; - } - if (inputs == null) { - inputs = new LinkedList(); - } - inputs.add(input); - } - - /** - * @param inputs the input mappings to add - */ - public void addInputs(LinkedList inputs) { - if (inputs == null || inputs.isEmpty()) { - return; - } - if (this.inputs == null) { - this.inputs = new LinkedList(); - } - this.inputs.addAll(inputs); - } - /** * @return the output mappings */ @@ -153,29 +131,4 @@ public class SubflowStateModel extends AbstractTransitionableStateModel { this.outputs = outputs; } - /** - * @param output the output mapping to add - */ - public void addOutput(OutputModel output) { - if (output == null) { - return; - } - if (outputs == null) { - outputs = new LinkedList(); - } - outputs.add(output); - } - - /** - * @param outputs the output mappings to add - */ - public void addOutputs(LinkedList outputs) { - if (outputs == null || outputs.isEmpty()) { - return; - } - if (this.outputs == null) { - this.outputs = new LinkedList(); - } - this.outputs.addAll(outputs); - } -} +} \ No newline at end of file diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/TransitionModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/TransitionModel.java index 9f30c2c3..85be869c 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/TransitionModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/TransitionModel.java @@ -30,13 +30,21 @@ import org.springframework.util.StringUtils; * @author Scott Andrews */ public class TransitionModel extends AbstractModel { + private String on; + private String onException; + private String to; + private String bind; + private String history; + private LinkedList attributes; + private SecuredModel secured; + private LinkedList actions; /** @@ -168,32 +176,6 @@ public class TransitionModel extends AbstractModel { this.attributes = attributes; } - /** - * @param attribute the attribute to add - */ - public void addAttribute(AttributeModel attribute) { - if (attribute == null) { - return; - } - if (attributes == null) { - attributes = new LinkedList(); - } - attributes.add(attribute); - } - - /** - * @param attributes the attributes to add - */ - public void addAttributes(LinkedList attributes) { - if (attributes == null || attributes.isEmpty()) { - return; - } - if (this.attributes == null) { - this.attributes = new LinkedList(); - } - this.attributes.addAll(attributes); - } - /** * @return the secured */ @@ -221,30 +203,4 @@ public class TransitionModel extends AbstractModel { public void setActions(LinkedList actions) { this.actions = actions; } - - /** - * @param action the action to add - */ - public void addAction(AbstractActionModel action) { - if (action == null) { - return; - } - if (actions == null) { - actions = new LinkedList(); - } - actions.add(action); - } - - /** - * @param actions the actions to add - */ - public void addActions(LinkedList actions) { - if (actions == null || actions.isEmpty()) { - return; - } - if (this.actions == null) { - this.actions = new LinkedList(); - } - this.actions.addAll(actions); - } -} +} \ No newline at end of file diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/VarModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/VarModel.java index 01f541fc..380f20c4 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/VarModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/VarModel.java @@ -15,6 +15,7 @@ */ package org.springframework.webflow.engine.model; +import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; /** @@ -26,7 +27,9 @@ import org.springframework.util.StringUtils; * @author Scott Andrews */ public class VarModel extends AbstractModel { + private String name; + private String className; /** @@ -40,11 +43,16 @@ public class VarModel extends AbstractModel { } public boolean isMergeableWith(Model model) { - return false; + if (!(model instanceof VarModel)) { + return false; + } + VarModel var = (VarModel) model; + return ObjectUtils.nullSafeEquals(getName(), var.getName()); } public void merge(Model model) { - + VarModel var = (VarModel) model; + setClassName(merge(getClassName(), var.getClassName())); } /** diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ViewStateModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ViewStateModel.java index 12126249..aa01a499 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ViewStateModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ViewStateModel.java @@ -26,11 +26,19 @@ import org.springframework.util.StringUtils; * @author Scott Andrews */ public class ViewStateModel extends AbstractTransitionableStateModel { + private String view; + private String redirect; + private String popup; + private String model; + private LinkedList vars; + + private LinkedList bindings; + private LinkedList onRenderActions; /** @@ -63,6 +71,7 @@ public class ViewStateModel extends AbstractTransitionableStateModel { setPopup(merge(getPopup(), state.getPopup())); setModel(merge(getModel(), state.getModel())); setVars(merge(getVars(), state.getVars(), false)); + setBindings(merge(getBindings(), state.getBindings(), false)); setOnRenderActions(merge(getOnRenderActions(), state.getOnRenderActions(), false)); } @@ -166,16 +175,30 @@ public class ViewStateModel extends AbstractTransitionableStateModel { } /** - * @param vars the vars to add + * @return the bindings */ - public void addVars(LinkedList vars) { - if (vars == null || vars.isEmpty()) { + public LinkedList getBindings() { + return bindings; + } + + /** + * @param bindings the bindings to set + */ + public void setBindings(LinkedList bindings) { + this.bindings = bindings; + } + + /** + * @param var the var to add + */ + public void addBinding(BindingModel binding) { + if (binding == null) { return; } - if (this.vars == null) { - this.vars = new LinkedList(); + if (bindings == null) { + bindings = new LinkedList(); } - this.vars.addAll(vars); + bindings.add(binding); } /** @@ -191,31 +214,4 @@ public class ViewStateModel extends AbstractTransitionableStateModel { public void setOnRenderActions(LinkedList onRenderActions) { this.onRenderActions = onRenderActions; } - - /** - * @param onRenderAction the on render action to add - */ - public void addOnRenderAction(AbstractActionModel onRenderAction) { - if (onRenderAction == null) { - return; - } - if (this.onRenderActions == null) { - this.onRenderActions = new LinkedList(); - } - this.onRenderActions.add(onRenderAction); - } - - /** - * @param onRenderActions the on render actions to add - */ - public void addOnRenderActions(LinkedList onRenderActions) { - if (onRenderActions == null || onRenderActions.isEmpty()) { - return; - } - if (this.onRenderActions == null) { - this.onRenderActions = new LinkedList(); - } - this.onRenderActions.addAll(onRenderActions); - } - } 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 519a5c1c..a8ca1d84 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 @@ -33,6 +33,7 @@ import org.springframework.webflow.engine.model.AbstractStateModel; import org.springframework.webflow.engine.model.ActionStateModel; import org.springframework.webflow.engine.model.AttributeModel; import org.springframework.webflow.engine.model.BeanImportModel; +import org.springframework.webflow.engine.model.BindingModel; import org.springframework.webflow.engine.model.DecisionStateModel; import org.springframework.webflow.engine.model.EndStateModel; import org.springframework.webflow.engine.model.EvaluateModel; @@ -517,6 +518,22 @@ public class XmlFlowModelBuilder implements FlowModelBuilder { } } + private LinkedList parseBindings(Element element) { + List bindingElements = DomUtils.getChildElementsByTagName(element, "binding"); + if (bindingElements.isEmpty()) { + return null; + } + LinkedList bindings = new LinkedList(); + for (Iterator it = bindingElements.iterator(); it.hasNext();) { + bindings.add(parseBinding((Element) it.next())); + } + return bindings; + } + + private BindingModel parseBinding(Element element) { + return new BindingModel(element.getAttribute("property"), element.getAttribute("converter")); + } + private LinkedList parseOnExitActions(Element element) { Element onExitElement = DomUtils.getChildElementByTagName(element, "on-exit"); if (onExitElement != null) { @@ -577,6 +594,7 @@ public class XmlFlowModelBuilder implements FlowModelBuilder { state.setPopup(element.getAttribute("popup")); state.setModel(element.getAttribute("model")); state.setVars(parseVars(element)); + state.setBindings(parseBindings(element)); state.setOnRenderActions(parseOnRenderActions(element)); state.setAttributes(parseAttributes(element)); state.setSecured(parseSecured(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 585dab19..1a7f5038 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 @@ -321,6 +321,35 @@ The name of this variable. + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/FlowModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/FlowModelTests.java index 563f4046..5dbd2bad 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/FlowModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/FlowModelTests.java @@ -72,15 +72,15 @@ public class FlowModelTests extends TestCase { } public void testMergeVars() { - FlowModel child = new FlowModel(); FlowModel parent = new FlowModel(); VarModel var = new VarModel("name", "value"); + parent.addVar(var); + FlowModel child = new FlowModel(); + var = new VarModel("name", "value2"); child.addVar(var); - parent.addVar(var); - var = new VarModel("name", "value"); - parent.addVar(var); child.merge(parent); - assertEquals(3, child.getVars().size()); + assertEquals(1, child.getVars().size()); + assertEquals("value2", ((VarModel) child.getVars().get(0)).getClassName()); } public void testMergeMappings() { diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/VarModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/VarModelTests.java index ef542f1c..87f206d6 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/VarModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/VarModelTests.java @@ -22,9 +22,8 @@ import junit.framework.TestCase; */ public class VarModelTests extends TestCase { - public void testNotMergeable() { + public void testMergeable() { VarModel child = new VarModel("name", "value"); - assertFalse(child.isMergeableWith(child)); + assertTrue(child.isMergeableWith(child)); } - } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/builder/xml/XmlFlowModelBuilderTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/builder/xml/XmlFlowModelBuilderTests.java index 63487415..eba77416 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/builder/xml/XmlFlowModelBuilderTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/builder/xml/XmlFlowModelBuilderTests.java @@ -14,6 +14,7 @@ import org.springframework.webflow.engine.builder.model.FlowModelFlowBuilder; import org.springframework.webflow.engine.impl.FlowExecutionImplFactory; import org.springframework.webflow.engine.model.AbstractStateModel; import org.springframework.webflow.engine.model.AttributeModel; +import org.springframework.webflow.engine.model.BindingModel; import org.springframework.webflow.engine.model.ExceptionHandlerModel; import org.springframework.webflow.engine.model.FlowModel; import org.springframework.webflow.engine.model.SecuredModel; @@ -143,6 +144,18 @@ public class XmlFlowModelBuilderTests extends TestCase { assertEquals("foo", ((VarModel) ((ViewStateModel) flow.getStates().get(0)).getVars().get(0)).getName()); } + public void testViewStateModelBinding() { + ClassPathResource resource = new ClassPathResource("flow-viewstate-model-binding.xml", getClass()); + FlowModelBuilder builder = new XmlFlowModelBuilder(resource, registry); + builder.init(); + builder.build(); + FlowModel flow = builder.getFlowModel(); + ViewStateModel model = (ViewStateModel) flow.getStates().get(0); + assertEquals("formObject", model.getModel()); + assertEquals("objectProperty", ((BindingModel) model.getBindings().get(0)).getProperty()); + assertEquals("customConverter", ((BindingModel) model.getBindings().get(0)).getConverter()); + } + public void testViewStateRedirect() { ClassPathResource resource = new ClassPathResource("flow-viewstate-redirect.xml", getClass()); FlowModelBuilder builder = new XmlFlowModelBuilder(resource, registry); diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/builder/xml/flow-viewstate-model-binding.xml b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/builder/xml/flow-viewstate-model-binding.xml new file mode 100644 index 00000000..ff717e66 --- /dev/null +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/builder/xml/flow-viewstate-model-binding.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file