From 795a52b9d01f3b7a56998d8f0caf59398a4b02f5 Mon Sep 17 00:00:00 2001 From: Scott Andrews Date: Fri, 21 Mar 2008 20:35:07 +0000 Subject: [PATCH] SWF-94 Simplified model implementation --- .../engine/builder/FlowModelFlowBuilder.java | 7 + .../engine/model/AbstractActionModel.java | 17 +- .../webflow/engine/model/AbstractModel.java | 39 +-- .../engine/model/ActionStateModel.java | 83 +---- .../webflow/engine/model/AttributeModel.java | 46 +-- .../webflow/engine/model/BeanImportModel.java | 21 -- .../engine/model/DecisionStateModel.java | 75 +---- .../webflow/engine/model/EndStateModel.java | 82 +---- .../webflow/engine/model/EvaluateModel.java | 75 ----- .../engine/model/ExceptionHandlerModel.java | 21 -- .../webflow/engine/model/FlowModel.java | 90 +----- .../webflow/engine/model/IfModel.java | 48 +-- .../webflow/engine/model/InputModel.java | 54 +--- .../webflow/engine/model/OutputModel.java | 54 +--- .../webflow/engine/model/RenderModel.java | 37 --- .../webflow/engine/model/SecuredModel.java | 41 +-- .../webflow/engine/model/SetModel.java | 66 ---- .../engine/model/SubflowStateModel.java | 103 +----- .../webflow/engine/model/TransitionModel.java | 89 +----- .../webflow/engine/model/VarModel.java | 59 +--- .../webflow/engine/model/ViewStateModel.java | 126 +------- .../builder/xml/XmlFlowModelBuilder.java | 298 +++++++----------- .../builder/FlowModelFlowBuilderTests.java | 97 ++++-- .../engine/model/ActionStateModelTests.java | 45 ++- .../engine/model/AttributeModelTests.java | 42 ++- .../engine/model/BeanImportModelTests.java | 23 +- .../engine/model/DecisionStateModelTests.java | 45 ++- .../engine/model/EndStateModelTests.java | 28 +- .../engine/model/EvaluateModelTests.java | 31 +- .../model/ExceptionHandlerModelTests.java | 23 +- .../webflow/engine/model/FlowModelTests.java | 141 +++++---- .../webflow/engine/model/IfModelTests.java | 32 +- .../webflow/engine/model/InputModelTests.java | 46 ++- .../engine/model/OutputModelTests.java | 46 ++- .../model/PersistenceContextModelTests.java | 7 +- .../engine/model/RenderModelTests.java | 23 +- .../engine/model/SecuredModelTests.java | 30 +- .../webflow/engine/model/SetModelTests.java | 31 +- .../engine/model/SubflowStateModelTests.java | 46 ++- .../engine/model/TransitionModelTests.java | 49 ++- .../webflow/engine/model/VarModelTests.java | 31 +- .../engine/model/ViewStateModelTests.java | 44 ++- 42 files changed, 604 insertions(+), 1787 deletions(-) diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/FlowModelFlowBuilder.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/FlowModelFlowBuilder.java index 5f47b254..7657de44 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/FlowModelFlowBuilder.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/FlowModelFlowBuilder.java @@ -457,6 +457,10 @@ public class FlowModelFlowBuilder extends AbstractFlowBuilder implements Resourc popup = ((Boolean) fromStringTo(Boolean.class).execute(state.getPopup())).booleanValue(); } MutableAttributeMap attributes = convertMetaAttributes(state.getAttributes()); + if (state.getModel() != null) { + attributes.put("model", getLocalContext().getExpressionParser().parseExpression(state.getModel(), + new ParserContextImpl().eval(RequestContext.class))); + } convertSecured(state.getSecured(), attributes); getLocalContext().getFlowArtifactFactory().createViewState(state.getId(), flow, convertViewVariables(state.getVars()), convertActions(state.getOnEntryActions()), viewFactory, @@ -677,6 +681,9 @@ public class FlowModelFlowBuilder extends AbstractFlowBuilder implements Resourc TransitionCriteria executionCriteria = TransitionCriteriaChain.criteriaChainFor(convertActions(transition .getActions())); MutableAttributeMap attributes = convertMetaAttributes(transition.getAttributes()); + if (transition.getBind() != null) { + attributes.put("bind", transition.getBind()); + } convertSecured(transition.getSecured(), attributes); return getLocalContext().getFlowArtifactFactory().createTransition(targetStateResolver, matchingCriteria, executionCriteria, attributes); 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 d1e0b4cc..22926cdd 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 @@ -15,7 +15,6 @@ */ package org.springframework.webflow.engine.model; - /** * Model support for actions. * @@ -23,4 +22,20 @@ package org.springframework.webflow.engine.model; */ public abstract class AbstractActionModel extends AbstractModel { + /** + * Actions are not mergeable + * @param model the render action to merge into this render + */ + public void merge(Model model) { + // not mergeable + } + + /** + * Actions are not mergeable + * @param model the model to test + */ + public boolean isMergeableWith(Model model) { + return false; + } + } diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractModel.java index 4eb3b5d5..80b4884a 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractModel.java @@ -15,6 +15,7 @@ */ package org.springframework.webflow.engine.model; +import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; @@ -88,33 +89,35 @@ public abstract class AbstractModel implements Model { * @return the merged list */ protected LinkedList merge(LinkedList child, LinkedList parent, boolean addAtEnd) { - if (parent == null) { - return child; - } else if (child == null) { + if (child == null) { return parent; + } else if (parent == null) { + return child; } else { + if (!addAtEnd) { + parent = new LinkedList(parent); + Collections.reverse(parent); + } for (Iterator parentIt = parent.iterator(); parentIt.hasNext();) { Model parentElement = (Model) parentIt.next(); - if (!child.contains(parentElement)) { - boolean matchFound = false; - for (Iterator childIt = child.iterator(); !matchFound && childIt.hasNext();) { - Model childElement = (Model) childIt.next(); - if (childElement.isMergeableWith(parentElement)) { - matchFound = true; - childElement.merge(parentElement); - } + boolean matchFound = false; + for (Iterator childIt = child.iterator(); !matchFound && childIt.hasNext();) { + Model childElement = (Model) childIt.next(); + if (childElement.isMergeableWith(parentElement)) { + matchFound = true; + childElement.merge(parentElement); } - if (!matchFound) { - if (addAtEnd) { - child.addLast(parentElement); - } else { - child.addFirst(parentElement); - } + } + if (!matchFound) { + if (addAtEnd) { + child.addLast(parentElement); + } else { + child.addFirst(parentElement); } } } + return child; } - return child; } } 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 f132abde..9afabae6 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 @@ -38,44 +38,19 @@ public class ActionStateModel extends AbstractTransitionableStateModel { setId(id); } - /** - * Create an action state model - * @param id the state identifier - * @param attributes meta attributes for the state - * @param secured security settings for the state - * @param onEntryActions actions to execute upon entry - * @param transitions transitions for the state - * @param onExitActions actions to execute before leaving the state - * @param actions actions to execute during the state - * @param exceptionHandlers exception handlers for the state - */ - public ActionStateModel(String id, LinkedList attributes, SecuredModel secured, LinkedList onEntryActions, - LinkedList transitions, LinkedList onExitActions, LinkedList actions, LinkedList exceptionHandlers) { - setId(id); - setAttributes(attributes); - setSecured(secured); - setOnEntryActions(onEntryActions); - setTransitions(transitions); - setOnExitActions(onExitActions); - setActions(actions); - setExceptionHandlers(exceptionHandlers); - } - /** * Merge properties * @param model the action state to merge into this state */ public void merge(Model model) { - if (isMergeableWith(model)) { - ActionStateModel state = (ActionStateModel) model; - setAttributes(merge(getAttributes(), state.getAttributes())); - setSecured((SecuredModel) merge(getSecured(), state.getSecured())); - setOnEntryActions(merge(getOnEntryActions(), state.getOnEntryActions(), false)); - setExceptionHandlers(merge(getExceptionHandlers(), state.getExceptionHandlers())); - setTransitions(merge(getTransitions(), state.getTransitions())); - setOnExitActions(merge(getOnExitActions(), state.getOnExitActions(), false)); - setActions(merge(getActions(), state.getActions(), false)); - } + ActionStateModel state = (ActionStateModel) model; + setAttributes(merge(getAttributes(), state.getAttributes())); + setSecured((SecuredModel) merge(getSecured(), state.getSecured())); + setOnEntryActions(merge(getOnEntryActions(), state.getOnEntryActions(), false)); + setExceptionHandlers(merge(getExceptionHandlers(), state.getExceptionHandlers())); + setTransitions(merge(getTransitions(), state.getTransitions())); + setOnExitActions(merge(getOnExitActions(), state.getOnExitActions(), false)); + setActions(merge(getActions(), state.getActions(), false)); } /** @@ -83,9 +58,6 @@ public class ActionStateModel extends AbstractTransitionableStateModel { * @param model the model to test */ public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } if (!(model instanceof ActionStateModel)) { return false; } @@ -93,45 +65,6 @@ public class ActionStateModel extends AbstractTransitionableStateModel { return ObjectUtils.nullSafeEquals(getId(), state.getId()); } - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof ActionStateModel)) { - return false; - } - ActionStateModel state = (ActionStateModel) obj; - if (state == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getId(), state.getId())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getAttributes(), state.getAttributes())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getSecured(), state.getSecured())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOnEntryActions(), state.getOnEntryActions())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getExceptionHandlers(), state.getExceptionHandlers())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getTransitions(), state.getTransitions())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOnExitActions(), state.getOnExitActions())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getActions(), state.getActions())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getId()) * 27 + ObjectUtils.nullSafeHashCode(getAttributes()) * 27 - + ObjectUtils.nullSafeHashCode(getSecured()) * 27 + ObjectUtils.nullSafeHashCode(getOnEntryActions()) - * 27 + ObjectUtils.nullSafeHashCode(getExceptionHandlers()) * 27 - + ObjectUtils.nullSafeHashCode(getTransitions()) * 27 - + ObjectUtils.nullSafeHashCode(getOnExitActions()) * 27 + ObjectUtils.nullSafeHashCode(getActions()) - * 27; - } - /** * @return the actions */ 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 e2b2491b..2a80ae73 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 @@ -40,27 +40,13 @@ public class AttributeModel extends AbstractModel { setValue(value); } - /** - * Create an attribute model - * @param name the name of the attribute - * @param value the value of the attribute - * @param type the type of the value - */ - public AttributeModel(String name, String value, String type) { - setName(name); - setValue(value); - setType(type); - } - /** * Merge properties * @param model the attribute to merge into this attribute */ public void merge(Model model) { - if (isMergeableWith(model)) { - AttributeModel attribute = (AttributeModel) model; - setType(merge(getType(), attribute.getType())); - } + AttributeModel attribute = (AttributeModel) model; + setType(merge(getType(), attribute.getType())); } /** @@ -68,9 +54,6 @@ public class AttributeModel extends AbstractModel { * @param model the model to test */ public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } if (!(model instanceof AttributeModel)) { return false; } @@ -79,31 +62,6 @@ public class AttributeModel extends AbstractModel { && ObjectUtils.nullSafeEquals(getValue(), attribute.getValue()); } - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof AttributeModel)) { - return false; - } - AttributeModel attribute = (AttributeModel) obj; - if (attribute == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getName(), attribute.getName())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getType(), attribute.getType())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getValue(), attribute.getValue())) { - return false; - } else { - return super.equals(attribute); - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getName()) * 27 + ObjectUtils.nullSafeHashCode(getType()) * 27 - + ObjectUtils.nullSafeHashCode(getValue()) * 27 + super.hashCode() * 27; - } - /** * @return the name */ 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 8d210216..6a575e4d 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 @@ -15,7 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; /** @@ -51,26 +50,6 @@ public class BeanImportModel extends AbstractModel { return false; } - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof BeanImportModel)) { - return false; - } - BeanImportModel beanImport = (BeanImportModel) obj; - if (beanImport == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getResource(), beanImport.getResource())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getResource()) * 27; - } - /** * @return the 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 2ec82453..7d349bfd 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 @@ -42,41 +42,18 @@ public class DecisionStateModel extends AbstractStateModel { setId(id); } - /** - * Create a decision state model - * @param id the state identifier - * @param ifs decision tests - * @param onExitActions actions to execute before exiting this state - * @param attributes meta attributes for this state - * @param secured security settings for this state - * @param onEntryActions actions to execute upon entering this state - * @param exceptionHandlers exception handlers for this state - */ - public DecisionStateModel(String id, LinkedList ifs, LinkedList onExitActions, LinkedList attributes, - SecuredModel secured, LinkedList onEntryActions, LinkedList exceptionHandlers) { - setId(id); - setIfs(ifs); - setOnExitActions(onExitActions); - setAttributes(attributes); - setSecured(secured); - setOnEntryActions(onEntryActions); - setExceptionHandlers(exceptionHandlers); - } - /** * Merge properties * @param model the decision state to merge into this state */ public void merge(Model model) { - if (isMergeableWith(model)) { - DecisionStateModel state = (DecisionStateModel) model; - setAttributes(merge(getAttributes(), state.getAttributes())); - setSecured((SecuredModel) merge(getSecured(), state.getSecured())); - setOnEntryActions(merge(getOnEntryActions(), state.getOnEntryActions(), false)); - setExceptionHandlers(merge(getExceptionHandlers(), state.getExceptionHandlers())); - setIfs(merge(getIfs(), state.getIfs())); - setOnExitActions(merge(getOnExitActions(), state.getOnExitActions(), false)); - } + DecisionStateModel state = (DecisionStateModel) model; + setAttributes(merge(getAttributes(), state.getAttributes())); + setSecured((SecuredModel) merge(getSecured(), state.getSecured())); + setOnEntryActions(merge(getOnEntryActions(), state.getOnEntryActions(), false)); + setExceptionHandlers(merge(getExceptionHandlers(), state.getExceptionHandlers())); + setIfs(merge(getIfs(), state.getIfs())); + setOnExitActions(merge(getOnExitActions(), state.getOnExitActions(), false)); } /** @@ -84,9 +61,6 @@ public class DecisionStateModel extends AbstractStateModel { * @param model the model to test */ public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } if (!(model instanceof DecisionStateModel)) { return false; } @@ -94,41 +68,6 @@ public class DecisionStateModel extends AbstractStateModel { return ObjectUtils.nullSafeEquals(getId(), state.getId()); } - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof DecisionStateModel)) { - return false; - } - DecisionStateModel state = (DecisionStateModel) obj; - if (state == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getId(), state.getId())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getAttributes(), state.getAttributes())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getSecured(), state.getSecured())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOnEntryActions(), state.getOnEntryActions())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getExceptionHandlers(), state.getExceptionHandlers())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getIfs(), state.getIfs())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOnExitActions(), state.getOnExitActions())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getId()) * 27 + ObjectUtils.nullSafeHashCode(getAttributes()) * 27 - + ObjectUtils.nullSafeHashCode(getSecured()) * 27 + ObjectUtils.nullSafeHashCode(getOnEntryActions()) - * 27 + ObjectUtils.nullSafeHashCode(getExceptionHandlers()) * 27 - + ObjectUtils.nullSafeHashCode(getIfs()) * 27 + ObjectUtils.nullSafeHashCode(getOnExitActions()) * 27; - } - /** * @return the ifs */ 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 830ace77..35b1ff0c 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 @@ -46,44 +46,19 @@ public class EndStateModel extends AbstractStateModel { setId(id); } - /** - * Create an end state model - * @param id the state identifier - * @param view the view to render - * @param commit indicate if the persistence context should be committed - * @param outputs output mappings - * @param attributes meta attributes for the state - * @param secured security settings for the state - * @param onEntryActions actions to execute when entering the state - * @param exceptionHandlers exception handlers for the state - */ - public EndStateModel(String id, String view, String commit, LinkedList outputs, LinkedList attributes, - SecuredModel secured, LinkedList onEntryActions, LinkedList exceptionHandlers) { - setId(id); - setView(view); - setCommit(commit); - setOutputs(outputs); - setAttributes(attributes); - setSecured(secured); - setOnEntryActions(onEntryActions); - setExceptionHandlers(exceptionHandlers); - } - /** * Merge properties * @param model the end state to merge into this state */ public void merge(Model model) { - if (isMergeableWith(model)) { - EndStateModel state = (EndStateModel) model; - setAttributes(merge(getAttributes(), state.getAttributes())); - setSecured((SecuredModel) merge(getSecured(), state.getSecured())); - setOnEntryActions(merge(getOnEntryActions(), state.getOnEntryActions(), false)); - setExceptionHandlers(merge(getExceptionHandlers(), state.getExceptionHandlers())); - setView(merge(getView(), state.getView())); - setCommit(merge(getCommit(), state.getCommit())); - setOutputs(merge(getOutputs(), state.getOutputs(), false)); - } + EndStateModel state = (EndStateModel) model; + setAttributes(merge(getAttributes(), state.getAttributes())); + setSecured((SecuredModel) merge(getSecured(), state.getSecured())); + setOnEntryActions(merge(getOnEntryActions(), state.getOnEntryActions(), false)); + setExceptionHandlers(merge(getExceptionHandlers(), state.getExceptionHandlers())); + setView(merge(getView(), state.getView())); + setCommit(merge(getCommit(), state.getCommit())); + setOutputs(merge(getOutputs(), state.getOutputs(), false)); } /** @@ -91,9 +66,6 @@ public class EndStateModel extends AbstractStateModel { * @param model the model to test */ public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } if (!(model instanceof EndStateModel)) { return false; } @@ -101,44 +73,6 @@ public class EndStateModel extends AbstractStateModel { return ObjectUtils.nullSafeEquals(getId(), state.getId()); } - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof EndStateModel)) { - return false; - } - EndStateModel state = (EndStateModel) obj; - if (state == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getId(), state.getId())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getAttributes(), state.getAttributes())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getSecured(), state.getSecured())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOnEntryActions(), state.getOnEntryActions())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getExceptionHandlers(), state.getExceptionHandlers())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getView(), state.getView())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getCommit(), state.getCommit())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOutputs(), state.getOutputs())) { - return false; - } else { - return true; - } - } - - public int hasCode() { - return ObjectUtils.nullSafeHashCode(getId()) * 27 + ObjectUtils.nullSafeHashCode(getAttributes()) * 27 - + ObjectUtils.nullSafeHashCode(getSecured()) * 27 + ObjectUtils.nullSafeHashCode(getOnEntryActions()) - * 27 + ObjectUtils.nullSafeHashCode(getExceptionHandlers()) * 27 - + ObjectUtils.nullSafeHashCode(getView()) * 27 + ObjectUtils.nullSafeHashCode(getCommit()) * 27 - + ObjectUtils.nullSafeHashCode(getOutputs()) * 27; - } - /** * @return the view */ 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 0fabb3bf..9d0391a4 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 @@ -15,7 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; /** @@ -38,80 +37,6 @@ public class EvaluateModel extends AbstractActionModel { setExpression(expression); } - /** - * Create an evaluate action model - * @param expression the expression to evaluate - * @param result where to store the result of the expressions - */ - public EvaluateModel(String expression, String result) { - setExpression(expression); - setResult(result); - } - - /** - * Create an evaluate action model - * @param expression the expression to evaluate - * @param result where to store the result of the expressions - * @param resultType the type of the result - */ - public EvaluateModel(String expression, String result, String resultType) { - setExpression(expression); - setResult(result); - setResultType(resultType); - } - - /** - * Merge properties - * @param model the evaluate action to merge into this evaluate - */ - public void merge(Model model) { - if (isMergeableWith(model)) { - EvaluateModel evaluate = (EvaluateModel) model; - setResult(merge(getResult(), evaluate.getResult())); - setResultType(merge(getResultType(), evaluate.getResultType())); - } - } - - /** - * Tests if the model is able to be merged with this evaluate action - * @param model the model to test - */ - public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } - if (!(model instanceof EvaluateModel)) { - return false; - } - EvaluateModel evaluate = (EvaluateModel) model; - return ObjectUtils.nullSafeEquals(getExpression(), evaluate.getExpression()); - } - - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof EvaluateModel)) { - return false; - } - EvaluateModel evaluate = (EvaluateModel) obj; - if (evaluate == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getExpression(), evaluate.getExpression())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getResult(), evaluate.getResult())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getResultType(), evaluate.getResultType())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getExpression()) * 27 + ObjectUtils.nullSafeHashCode(getResult()) * 27 - + ObjectUtils.nullSafeHashCode(getResultType()) * 27; - } - /** * @return the expression */ diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ExceptionHandlerModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ExceptionHandlerModel.java index d0953646..f306d528 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ExceptionHandlerModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ExceptionHandlerModel.java @@ -15,7 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; /** @@ -47,26 +46,6 @@ public class ExceptionHandlerModel extends AbstractModel { return false; } - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof ExceptionHandlerModel)) { - return false; - } - ExceptionHandlerModel exceptionHandler = (ExceptionHandlerModel) obj; - if (exceptionHandler == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getBeanName(), exceptionHandler.getBeanName())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getBeanName()) * 27; - } - /** * @return the bean name */ 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 b4256eea..56a71ab7 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 @@ -17,7 +17,6 @@ package org.springframework.webflow.engine.model; import java.util.LinkedList; -import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; /** @@ -73,23 +72,21 @@ public class FlowModel extends AbstractModel { * @param model the flow to merge into this flow */ public void merge(Model model) { - if (isMergeableWith(model)) { - FlowModel flow = (FlowModel) model; - setParent(null); - setStartStateId(merge(getStartStateId(), flow.getStartStateId())); - setAttributes(merge(getAttributes(), flow.getAttributes())); - setSecured((SecuredModel) merge(getSecured(), flow.getSecured())); - setPersistenceContext((PersistenceContextModel) merge(getPersistenceContext(), flow.getPersistenceContext())); - setVars(merge(getVars(), flow.getVars(), false)); - setInputs(merge(getInputs(), flow.getInputs())); - setOutputs(merge(getOutputs(), flow.getOutputs())); - setOnStartActions(merge(getOnStartActions(), flow.getOnStartActions(), false)); - setStates(merge(getStates(), flow.getStates())); - setGlobalTransitions(merge(getGlobalTransitions(), flow.getGlobalTransitions())); - setOnEndActions(merge(getOnEndActions(), flow.getOnEndActions(), false)); - setExceptionHandlers(merge(getExceptionHandlers(), flow.getExceptionHandlers())); - setBeanImports(merge(getBeanImports(), flow.getBeanImports())); - } + FlowModel flow = (FlowModel) model; + setParent(null); + setStartStateId(merge(getStartStateId(), flow.getStartStateId())); + setAttributes(merge(getAttributes(), flow.getAttributes())); + setSecured((SecuredModel) merge(getSecured(), flow.getSecured())); + setPersistenceContext((PersistenceContextModel) merge(getPersistenceContext(), flow.getPersistenceContext())); + setVars(merge(getVars(), flow.getVars(), false)); + setInputs(merge(getInputs(), flow.getInputs())); + setOutputs(merge(getOutputs(), flow.getOutputs())); + setOnStartActions(merge(getOnStartActions(), flow.getOnStartActions(), false)); + setStates(merge(getStates(), flow.getStates())); + setGlobalTransitions(merge(getGlobalTransitions(), flow.getGlobalTransitions())); + setOnEndActions(merge(getOnEndActions(), flow.getOnEndActions(), false)); + setExceptionHandlers(merge(getExceptionHandlers(), flow.getExceptionHandlers())); + setBeanImports(merge(getBeanImports(), flow.getBeanImports())); } /** @@ -97,9 +94,6 @@ public class FlowModel extends AbstractModel { * @param model the model to test */ public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } if ((model instanceof FlowModel)) { return true; } else { @@ -107,60 +101,6 @@ public class FlowModel extends AbstractModel { } } - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof FlowModel)) { - return false; - } - FlowModel flow = (FlowModel) obj; - if (flow == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getParent(), flow.getParent())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getStartStateId(), flow.getStartStateId())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getAttributes(), flow.getAttributes())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getSecured(), flow.getSecured())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getPersistenceContext(), flow.getPersistenceContext())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getVars(), flow.getVars())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getInputs(), flow.getInputs())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOutputs(), flow.getOutputs())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOnStartActions(), flow.getOnStartActions())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getStates(), flow.getStates())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getGlobalTransitions(), flow.getGlobalTransitions())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOnEndActions(), flow.getOnEndActions())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getExceptionHandlers(), flow.getExceptionHandlers())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getBeanImports(), flow.getBeanImports())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getParent()) * 27 + ObjectUtils.nullSafeHashCode(getStartStateId()) * 27 - + ObjectUtils.nullSafeHashCode(getAttributes()) * 27 + ObjectUtils.nullSafeHashCode(getSecured()) * 27 - + ObjectUtils.nullSafeHashCode(getPersistenceContext()) * 27 + ObjectUtils.nullSafeHashCode(getVars()) - * 27 + ObjectUtils.nullSafeHashCode(getInputs()) * 27 + ObjectUtils.nullSafeHashCode(getOutputs()) * 27 - + ObjectUtils.nullSafeHashCode(getOnStartActions()) * 27 + ObjectUtils.nullSafeHashCode(getStates()) - * 27 + ObjectUtils.nullSafeHashCode(getGlobalTransitions()) * 27 - + ObjectUtils.nullSafeHashCode(getOnEndActions()) * 27 - + ObjectUtils.nullSafeHashCode(getExceptionHandlers()) * 27 - + ObjectUtils.nullSafeHashCode(getBeanImports()) * 27; - } - /** * @return the parent */ 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 f16e4041..921e01da 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 @@ -42,28 +42,14 @@ public class IfModel extends AbstractModel { setThen(then); } - /** - * Create an if model - * @param test the boolean condition to test - * @param then the state to transition to if the boolean expression evaluates to true - * @param elze the state to transition to if the boolean expression evaluates to false - */ - public IfModel(String test, String then, String elze) { - setTest(test); - setThen(then); - setElse(elze); - } - /** * Merge properties * @param model the conditional to merge into this conditional */ public void merge(Model model) { - if (isMergeableWith(model)) { - IfModel conditional = (IfModel) model; - setThen(merge(getThen(), conditional.getThen())); - setElse(merge(getElse(), conditional.getElse())); - } + IfModel conditional = (IfModel) model; + setThen(merge(getThen(), conditional.getThen())); + setElse(merge(getElse(), conditional.getElse())); } /** @@ -71,9 +57,6 @@ public class IfModel extends AbstractModel { * @param model the model to test */ public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } if (!(model instanceof IfModel)) { return false; } @@ -81,31 +64,6 @@ public class IfModel extends AbstractModel { return ObjectUtils.nullSafeEquals(getTest(), conditional.getTest()); } - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof IfModel)) { - return false; - } - IfModel conditional = (IfModel) obj; - if (conditional == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getTest(), conditional.getTest())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getThen(), conditional.getThen())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getElse(), conditional.getElse())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getTest()) * 27 + ObjectUtils.nullSafeHashCode(getThen()) * 27 - + ObjectUtils.nullSafeHashCode(getElse()) * 27; - } - /** * @return the test */ diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/InputModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/InputModel.java index b6677fa9..1eb47857 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/InputModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/InputModel.java @@ -36,31 +36,15 @@ public class InputModel extends AbstractMappingModel { setValue(value); } - /** - * Create an input mapping model - * @param name the name of the mapping variable - * @param value the value to map - * @param type the type of the value - * @param required indicates if this mapping is required - */ - public InputModel(String name, String value, String type, String required) { - setName(name); - setValue(value); - setType(type); - setRequired(required); - } - /** * Merge properties * @param model the mapping to merge into this mapping */ public void merge(Model model) { - if (isMergeableWith(model)) { - InputModel input = (InputModel) model; - setValue(merge(getValue(), input.getValue())); - setType(merge(getType(), input.getType())); - setRequired(merge(getRequired(), input.getRequired())); - } + InputModel input = (InputModel) model; + setValue(merge(getValue(), input.getValue())); + setType(merge(getType(), input.getType())); + setRequired(merge(getRequired(), input.getRequired())); } /** @@ -68,9 +52,6 @@ public class InputModel extends AbstractMappingModel { * @param model the model to test */ public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } if (!(model instanceof InputModel)) { return false; } @@ -78,31 +59,4 @@ public class InputModel extends AbstractMappingModel { return ObjectUtils.nullSafeEquals(getName(), input.getName()); } - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof InputModel)) { - return false; - } - InputModel input = (InputModel) obj; - if (input == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getName(), input.getName())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getValue(), input.getValue())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getType(), input.getType())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getRequired(), input.getRequired())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getName()) * 27 + ObjectUtils.nullSafeHashCode(getValue()) * 27 - + ObjectUtils.nullSafeHashCode(getType()) * 27 + ObjectUtils.nullSafeHashCode(getRequired()) * 27; - } - } diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/OutputModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/OutputModel.java index 470f87e2..20d8d476 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/OutputModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/OutputModel.java @@ -36,31 +36,15 @@ public class OutputModel extends AbstractMappingModel { setValue(value); } - /** - * Create an output mapping model - * @param name the name of the mapping variable - * @param value the value to map - * @param type the type of the value - * @param required indicates if this mapping is required - */ - public OutputModel(String name, String value, String type, String required) { - setName(name); - setValue(value); - setType(type); - setRequired(required); - } - /** * Merge properties * @param model the mapping to merge into this mapping */ public void merge(Model model) { - if (isMergeableWith(model)) { - OutputModel output = (OutputModel) model; - setValue(merge(getValue(), output.getValue())); - setType(merge(getType(), output.getType())); - setRequired(merge(getRequired(), output.getRequired())); - } + OutputModel output = (OutputModel) model; + setValue(merge(getValue(), output.getValue())); + setType(merge(getType(), output.getType())); + setRequired(merge(getRequired(), output.getRequired())); } /** @@ -68,9 +52,6 @@ public class OutputModel extends AbstractMappingModel { * @param model the model to test */ public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } if (!(model instanceof OutputModel)) { return false; } @@ -78,31 +59,4 @@ public class OutputModel extends AbstractMappingModel { return ObjectUtils.nullSafeEquals(getName(), output.getName()); } - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof InputModel)) { - return false; - } - OutputModel output = (OutputModel) obj; - if (output == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getName(), output.getName())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getValue(), output.getValue())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getType(), output.getType())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getRequired(), output.getRequired())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getName()) * 27 + ObjectUtils.nullSafeHashCode(getValue()) * 27 - + ObjectUtils.nullSafeHashCode(getType()) * 27 + ObjectUtils.nullSafeHashCode(getRequired()) * 27; - } - } 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 9f62a33d..04d52af8 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 @@ -15,7 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; /** @@ -37,42 +36,6 @@ public class RenderModel extends AbstractActionModel { setFragments(fragments); } - /** - * Render action models are not mergeable - * @param model the render action to merge into this render - */ - public void merge(Model model) { - // not mergeable - } - - /** - * Render action models are not mergeable - * @param model the model to test - */ - public boolean isMergeableWith(Model model) { - return false; - } - - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof RenderModel)) { - return false; - } - RenderModel render = (RenderModel) obj; - if (render == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getFragments(), render.getFragments())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getFragments()) * 27; - } - /** * @return the 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 c2439c05..b1f11694 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 @@ -43,25 +43,13 @@ public class SecuredModel extends AbstractModel { setAttributes(attributes); } - /** - * Create a security settings model - * @param attributes the security attributes - * @param match the type of matching for the attributes - */ - public SecuredModel(String attributes, String match) { - setAttributes(attributes); - setMatch(match); - } - /** * Merge properties * @param model the secured to merge into this secured */ public void merge(Model model) { - if (isMergeableWith(model)) { - SecuredModel secured = (SecuredModel) model; - setMatch(merge(getMatch(), secured.getMatch())); - } + SecuredModel secured = (SecuredModel) model; + setMatch(merge(getMatch(), secured.getMatch())); } /** @@ -69,9 +57,6 @@ public class SecuredModel extends AbstractModel { * @param model the model to test */ public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } if (!(model instanceof SecuredModel)) { return false; } @@ -79,28 +64,6 @@ public class SecuredModel extends AbstractModel { return ObjectUtils.nullSafeEquals(getAttributes(), secured.getAttributes()); } - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof SecuredModel)) { - return false; - } - SecuredModel secured = (SecuredModel) obj; - if (secured == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getAttributes(), secured.getAttributes())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getMatch(), secured.getMatch())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getAttributes()) * 27 + ObjectUtils.nullSafeHashCode(getMatch()) * 27; - } - /** * @return the attributes */ 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 a60a790a..00f15a92 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 @@ -15,7 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; /** @@ -40,71 +39,6 @@ public class SetModel extends AbstractActionModel { setValue(value); } - /** - * Create a set action model - * @param name the name of the property to set - * @param value the value to set - * @param type the type of the property - */ - public SetModel(String name, String value, String type) { - setName(name); - setValue(value); - setType(type); - } - - /** - * Merge properties - * @param model the set action to merge into this set - */ - public void merge(Model model) { - if (isMergeableWith(model)) { - SetModel set = (SetModel) model; - setValue(merge(getValue(), set.getValue())); - setType(merge(getType(), set.getType())); - } - } - - /** - * Tests if the model is able to be merged with this set action - * @param model the model to test - */ - public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } - if (!(model instanceof SetModel)) { - return false; - } - SetModel set = (SetModel) model; - return ObjectUtils.nullSafeEquals(getName(), set.getName()); - } - - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof SetModel)) { - return false; - } - SetModel set = (SetModel) obj; - if (set == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getName(), set.getName())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getValue(), set.getValue())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getType(), set.getType())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getName()) * 27 + ObjectUtils.nullSafeHashCode(getValue()) * 27 - + ObjectUtils.nullSafeHashCode(getType()) * 27; - } - /** * @return the name */ 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 6e07b57b..0a1f5840 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 @@ -46,54 +46,22 @@ public class SubflowStateModel extends AbstractTransitionableStateModel { setSubflow(subflow); } - /** - * Create a subflow state model - * @param id the identifier of the state - * @param subflow the identifier of the flow to launch as a subflow - * @param subflowAttributeMapper bean name of the attribute mapping - * @param inputs input mappings - * @param outputs output mappings - * @param attributes meta attributes for the state - * @param secured security settings for the state - * @param onEntryActions actions to be executed when entering the state - * @param exceptionHandlers exception handlers for the state - * @param transitions transitions for the state - * @param onExitActions actions to be executed before leaving the state. - */ - public SubflowStateModel(String id, String subflow, String subflowAttributeMapper, LinkedList inputs, - LinkedList outputs, LinkedList attributes, SecuredModel secured, LinkedList onEntryActions, - LinkedList exceptionHandlers, LinkedList transitions, LinkedList onExitActions) { - setId(id); - setSubflow(subflow); - setSubflowAttributeMapper(subflowAttributeMapper); - setInputs(inputs); - setOutputs(outputs); - setAttributes(attributes); - setSecured(secured); - setOnEntryActions(onEntryActions); - setExceptionHandlers(exceptionHandlers); - setTransitions(transitions); - setOnExitActions(onExitActions); - } - /** * Merge properties * @param model the subflow state to merge into this state */ public void merge(Model model) { - if (isMergeableWith(model)) { - SubflowStateModel state = (SubflowStateModel) model; - setAttributes(merge(getAttributes(), state.getAttributes())); - setSecured((SecuredModel) merge(getSecured(), state.getSecured())); - setOnEntryActions(merge(getOnEntryActions(), state.getOnEntryActions(), false)); - setExceptionHandlers(merge(getExceptionHandlers(), state.getExceptionHandlers())); - setTransitions(merge(getTransitions(), state.getTransitions())); - setOnExitActions(merge(getOnExitActions(), state.getOnExitActions(), false)); - setSubflow(merge(getSubflow(), state.getSubflow())); - setSubflowAttributeMapper(merge(getSubflowAttributeMapper(), state.getSubflowAttributeMapper())); - setInputs(merge(getInputs(), state.getInputs())); - setOutputs(merge(getOutputs(), state.getOutputs())); - } + SubflowStateModel state = (SubflowStateModel) model; + setAttributes(merge(getAttributes(), state.getAttributes())); + setSecured((SecuredModel) merge(getSecured(), state.getSecured())); + setOnEntryActions(merge(getOnEntryActions(), state.getOnEntryActions(), false)); + setExceptionHandlers(merge(getExceptionHandlers(), state.getExceptionHandlers())); + setTransitions(merge(getTransitions(), state.getTransitions())); + setOnExitActions(merge(getOnExitActions(), state.getOnExitActions(), false)); + setSubflow(merge(getSubflow(), state.getSubflow())); + setSubflowAttributeMapper(merge(getSubflowAttributeMapper(), state.getSubflowAttributeMapper())); + setInputs(merge(getInputs(), state.getInputs())); + setOutputs(merge(getOutputs(), state.getOutputs())); } /** @@ -101,9 +69,6 @@ public class SubflowStateModel extends AbstractTransitionableStateModel { * @param model the model to test */ public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } if (!(model instanceof SubflowStateModel)) { return false; } @@ -111,52 +76,6 @@ public class SubflowStateModel extends AbstractTransitionableStateModel { return ObjectUtils.nullSafeEquals(getId(), state.getId()); } - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof SubflowStateModel)) { - return false; - } - SubflowStateModel state = (SubflowStateModel) obj; - if (state == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getId(), state.getId())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getAttributes(), state.getAttributes())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getSecured(), state.getSecured())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOnEntryActions(), state.getOnEntryActions())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getExceptionHandlers(), state.getExceptionHandlers())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getTransitions(), state.getTransitions())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOnExitActions(), state.getOnExitActions())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getSubflow(), state.getSubflow())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getSubflowAttributeMapper(), state.getSubflowAttributeMapper())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getInputs(), state.getInputs())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOutputs(), state.getOutputs())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getId()) * 27 + ObjectUtils.nullSafeHashCode(getAttributes()) * 27 - + ObjectUtils.nullSafeHashCode(getSecured()) * 27 + ObjectUtils.nullSafeHashCode(getOnEntryActions()) - * 27 + ObjectUtils.nullSafeHashCode(getExceptionHandlers()) * 27 - + ObjectUtils.nullSafeHashCode(getTransitions()) * 27 - + ObjectUtils.nullSafeHashCode(getOnExitActions()) * 27 + ObjectUtils.nullSafeHashCode(getSubflow()) - * 27 + ObjectUtils.nullSafeHashCode(getSubflowAttributeMapper()) * 27 - + ObjectUtils.nullSafeHashCode(getInputs()) * 27 + ObjectUtils.nullSafeHashCode(getOutputs()) * 27; - } - /** * @return the subflow */ 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 cdf93893..5f92d2b8 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 @@ -40,41 +40,8 @@ public class TransitionModel extends AbstractModel { /** * Create a transition model - * @param on the matching criteria */ - public TransitionModel(String on) { - setOn(on); - } - - /** - * Create a transition model - * @param on the matching criteria - * @param to the identifier of the state to target - */ - public TransitionModel(String on, String to) { - setOn(on); - setTo(to); - } - - /** - * Create a transition model - * @param on the matching criteria - * @param to the identifier of the state to target - * @param onException class name of the exception to handle - * @param bind if the transition should bind to the defined model. Valid only for view state transitions - * @param attributes meta attributes for the transition - * @param secured security settings for the transition - * @param actions actions to be executed after matching the transition - */ - public TransitionModel(String on, String to, String onException, String bind, LinkedList attributes, - SecuredModel secured, LinkedList actions) { - setOn(on); - setTo(to); - setOnException(onException); - setBind(bind); - setAttributes(attributes); - setSecured(secured); - setActions(actions); + public TransitionModel() { } /** @@ -82,15 +49,13 @@ public class TransitionModel extends AbstractModel { * @param model the transition to merge into this transition */ public void merge(Model model) { - if (isMergeableWith(model)) { - TransitionModel transition = (TransitionModel) model; - setOnException(merge(getOnException(), transition.getOnException())); - setTo(merge(getTo(), transition.getTo())); - setBind(merge(getBind(), transition.getBind())); - setAttributes(merge(getAttributes(), transition.getAttributes())); - setSecured((SecuredModel) merge(getSecured(), transition.getSecured())); - setActions(merge(getActions(), transition.getActions(), false)); - } + TransitionModel transition = (TransitionModel) model; + setOnException(merge(getOnException(), transition.getOnException())); + setTo(merge(getTo(), transition.getTo())); + setBind(merge(getBind(), transition.getBind())); + setAttributes(merge(getAttributes(), transition.getAttributes())); + setSecured((SecuredModel) merge(getSecured(), transition.getSecured())); + setActions(merge(getActions(), transition.getActions(), false)); } /** @@ -98,9 +63,6 @@ public class TransitionModel extends AbstractModel { * @param model the model to test */ public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } if (!(model instanceof TransitionModel)) { return false; } @@ -108,41 +70,6 @@ public class TransitionModel extends AbstractModel { return ObjectUtils.nullSafeEquals(getOn(), transition.getOn()); } - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof TransitionModel)) { - return false; - } - TransitionModel transition = (TransitionModel) obj; - if (transition == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOn(), transition.getOn())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOnException(), transition.getOnException())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getTo(), transition.getTo())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getBind(), transition.getBind())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getAttributes(), transition.getAttributes())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getSecured(), transition.getSecured())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getActions(), transition.getActions())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getOn()) * 27 + ObjectUtils.nullSafeHashCode(getOnException()) * 27 - + ObjectUtils.nullSafeHashCode(getTo()) * 27 + ObjectUtils.nullSafeHashCode(getBind()) * 27 - + ObjectUtils.nullSafeHashCode(getAttributes()) * 27 + ObjectUtils.nullSafeHashCode(getSecured()) * 27 - + ObjectUtils.nullSafeHashCode(getActions()) * 27; - } - /** * @return the on */ 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 8ebd8e6c..6a7db71d 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,7 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; /** @@ -42,67 +41,19 @@ public class VarModel extends AbstractModel { } /** - * Create a variable model - * @param name the name of the variable - * @param className the class type of the variable - * @param scope the scope to store the variable - */ - public VarModel(String name, String className, String scope) { - setName(name); - setClassName(className); - setScope(scope); - } - - /** - * Merge properties - * @param model the var to merge into this var + * Vars are not mergeable + * @param model the render action to merge into this render */ public void merge(Model model) { - if (isMergeableWith(model)) { - VarModel var = (VarModel) model; - setClassName(merge(getClassName(), var.getClassName())); - setScope(merge(getScope(), var.getScope())); - } + // not mergeable } /** - * Tests if the model is able to be merged with this var + * Vars are not mergeable * @param model the model to test */ public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } - if (!(model instanceof VarModel)) { - return false; - } - VarModel var = (VarModel) model; - return ObjectUtils.nullSafeEquals(getName(), var.getName()); - } - - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof VarModel)) { - return false; - } - VarModel var = (VarModel) obj; - if (var == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getName(), var.getName())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getClassName(), var.getClassName())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getScope(), var.getScope())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getName()) * 27 + ObjectUtils.nullSafeHashCode(getClassName()) * 27 - + ObjectUtils.nullSafeHashCode(getScope()) * 27; + return false; } /** 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 d8048a03..3081cf3e 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 @@ -52,70 +52,24 @@ public class ViewStateModel extends AbstractTransitionableStateModel { setId(id); } - /** - * Create a view state model - * @param id the identifier of the state - * @param view the view to render - */ - public ViewStateModel(String id, String view) { - setId(id); - setView(view); - } - - /** - * Create a view state model - * @param id the identifier of the state - * @param view the view to render - * @param redirect request a flow execution redirect before render - * @param popup view should render in a popup dialog - * @param model the model object to bind for this view - * @param vars variables for this state - * @param onRenderActions actions to be executed before rendering - * @param attributes meta attributes for this state - * @param secured the security settings for this state - * @param onEntryActions actions to be executed on entry - * @param exceptionHandlers exception handlers for this state - * @param transitions transitions for this state - * @param onExitActions actions to be executed before exiting - */ - public ViewStateModel(String id, String view, String redirect, String popup, String model, LinkedList vars, - LinkedList onRenderActions, LinkedList attributes, SecuredModel secured, LinkedList onEntryActions, - LinkedList exceptionHandlers, LinkedList transitions, LinkedList onExitActions) { - setId(id); - setView(view); - setRedirect(redirect); - setPopup(popup); - setModel(model); - setVars(vars); - setOnRenderActions(onRenderActions); - setAttributes(attributes); - setSecured(secured); - setOnEntryActions(onEntryActions); - setExceptionHandlers(exceptionHandlers); - setTransitions(transitions); - setOnExitActions(onExitActions); - } - /** * Merge properties * @param model the view state to merge into this state */ public void merge(Model model) { - if (isMergeableWith(model)) { - ViewStateModel state = (ViewStateModel) model; - setAttributes(merge(getAttributes(), state.getAttributes())); - setSecured((SecuredModel) merge(getSecured(), state.getSecured())); - setOnEntryActions(merge(getOnEntryActions(), state.getOnEntryActions(), false)); - setExceptionHandlers(merge(getExceptionHandlers(), state.getExceptionHandlers())); - setTransitions(merge(getTransitions(), state.getTransitions())); - setOnExitActions(merge(getOnExitActions(), state.getOnExitActions(), false)); - setView(merge(getView(), state.getView())); - setRedirect(merge(getRedirect(), state.getRedirect())); - setPopup(merge(getPopup(), state.getPopup())); - setModel(merge(getModel(), state.getModel())); - setVars(merge(getVars(), state.getVars(), false)); - setOnRenderActions(merge(getOnRenderActions(), state.getOnRenderActions(), false)); - } + ViewStateModel state = (ViewStateModel) model; + setAttributes(merge(getAttributes(), state.getAttributes())); + setSecured((SecuredModel) merge(getSecured(), state.getSecured())); + setOnEntryActions(merge(getOnEntryActions(), state.getOnEntryActions(), false)); + setExceptionHandlers(merge(getExceptionHandlers(), state.getExceptionHandlers())); + setTransitions(merge(getTransitions(), state.getTransitions())); + setOnExitActions(merge(getOnExitActions(), state.getOnExitActions(), false)); + setView(merge(getView(), state.getView())); + setRedirect(merge(getRedirect(), state.getRedirect())); + setPopup(merge(getPopup(), state.getPopup())); + setModel(merge(getModel(), state.getModel())); + setVars(merge(getVars(), state.getVars(), false)); + setOnRenderActions(merge(getOnRenderActions(), state.getOnRenderActions(), false)); } /** @@ -123,9 +77,6 @@ public class ViewStateModel extends AbstractTransitionableStateModel { * @param model the model to test */ public boolean isMergeableWith(Model model) { - if (model == null) { - return false; - } if (!(model instanceof ViewStateModel)) { return false; } @@ -133,57 +84,6 @@ public class ViewStateModel extends AbstractTransitionableStateModel { return ObjectUtils.nullSafeEquals(getId(), state.getId()); } - public boolean equals(Object obj) { - if (this == obj) { - return true; - } else if (!(obj instanceof ViewStateModel)) { - return false; - } - ViewStateModel state = (ViewStateModel) obj; - if (state == null) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getId(), state.getId())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getAttributes(), state.getAttributes())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getSecured(), state.getSecured())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOnEntryActions(), state.getOnEntryActions())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getExceptionHandlers(), state.getExceptionHandlers())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getTransitions(), state.getTransitions())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOnExitActions(), state.getOnExitActions())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getView(), state.getView())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getRedirect(), state.getRedirect())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getPopup(), state.getPopup())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getModel(), state.getModel())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getVars(), state.getVars())) { - return false; - } else if (!ObjectUtils.nullSafeEquals(getOnRenderActions(), state.getOnRenderActions())) { - return false; - } else { - return true; - } - } - - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getId()) * 27 + ObjectUtils.nullSafeHashCode(getAttributes()) * 27 - + ObjectUtils.nullSafeHashCode(getSecured()) * 27 + ObjectUtils.nullSafeHashCode(getOnEntryActions()) - * 27 + ObjectUtils.nullSafeHashCode(getExceptionHandlers()) * 27 - + ObjectUtils.nullSafeHashCode(getTransitions()) * 27 - + ObjectUtils.nullSafeHashCode(getOnExitActions()) * 27 + ObjectUtils.nullSafeHashCode(getView()) * 27 - + ObjectUtils.nullSafeHashCode(getRedirect()) * 27 + ObjectUtils.nullSafeHashCode(getPopup()) * 27 - + ObjectUtils.nullSafeHashCode(getModel()) * 27 + ObjectUtils.nullSafeHashCode(getVars()) * 27 - + ObjectUtils.nullSafeHashCode(getOnRenderActions()) * 27; - } - /** * @return the view */ 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 2198e65e..f1a4f0ff 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 @@ -175,7 +175,7 @@ public class XmlFlowModelBuilder implements FlowModelBuilder, ResourceHolder { .hasNext();) { attributes.add(parseAttribute((Element) attributeIt.next())); } - return attributes; + return !attributes.isEmpty() ? attributes : null; } protected LinkedList parseVars(Element ele) { @@ -183,7 +183,7 @@ public class XmlFlowModelBuilder implements FlowModelBuilder, ResourceHolder { for (Iterator varIt = DomUtils.getChildElementsByTagName(ele, "var").iterator(); varIt.hasNext();) { vars.add(parseVar((Element) varIt.next())); } - return vars; + return !vars.isEmpty() ? vars : null; } protected LinkedList parseInputs(Element ele) { @@ -191,7 +191,7 @@ public class XmlFlowModelBuilder implements FlowModelBuilder, ResourceHolder { for (Iterator inputIt = DomUtils.getChildElementsByTagName(ele, "input").iterator(); inputIt.hasNext();) { inputs.add(parseInput((Element) inputIt.next())); } - return inputs; + return !inputs.isEmpty() ? inputs : null; } protected LinkedList parseOutputs(Element ele) { @@ -199,16 +199,19 @@ public class XmlFlowModelBuilder implements FlowModelBuilder, ResourceHolder { for (Iterator outputIt = DomUtils.getChildElementsByTagName(ele, "output").iterator(); outputIt.hasNext();) { outputs.add(parseOutput((Element) outputIt.next())); } - return outputs; + return !outputs.isEmpty() ? outputs : null; } protected LinkedList parseActions(Element ele) { + if (ele == null) { + return null; + } LinkedList actions = new LinkedList(); for (Iterator actionIt = getChildElementsByTagNames(ele, new String[] { "evaluate", "render", "set" }) .iterator(); actionIt.hasNext();) { actions.add(parseAction((Element) actionIt.next())); } - return actions; + return !actions.isEmpty() ? actions : null; } protected LinkedList parseStates(Element ele) { @@ -218,7 +221,7 @@ public class XmlFlowModelBuilder implements FlowModelBuilder, ResourceHolder { .iterator(); stateIt.hasNext();) { states.add(parseState((Element) stateIt.next())); } - return states; + return !states.isEmpty() ? states : null; } protected LinkedList parseTransitions(Element ele) { @@ -227,8 +230,7 @@ public class XmlFlowModelBuilder implements FlowModelBuilder, ResourceHolder { .hasNext();) { transitions.add(parseTransition((Element) transitionIt.next())); } - return transitions; - + return !transitions.isEmpty() ? transitions : null; } protected LinkedList parseExceptionHandlers(Element ele) { @@ -237,7 +239,7 @@ public class XmlFlowModelBuilder implements FlowModelBuilder, ResourceHolder { .hasNext();) { exceptionHandlers.add(parseExceptionHandler((Element) exceptionHandlerIt.next())); } - return exceptionHandlers; + return !exceptionHandlers.isEmpty() ? exceptionHandlers : null; } protected LinkedList parseBeanImports(Element ele) { @@ -246,7 +248,7 @@ public class XmlFlowModelBuilder implements FlowModelBuilder, ResourceHolder { .hasNext();) { beanImports.add(parseBeanImport((Element) beanImportIt.next())); } - return beanImports; + return !beanImports.isEmpty() ? beanImports : null; } protected LinkedList parseIfs(Element ele) { @@ -254,7 +256,7 @@ public class XmlFlowModelBuilder implements FlowModelBuilder, ResourceHolder { for (Iterator ifIt = DomUtils.getChildElementsByTagName(ele, "if").iterator(); ifIt.hasNext();) { ifs.add(parseIf((Element) ifIt.next())); } - return ifs; + return !ifs.isEmpty() ? ifs : null; } protected AbstractActionModel parseAction(Element ele) { @@ -286,23 +288,18 @@ public class XmlFlowModelBuilder implements FlowModelBuilder, ResourceHolder { } protected LinkedList parseGlobalTransitions(Element ele) { + ele = DomUtils.getChildElementByTagName(ele, "global-transitions"); if (ele == null) { return null; - } else if (!DomUtils.nodeNameEquals(ele, "global-transitions")) { - return parseGlobalTransitions(DomUtils.getChildElementByTagName(ele, "global-transitions")); } else { return parseTransitions(ele); } } protected AttributeModel parseAttribute(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "attribute")) { - return parseAttribute(DomUtils.getChildElementByTagName(ele, "attribute")); - } else { - return new AttributeModel(ele.getAttribute("name"), parseValue(ele), ele.getAttribute("type")); - } + AttributeModel attribute = new AttributeModel(ele.getAttribute("name"), parseValue(ele)); + attribute.setType(ele.getAttribute("type")); + return attribute; } protected String parseValue(Element ele) { @@ -315,239 +312,172 @@ public class XmlFlowModelBuilder implements FlowModelBuilder, ResourceHolder { } protected SecuredModel parseSecured(Element ele) { + ele = DomUtils.getChildElementByTagName(ele, "secured"); if (ele == null) { return null; - } else if (!DomUtils.nodeNameEquals(ele, "secured")) { - return parseSecured(DomUtils.getChildElementByTagName(ele, "secured")); } else { - return new SecuredModel(ele.getAttribute("attributes"), ele.getAttribute("match")); + SecuredModel secured = new SecuredModel(ele.getAttribute("attributes")); + secured.setMatch(ele.getAttribute("match")); + return secured; } } protected PersistenceContextModel parsePersistenceContext(Element ele) { + ele = DomUtils.getChildElementByTagName(ele, "persistence-context"); if (ele == null) { return null; - } else if (!DomUtils.nodeNameEquals(ele, "persistence-context")) { - return parsePersistenceContext(DomUtils.getChildElementByTagName(ele, "persistence-context")); } else { return new PersistenceContextModel(); } } protected VarModel parseVar(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "var")) { - return parseVar(DomUtils.getChildElementByTagName(ele, "var")); - } else { - return new VarModel(ele.getAttribute("name"), ele.getAttribute("class"), ele.getAttribute("scope")); - } + VarModel var = new VarModel(ele.getAttribute("name"), ele.getAttribute("class")); + var.setScope(ele.getAttribute("scope")); + return var; } protected InputModel parseInput(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "input")) { - return parseInput(DomUtils.getChildElementByTagName(ele, "input")); - } else { - return new InputModel(ele.getAttribute("name"), ele.getAttribute("value"), ele.getAttribute("type"), ele - .getAttribute("required")); - } + InputModel input = new InputModel(ele.getAttribute("name"), ele.getAttribute("value")); + input.setType(ele.getAttribute("type")); + input.setRequired(ele.getAttribute("required")); + return input; } protected OutputModel parseOutput(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "output")) { - return parseOutput(DomUtils.getChildElementByTagName(ele, "output")); - } else { - return new OutputModel(ele.getAttribute("name"), ele.getAttribute("value"), ele.getAttribute("type"), ele - .getAttribute("required")); - } + OutputModel output = new OutputModel(ele.getAttribute("name"), ele.getAttribute("value")); + output.setType(ele.getAttribute("type")); + output.setRequired(ele.getAttribute("required")); + return output; } protected TransitionModel parseTransition(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "transition")) { - return parseTransition(DomUtils.getChildElementByTagName(ele, "transition")); - } else { - return new TransitionModel(ele.getAttribute("on"), ele.getAttribute("to"), - ele.getAttribute("on-exception"), ele.getAttribute("bind"), parseAttributes(ele), - parseSecured(ele), parseActions(ele)); - } + TransitionModel transition = new TransitionModel(); + transition.setOn(ele.getAttribute("on")); + transition.setTo(ele.getAttribute("to")); + transition.setOnException(ele.getAttribute("on-exception")); + transition.setBind(ele.getAttribute("bind")); + transition.setAttributes(parseAttributes(ele)); + transition.setSecured(parseSecured(ele)); + transition.setActions(parseActions(ele)); + return transition; } protected ExceptionHandlerModel parseExceptionHandler(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "exception-handler")) { - return parseExceptionHandler(DomUtils.getChildElementByTagName(ele, "exception-handler")); - } else { - return new ExceptionHandlerModel(ele.getAttribute("bean-name")); - } + return new ExceptionHandlerModel(ele.getAttribute("bean-name")); } protected BeanImportModel parseBeanImport(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "bean-import")) { - return parseBeanImport(DomUtils.getChildElementByTagName(ele, "bean-import")); - } else { - return new BeanImportModel(ele.getAttribute("resource")); - } + return new BeanImportModel(ele.getAttribute("resource")); } protected IfModel parseIf(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "if")) { - return parseIf(DomUtils.getChildElementByTagName(ele, "if")); - } else { - return new IfModel(ele.getAttribute("test"), ele.getAttribute("then"), ele.getAttribute("else")); - } + IfModel conditional = new IfModel(ele.getAttribute("test"), ele.getAttribute("then")); + conditional.setElse(ele.getAttribute("else")); + return conditional; } protected LinkedList parseOnStartActions(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "on-start")) { - return parseOnStartActions(DomUtils.getChildElementByTagName(ele, "on-start")); - } else { - return parseActions(ele); - } + return parseActions(DomUtils.getChildElementByTagName(ele, "on-start")); } protected LinkedList parseOnEntryActions(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "on-entry")) { - return parseOnEntryActions(DomUtils.getChildElementByTagName(ele, "on-entry")); - } else { - return parseActions(ele); - } - } - - protected LinkedList parseOnExitActions(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "on-exit")) { - return parseOnExitActions(DomUtils.getChildElementByTagName(ele, "on-exit")); - } else { - return parseActions(ele); - } + return parseActions(DomUtils.getChildElementByTagName(ele, "on-entry")); } protected LinkedList parseOnRenderActions(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "on-render")) { - return parseOnRenderActions(DomUtils.getChildElementByTagName(ele, "on-render")); - } else { - return parseActions(ele); - } + return parseActions(DomUtils.getChildElementByTagName(ele, "on-render")); + } + + protected LinkedList parseOnExitActions(Element ele) { + return parseActions(DomUtils.getChildElementByTagName(ele, "on-exit")); } protected LinkedList parseOnEndActions(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "on-end")) { - return parseOnEndActions(DomUtils.getChildElementByTagName(ele, "on-end")); - } else { - return parseActions(ele); - } + return parseActions(DomUtils.getChildElementByTagName(ele, "on-end")); } protected EvaluateModel parseEvaluate(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "evaluate")) { - return parseEvaluate(DomUtils.getChildElementByTagName(ele, "evaluate")); - } else { - return new EvaluateModel(ele.getAttribute("expression"), ele.getAttribute("result"), ele - .getAttribute("result-type")); - } + EvaluateModel evaluate = new EvaluateModel(ele.getAttribute("expression")); + evaluate.setResult(ele.getAttribute("result")); + evaluate.setResultType(ele.getAttribute("result-type")); + return evaluate; } protected RenderModel parseRender(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "render")) { - return parseRender(DomUtils.getChildElementByTagName(ele, "render")); - } else { - return new RenderModel(ele.getAttribute("fragments")); - } + return new RenderModel(ele.getAttribute("fragments")); } protected SetModel parseSet(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "set")) { - return parseSet(DomUtils.getChildElementByTagName(ele, "set")); - } else { - return new SetModel(ele.getAttribute("name"), ele.getAttribute("value"), ele.getAttribute("type")); - } + SetModel set = new SetModel(ele.getAttribute("name"), ele.getAttribute("value")); + set.setType(ele.getAttribute("type")); + return set; } protected ActionStateModel parseActionState(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "action-state")) { - return parseActionState(DomUtils.getChildElementByTagName(ele, "action-state")); - } else { - return new ActionStateModel(ele.getAttribute("id"), parseAttributes(ele), parseSecured(ele), - parseOnEntryActions(ele), parseTransitions(ele), parseOnExitActions(ele), parseActions(ele), - parseExceptionHandlers(ele)); - } + ActionStateModel state = new ActionStateModel(ele.getAttribute("id")); + state.setAttributes(parseAttributes(ele)); + state.setSecured(parseSecured(ele)); + state.setOnEntryActions(parseOnEntryActions(ele)); + state.setTransitions(parseTransitions(ele)); + state.setOnExitActions(parseOnExitActions(ele)); + state.setActions(parseActions(ele)); + state.setExceptionHandlers(parseExceptionHandlers(ele)); + return state; } protected ViewStateModel parseViewState(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "view-state")) { - return parseViewState(DomUtils.getChildElementByTagName(ele, "view-state")); - } else { - return new ViewStateModel(ele.getAttribute("id"), ele.getAttribute("view"), ele.getAttribute("redirect"), - ele.getAttribute("popup"), ele.getAttribute("model"), parseVars(ele), parseOnRenderActions(ele), - parseAttributes(ele), parseSecured(ele), parseOnEntryActions(ele), parseExceptionHandlers(ele), - parseTransitions(ele), parseOnExitActions(ele)); - } + ViewStateModel state = new ViewStateModel(ele.getAttribute("id")); + state.setView(ele.getAttribute("view")); + state.setRedirect(ele.getAttribute("redirect")); + state.setPopup(ele.getAttribute("popup")); + state.setModel(ele.getAttribute("model")); + state.setVars(parseVars(ele)); + state.setOnRenderActions(parseOnRenderActions(ele)); + state.setAttributes(parseAttributes(ele)); + state.setSecured(parseSecured(ele)); + state.setOnEntryActions(parseOnEntryActions(ele)); + state.setExceptionHandlers(parseExceptionHandlers(ele)); + state.setTransitions(parseTransitions(ele)); + state.setOnExitActions(parseOnExitActions(ele)); + return state; } protected DecisionStateModel parseDecisionState(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "decision-state")) { - return parseDecisionState(DomUtils.getChildElementByTagName(ele, "decision-state")); - } else { - return new DecisionStateModel(ele.getAttribute("id"), parseIfs(ele), parseOnExitActions(ele), - parseAttributes(ele), parseSecured(ele), parseOnEntryActions(ele), parseExceptionHandlers(ele)); - } + DecisionStateModel state = new DecisionStateModel(ele.getAttribute("id")); + state.setIfs(parseIfs(ele)); + state.setOnExitActions(parseOnExitActions(ele)); + state.setAttributes(parseAttributes(ele)); + state.setSecured(parseSecured(ele)); + state.setOnEntryActions(parseOnEntryActions(ele)); + state.setExceptionHandlers(parseExceptionHandlers(ele)); + return state; } protected SubflowStateModel parseSubflowState(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "subflow-state")) { - return parseSubflowState(DomUtils.getChildElementByTagName(ele, "subflow-state")); - } else { - return new SubflowStateModel(ele.getAttribute("id"), ele.getAttribute("subflow"), ele - .getAttribute("subflow-attribute-mapper"), parseInputs(ele), parseOutputs(ele), - parseAttributes(ele), parseSecured(ele), parseOnEntryActions(ele), parseExceptionHandlers(ele), - parseTransitions(ele), parseOnExitActions(ele)); - } + SubflowStateModel state = new SubflowStateModel(ele.getAttribute("id"), ele.getAttribute("subflow")); + state.setSubflowAttributeMapper(ele.getAttribute("subflow-attribute-mapper")); + state.setInputs(parseInputs(ele)); + state.setOutputs(parseOutputs(ele)); + state.setAttributes(parseAttributes(ele)); + state.setSecured(parseSecured(ele)); + state.setOnEntryActions(parseOnEntryActions(ele)); + state.setExceptionHandlers(parseExceptionHandlers(ele)); + state.setTransitions(parseTransitions(ele)); + state.setOnExitActions(parseOnExitActions(ele)); + return state; } protected EndStateModel parseEndState(Element ele) { - if (ele == null) { - return null; - } else if (!DomUtils.nodeNameEquals(ele, "end-state")) { - return parseEndState(DomUtils.getChildElementByTagName(ele, "end-state")); - } else { - return new EndStateModel(ele.getAttribute("id"), ele.getAttribute("view-factory"), ele - .getAttribute("commit"), parseOutputs(ele), parseAttributes(ele), parseSecured(ele), - parseOnEntryActions(ele), parseExceptionHandlers(ele)); - } + EndStateModel state = new EndStateModel(ele.getAttribute("id")); + state.setView(ele.getAttribute("view")); + state.setCommit(ele.getAttribute("commit")); + state.setOutputs(parseOutputs(ele)); + state.setAttributes(parseAttributes(ele)); + state.setSecured(parseSecured(ele)); + state.setOnEntryActions(parseOnEntryActions(ele)); + state.setExceptionHandlers(parseExceptionHandlers(ele)); + return state; } // TODO: submit this to DomUtils diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/builder/FlowModelFlowBuilderTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/builder/FlowModelFlowBuilderTests.java index f40c7cc2..358a23a2 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/builder/FlowModelFlowBuilderTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/builder/FlowModelFlowBuilderTests.java @@ -78,7 +78,9 @@ public class FlowModelFlowBuilderTests extends TestCase { public void testCustomFlowAttribute() { model.addAttribute(new AttributeModel("foo", "bar")); - model.addAttribute(new AttributeModel("number", "1", "integer")); + AttributeModel attribute = new AttributeModel("number", "1"); + attribute.setType("integer"); + model.addAttribute(attribute); model.addEndState(new EndStateModel("end")); Flow flow = getFlow(model); assertEquals("bar", flow.getAttributes().get("foo")); @@ -94,10 +96,16 @@ public class FlowModelFlowBuilderTests extends TestCase { } public void testFlowInputOutputMapping() { + InputModel input; + OutputModel output; model.addInput(new InputModel("foo", "flowScope.foo")); model.addInput(new InputModel("foo", "flowScope.bar")); - model.addInput(new InputModel("number", "flowScope.baz", "integer", null)); - model.addInput(new InputModel("required", "flowScope.boop", null, "true")); + input = new InputModel("number", "flowScope.baz"); + input.setType("integer"); + model.addInput(input); + input = new InputModel("required", "flowScope.boop"); + input.setRequired("true"); + model.addInput(input); EndStateModel end = new EndStateModel("end"); end.addOutput(new OutputModel("foo", "flowScope.foo")); model.addEndState(end); @@ -105,18 +113,23 @@ public class FlowModelFlowBuilderTests extends TestCase { notReached.addOutput(new OutputModel("notReached", "flowScope.foo")); model.addEndState(notReached); model.addOutput(new OutputModel("differentName", "flowScope.bar")); - model.addOutput(new OutputModel("number", "flowScope.baz", "integer", null)); - model.addOutput(new OutputModel("required", "flowScope.baz", "integer", "true")); + output = new OutputModel("number", "flowScope.baz"); + output.setType("integer"); + model.addOutput(output); + output = new OutputModel("required", "flowScope.baz"); + output.setType("integer"); + output.setRequired("true"); + model.addOutput(output); model.addOutput(new OutputModel("literal", "'a literal'")); Flow flow = getFlow(model); FlowExecutionImplFactory factory = new FlowExecutionImplFactory(); FlowExecution execution = factory.createFlowExecution(flow); MockExternalContext context = new MockExternalContext(); - MutableAttributeMap input = new LocalAttributeMap(); - input.put("foo", "bar"); - input.put("number", "3"); - input.put("required", "9"); - execution.start(input, context); + MutableAttributeMap map = new LocalAttributeMap(); + map.put("foo", "bar"); + map.put("number", "3"); + map.put("required", "9"); + execution.start(map, context); Event outcome = execution.getOutcome(); assertEquals("end", outcome.getId()); assertEquals("bar", outcome.getAttributes().get("foo")); @@ -128,10 +141,16 @@ public class FlowModelFlowBuilderTests extends TestCase { } public void testFlowRequiredInputMapping() { + InputModel input; + OutputModel output; model.addInput(new InputModel("foo", "flowScope.foo")); model.addInput(new InputModel("foo", "flowScope.bar")); - model.addInput(new InputModel("number", "flowScope.baz", "integer", null)); - model.addInput(new InputModel("required", "flowScope.boop", null, "true")); + input = new InputModel("number", "flowScope.baz"); + input.setType("integer"); + model.addInput(input); + input = new InputModel("required", "flowScope.boop"); + input.setRequired("true"); + model.addInput(input); EndStateModel end = new EndStateModel("end"); end.addOutput(new OutputModel("foo", "flowScope.foo")); model.addEndState(end); @@ -139,26 +158,37 @@ public class FlowModelFlowBuilderTests extends TestCase { notReached.addOutput(new OutputModel("notReached", "flowScope.foo")); model.addEndState(notReached); model.addOutput(new OutputModel("differentName", "flowScope.bar")); - model.addOutput(new OutputModel("number", "flowScope.baz", "integer", null)); - model.addOutput(new OutputModel("required", "flowScope.baz", "integer", "true")); + output = new OutputModel("number", "flowScope.baz"); + output.setType("integer"); + model.addOutput(output); + output = new OutputModel("required", "flowScope.baz"); + output.setType("integer"); + output.setRequired("true"); + model.addOutput(output); model.addOutput(new OutputModel("literal", "'a literal'")); Flow flow = getFlow(model); FlowExecutionImplFactory factory = new FlowExecutionImplFactory(); FlowExecution execution = factory.createFlowExecution(flow); MockExternalContext context = new MockExternalContext(); - MutableAttributeMap input = new LocalAttributeMap(); + MutableAttributeMap map = new LocalAttributeMap(); try { - execution.start(input, context); + execution.start(map, context); fail("Should have failed"); } catch (FlowInputMappingException e) { } } public void testFlowRequiredOutputMapping() { + InputModel input; + OutputModel output; model.addInput(new InputModel("foo", "flowScope.foo")); model.addInput(new InputModel("foo", "flowScope.bar")); - model.addInput(new InputModel("number", "flowScope.baz", "integer", null)); - model.addInput(new InputModel("required", "flowScope.boop", null, "true")); + input = new InputModel("number", "flowScope.baz"); + input.setType("integer"); + model.addInput(input); + input = new InputModel("required", "flowScope.boop"); + input.setRequired("true"); + model.addInput(input); EndStateModel end = new EndStateModel("end"); end.addOutput(new OutputModel("foo", "flowScope.foo")); model.addEndState(end); @@ -166,17 +196,22 @@ public class FlowModelFlowBuilderTests extends TestCase { notReached.addOutput(new OutputModel("notReached", "flowScope.foo")); model.addEndState(notReached); model.addOutput(new OutputModel("differentName", "flowScope.bar")); - model.addOutput(new OutputModel("number", "flowScope.baz", "integer", null)); - model.addOutput(new OutputModel("required", "flowScope.baz", "integer", "true")); + output = new OutputModel("number", "flowScope.baz"); + output.setType("integer"); + model.addOutput(output); + output = new OutputModel("required", "flowScope.baz"); + output.setType("integer"); + output.setRequired("true"); + model.addOutput(output); model.addOutput(new OutputModel("literal", "'a literal'")); Flow flow = getFlow(model); FlowExecutionImplFactory factory = new FlowExecutionImplFactory(); FlowExecution execution = factory.createFlowExecution(flow); MockExternalContext context = new MockExternalContext(); - MutableAttributeMap input = new LocalAttributeMap(); - input.put("required", "yo"); + MutableAttributeMap map = new LocalAttributeMap(); + map.put("required", "yo"); try { - execution.start(input, context); + execution.start(map, context); fail("Should have failed"); } catch (FlowOutputMappingException e) { } @@ -208,7 +243,8 @@ public class FlowModelFlowBuilderTests extends TestCase { public void testFlowSecuredTransition() { model.addEndState(new EndStateModel("end")); - TransitionModel transition = new TransitionModel(null, "end"); + TransitionModel transition = new TransitionModel(); + transition.setTo("end"); transition.setSecured(new SecuredModel("ROLE_USER")); model.addGlobalTransition(transition); Flow flow = getFlow(model); @@ -222,7 +258,9 @@ public class FlowModelFlowBuilderTests extends TestCase { public void testFlowVariable() { model.addVar(new VarModel("flow-foo", "org.springframework.webflow.TestBean")); - model.addVar(new VarModel("conversation-foo", "org.springframework.webflow.TestBean", "conversation")); + VarModel var = new VarModel("conversation-foo", "org.springframework.webflow.TestBean"); + var.setScope("conversation"); + model.addVar(var); model.addEndState(new EndStateModel("end")); Flow flow = getFlow(model); assertEquals("flow-foo", flow.getVariable("flow-foo").getName()); @@ -256,7 +294,9 @@ public class FlowModelFlowBuilderTests extends TestCase { } public void testViewStateFlowRedirect() { - model.addViewState(new ViewStateModel("view", "flowRedirect:myFlow?input=#{flowScope.foo}")); + ViewStateModel state = new ViewStateModel("view"); + state.setView("flowRedirect:myFlow?input=#{flowScope.foo}"); + model.addViewState(state); Flow flow = getFlow(model); ViewFactory vf = ((ViewState) flow.getStateInstance("view")).getViewFactory(); assertTrue(vf instanceof ActionExecutingViewFactory); @@ -265,8 +305,9 @@ public class FlowModelFlowBuilderTests extends TestCase { } public void testViewStateExternalRedirect() { - model.addViewState(new ViewStateModel("view", - "externalRedirect:http://www.paypal.com?_callbackUrl=#{flowExecutionUri}")); + ViewStateModel state = new ViewStateModel("view"); + state.setView("externalRedirect:http://www.paypal.com?_callbackUrl=#{flowExecutionUri}"); + model.addViewState(state); Flow flow = getFlow(model); ViewFactory vf = ((ViewState) flow.getStateInstance("view")).getViewFactory(); assertTrue(vf instanceof ActionExecutingViewFactory); diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/ActionStateModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/ActionStateModelTests.java index 7c0deacc..8c70f45c 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/ActionStateModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/ActionStateModelTests.java @@ -15,9 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.ActionStateModel; -import org.springframework.webflow.engine.model.EvaluateModel; - import junit.framework.TestCase; /** @@ -25,34 +22,28 @@ import junit.framework.TestCase; */ public class ActionStateModelTests extends TestCase { + public void testMergeable() { + ActionStateModel child = new ActionStateModel("child"); + assertTrue(child.isMergeableWith(child)); + } + + public void testNotMergeable() { + ActionStateModel child = new ActionStateModel("child"); + ActionStateModel parent = new ActionStateModel("parent"); + assertFalse(child.isMergeableWith(parent)); + } + + public void testNotMergeableWithNull() { + ActionStateModel child = new ActionStateModel("child"); + assertFalse(child.isMergeableWith(null)); + } + public void testMerge() { - ActionStateModel child = new ActionStateModel("child"); - ActionStateModel parent = new ActionStateModel("parent"); - child.merge(parent); - assertEquals("child", child.getId()); - } - - public void testMergeNullParent() { - ActionStateModel child = new ActionStateModel("child"); - ActionStateModel parent = null; - child.merge(parent); - assertEquals("child", child.getId()); - } - - public void testMergeOverrideMatch() { ActionStateModel child = new ActionStateModel("child"); ActionStateModel parent = new ActionStateModel("child"); - parent.addAction(new EvaluateModel("eval1")); + parent.setSecured(new SecuredModel("secured")); child.merge(parent); - assertEquals(1, child.getActions().size()); - } - - public void testMergeOverrideMatchFailed() { - ActionStateModel child = new ActionStateModel("child"); - ActionStateModel parent = new ActionStateModel("parent"); - parent.addAction(new EvaluateModel("eval1")); - child.merge(parent); - assertEquals(null, child.getActions()); + assertNotNull(child.getSecured()); } } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/AttributeModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/AttributeModelTests.java index 179dd9be..2f2a0a0e 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/AttributeModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/AttributeModelTests.java @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.AttributeModel; - import junit.framework.TestCase; /** @@ -24,32 +22,28 @@ import junit.framework.TestCase; */ public class AttributeModelTests extends TestCase { + public void testMergeable() { + AttributeModel child = new AttributeModel("child", "value"); + assertTrue(child.isMergeableWith(child)); + } + + public void testNotMergeable() { + AttributeModel child = new AttributeModel("child", "value"); + AttributeModel parent = new AttributeModel("parent", "value"); + assertFalse(child.isMergeableWith(parent)); + } + + public void testNotMergeableWithNull() { + AttributeModel child = new AttributeModel("child", "value"); + assertFalse(child.isMergeableWith(null)); + } + public void testMerge() { AttributeModel child = new AttributeModel("child", "childvalue"); - AttributeModel parent = new AttributeModel("parent", "parentvalue"); - child.merge(parent); - assertEquals("child", child.getName()); - } - - public void testMergeNullParent() { - AttributeModel child = new AttributeModel("child", "childvalue"); - AttributeModel parent = null; - child.merge(parent); - assertEquals("child", child.getName()); - } - - public void testMergeOverrideMatch() { - AttributeModel child = new AttributeModel("child", "childvalue"); - AttributeModel parent = new AttributeModel("child", "childvalue", "string"); + AttributeModel parent = new AttributeModel("child", "childvalue"); + parent.setType("string"); child.merge(parent); assertEquals("string", child.getType()); } - public void testMergeOverrideMatchFailed() { - AttributeModel child = new AttributeModel("child", "childvalue"); - AttributeModel parent = new AttributeModel("parent", "parentvalue", "string"); - child.merge(parent); - assertEquals(null, child.getType()); - } - } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/BeanImportModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/BeanImportModelTests.java index 784a6296..f5e82ad8 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/BeanImportModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/BeanImportModelTests.java @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.BeanImportModel; - import junit.framework.TestCase; /** @@ -24,26 +22,9 @@ import junit.framework.TestCase; */ public class BeanImportModelTests extends TestCase { - public void testMerge() { + public void testNotMergeable() { BeanImportModel child = new BeanImportModel("child"); - BeanImportModel parent = new BeanImportModel("parent"); - child.merge(parent); - assertEquals("child", child.getResource()); - } - - public void testMergeNullParent() { - BeanImportModel child = new BeanImportModel("child"); - BeanImportModel parent = null; - child.merge(parent); - assertEquals("child", child.getResource()); - } - - public void testMergeOverrideMatch() { - // bean import will never merge - } - - public void testMergeOverrideMatchFailed() { - // bean import will never merge + assertFalse(child.isMergeableWith(child)); } } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/DecisionStateModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/DecisionStateModelTests.java index a191c460..284e9588 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/DecisionStateModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/DecisionStateModelTests.java @@ -15,9 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.DecisionStateModel; -import org.springframework.webflow.engine.model.IfModel; - import junit.framework.TestCase; /** @@ -25,34 +22,28 @@ import junit.framework.TestCase; */ public class DecisionStateModelTests extends TestCase { + public void testMergeable() { + DecisionStateModel child = new DecisionStateModel("child"); + assertTrue(child.isMergeableWith(child)); + } + + public void testNotMergeable() { + DecisionStateModel child = new DecisionStateModel("child"); + DecisionStateModel parent = new DecisionStateModel("parent"); + assertFalse(child.isMergeableWith(parent)); + } + + public void testNotMergeableWithNull() { + DecisionStateModel child = new DecisionStateModel("child"); + assertFalse(child.isMergeableWith(null)); + } + public void testMerge() { - DecisionStateModel child = new DecisionStateModel("child"); - DecisionStateModel parent = new DecisionStateModel("parent"); - child.merge(parent); - assertEquals("child", child.getId()); - } - - public void testMergeNullParent() { - DecisionStateModel child = new DecisionStateModel("child"); - DecisionStateModel parent = null; - child.merge(parent); - assertEquals("child", child.getId()); - } - - public void testMergeOverrideMatch() { DecisionStateModel child = new DecisionStateModel("child"); DecisionStateModel parent = new DecisionStateModel("child"); - parent.addIf(new IfModel("test", "then")); + parent.setSecured(new SecuredModel("secured")); child.merge(parent); - assertEquals(1, child.getIfs().size()); - } - - public void testMergeOverrideMatchFailed() { - DecisionStateModel child = new DecisionStateModel("child"); - DecisionStateModel parent = new DecisionStateModel("parent"); - parent.addIf(new IfModel("test", "then")); - child.merge(parent); - assertEquals(null, child.getIfs()); + assertNotNull(child.getSecured()); } } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/EndStateModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/EndStateModelTests.java index eeeb52bf..46016848 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/EndStateModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/EndStateModelTests.java @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.EndStateModel; - import junit.framework.TestCase; /** @@ -24,21 +22,23 @@ import junit.framework.TestCase; */ public class EndStateModelTests extends TestCase { - public void testMerge() { + public void testMergeable() { + EndStateModel child = new EndStateModel("child"); + assertTrue(child.isMergeableWith(child)); + } + + public void testNotMergeable() { EndStateModel child = new EndStateModel("child"); EndStateModel parent = new EndStateModel("parent"); - child.merge(parent); - assertEquals("child", child.getId()); + assertFalse(child.isMergeableWith(parent)); } - public void testMergeNullParent() { + public void testNotMergeableWithNull() { EndStateModel child = new EndStateModel("child"); - EndStateModel parent = null; - child.merge(parent); - assertEquals("child", child.getId()); + assertFalse(child.isMergeableWith(null)); } - public void testMergeOverrideMatch() { + public void testMerge() { EndStateModel child = new EndStateModel("child"); EndStateModel parent = new EndStateModel("child"); parent.setCommit("true"); @@ -46,12 +46,4 @@ public class EndStateModelTests extends TestCase { assertEquals("true", child.getCommit()); } - public void testMergeOverrideMatchFailed() { - EndStateModel child = new EndStateModel("child"); - EndStateModel parent = new EndStateModel("parent"); - parent.setCommit("true"); - child.merge(parent); - assertEquals(null, child.getCommit()); - } - } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/EvaluateModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/EvaluateModelTests.java index 8c8ef6c0..36f7cf2f 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/EvaluateModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/EvaluateModelTests.java @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.EvaluateModel; - import junit.framework.TestCase; /** @@ -24,32 +22,9 @@ import junit.framework.TestCase; */ public class EvaluateModelTests extends TestCase { - public void testMerge() { - EvaluateModel child = new EvaluateModel("child"); - EvaluateModel parent = new EvaluateModel("parent"); - child.merge(parent); - assertEquals("child", child.getExpression()); - } - - public void testMergeNullParent() { - EvaluateModel child = new EvaluateModel("child"); - EvaluateModel parent = null; - child.merge(parent); - assertEquals("child", child.getExpression()); - } - - public void testMergeOverrideMatch() { - EvaluateModel child = new EvaluateModel("child"); - EvaluateModel parent = new EvaluateModel("child", "end"); - child.merge(parent); - assertEquals("end", child.getResult()); - } - - public void testMergeOverrideMatchFailed() { - EvaluateModel child = new EvaluateModel("child"); - EvaluateModel parent = new EvaluateModel("parent", "end"); - child.merge(parent); - assertEquals(null, child.getResult()); + public void testNotMergeable() { + EvaluateModel child = new EvaluateModel("name"); + assertFalse(child.isMergeableWith(child)); } } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/ExceptionHandlerModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/ExceptionHandlerModelTests.java index 0084f885..878f1365 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/ExceptionHandlerModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/ExceptionHandlerModelTests.java @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.ExceptionHandlerModel; - import junit.framework.TestCase; /** @@ -24,26 +22,9 @@ import junit.framework.TestCase; */ public class ExceptionHandlerModelTests extends TestCase { - public void testMerge() { + public void testNotMergeable() { ExceptionHandlerModel child = new ExceptionHandlerModel("child"); - ExceptionHandlerModel parent = new ExceptionHandlerModel("parent"); - child.merge(parent); - assertEquals("child", child.getBeanName()); - } - - public void testMergeNullParent() { - ExceptionHandlerModel child = new ExceptionHandlerModel("child"); - ExceptionHandlerModel parent = null; - child.merge(parent); - assertEquals("child", child.getBeanName()); - } - - public void testMergeOverrideMatch() { - // exception handler will never merge - } - - public void testMergeOverrideMatchFailed() { - // exception handler will never merge + assertFalse(child.isMergeableWith(child)); } } 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 c60027c4..9575fcf0 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 @@ -22,46 +22,28 @@ import junit.framework.TestCase; */ public class FlowModelTests extends TestCase { - public void testMerge() { - FlowModel child = new FlowModel(); - child.setStartStateId("child"); - FlowModel parent = new FlowModel(); - parent.setStartStateId("parent"); - child.merge(parent); - assertEquals("child", child.getStartStateId()); - } - - public void testMergeNullParent() { - FlowModel child = new FlowModel(); - child.setStartStateId("child"); - FlowModel parent = null; - child.merge(parent); - assertEquals("child", child.getStartStateId()); - } - - public void testMergeOverrideMatch() { + public void testMergeable() { FlowModel child = new FlowModel(); FlowModel parent = new FlowModel(); - parent.addViewState(new ViewStateModel("view")); - child.merge(parent); - assertEquals(1, child.getStates().size()); + assertTrue(child.isMergeableWith(parent)); } - public void testMergeOverrideMatchFailed() { + public void testNotMergeableWithNull() { FlowModel child = new FlowModel(); - FlowModel parent = new FlowModel(); - parent.addViewState(new ViewStateModel("view")); - child.merge(parent); - // flows will always merge, regardless of likeness - assertEquals(1, child.getStates().size()); + assertFalse(child.isMergeableWith(null)); } - public void testIntegrationAttributes() { + public void testMergeAttributes() { FlowModel child = new FlowModel(); FlowModel parent = new FlowModel(); + AttributeModel attribute; child.addAttribute(new AttributeModel("name", "value")); - parent.addAttribute(new AttributeModel("name", "value", "type")); - parent.addAttribute(new AttributeModel("name2", "value2", "type2")); + attribute = new AttributeModel("name", "value"); + attribute.setType("type"); + parent.addAttribute(attribute); + attribute = new AttributeModel("name2", "value2"); + attribute.setType("type2"); + parent.addAttribute(attribute); child.merge(parent); assertEquals(2, child.getAttributes().size()); assertEquals("name", ((AttributeModel) child.getAttributes().get(0)).getName()); @@ -70,16 +52,18 @@ public class FlowModelTests extends TestCase { assertEquals("type2", ((AttributeModel) child.getAttributes().get(1)).getType()); } - public void testIntegrationSecured() { + public void testMergeSecured() { FlowModel child = new FlowModel(); FlowModel parent = new FlowModel(); child.setSecured(new SecuredModel("secured")); - parent.setSecured(new SecuredModel("secured", "all")); + SecuredModel secured = new SecuredModel("secured"); + secured.setMatch("all"); + parent.setSecured(secured); child.merge(parent); assertEquals("all", child.getSecured().getMatch()); } - public void testIntegrationPersistenceContext() { + public void testMergePersistenceContext() { FlowModel child = new FlowModel(); FlowModel parent = new FlowModel(); parent.setPersistenceContext(new PersistenceContextModel()); @@ -87,49 +71,70 @@ public class FlowModelTests extends TestCase { assertNotNull(child.getPersistenceContext()); } - public void testIntegrationVars() { + public void testMergeVars() { FlowModel child = new FlowModel(); FlowModel parent = new FlowModel(); - child.addVar(new VarModel("name", "value")); - parent.addVar(new VarModel("name", "", "scope")); - parent.addVar(new VarModel("name2", "value2")); + VarModel var = new VarModel("name", "value"); + child.addVar(var); + parent.addVar(var); + var = new VarModel("name", "value"); + var.setScope("scope"); + parent.addVar(var); child.merge(parent); - assertEquals(2, child.getVars().size()); + assertEquals(3, child.getVars().size()); assertEquals("scope", ((VarModel) child.getVars().get(1)).getScope()); + assertEquals("scope", ((VarModel) parent.getVars().get(1)).getScope()); } - public void testIntegrationMappings() { + public void testMergeMappings() { FlowModel child = new FlowModel(); FlowModel parent = new FlowModel(); + InputModel input; child.addInput(new InputModel("name", "value")); - child.addInput(new InputModel("name2", "value2", "type2", "required2")); - child.addInput(new InputModel("name3", "value3", "type3", "required3")); - parent.addInput(new InputModel("name", "value", "type", "required")); - parent.addInput(new InputModel("name3", "value3", "type3", "required3")); + input = new InputModel("name2", "value2"); + input.setType("type2"); + input.setRequired("required2"); + child.addInput(input); + input = new InputModel("name3", "value3"); + input.setType("type3"); + input.setRequired("required3"); + child.addInput(input); + input = new InputModel("name", "value"); + input.setType("type"); + input.setRequired("required"); + parent.addInput(input); + input = new InputModel("name3", "value3"); + input.setType("type3"); + input.setRequired("required3"); + parent.addInput(input); child.merge(parent); assertEquals(3, child.getInputs().size()); } - public void testIntegrationOnStart() { + public void testMergeOnStart() { FlowModel child = new FlowModel(); FlowModel parent = new FlowModel(); child.addOnStartAction(new EvaluateModel("expression")); child.addOnStartAction(new RenderModel("expression")); child.addOnStartAction(new SetModel("expression", "value")); - parent.addOnStartAction(new EvaluateModel("expression", "result")); + EvaluateModel eval = new EvaluateModel("expression"); + eval.setResult("result"); + parent.addOnStartAction(eval); parent.addOnStartAction(new RenderModel("expression")); parent.addOnStartAction(new SetModel("expression", "value")); child.merge(parent); - assertEquals(3, child.getOnStartActions().size()); - assertEquals("result", ((EvaluateModel) child.getOnStartActions().get(0)).getResult()); + assertEquals(6, child.getOnStartActions().size()); + assertNotNull(((EvaluateModel) child.getOnStartActions().get(0)).getResult()); } - public void testIntegrationStates() { + public void testMergeStates() { FlowModel child = new FlowModel(); FlowModel parent = new FlowModel(); child.addViewState(new ViewStateModel("view")); child.addEndState(new EndStateModel("end")); - parent.addViewState(new ViewStateModel("view", "jsp")); + ViewStateModel view = new ViewStateModel("view"); + view.setView("jsp"); + parent.addViewState(view); parent.addState(new DecisionStateModel("decider")); parent.addActionState(new ActionStateModel("end")); child.merge(parent); @@ -137,33 +142,45 @@ public class FlowModelTests extends TestCase { assertEquals("jsp", ((ViewStateModel) child.getStates().get(0)).getView()); } - public void testIntegrationGlobalTransitions() { + public void testMergeGlobalTransitions() { FlowModel child = new FlowModel(); FlowModel parent = new FlowModel(); - child.addGlobalTransition(new TransitionModel("end")); - child.addGlobalTransition(new TransitionModel("start")); - parent.addGlobalTransition(new TransitionModel("search")); - parent.addGlobalTransition(new TransitionModel("end", "theend")); + TransitionModel transition; + transition = new TransitionModel(); + transition.setOn("end"); + child.addGlobalTransition(transition); + transition = new TransitionModel(); + transition.setOn("start"); + child.addGlobalTransition(transition); + transition = new TransitionModel(); + transition.setOn("search"); + parent.addGlobalTransition(transition); + transition = new TransitionModel(); + transition.setOn("end"); + transition.setTo("theend"); + parent.addGlobalTransition(transition); child.merge(parent); assertEquals(3, child.getGlobalTransitions().size()); assertEquals("theend", ((TransitionModel) child.getGlobalTransitions().get(0)).getTo()); } - public void testIntegrationOnEnd() { + public void testMergeOnEnd() { FlowModel child = new FlowModel(); FlowModel parent = new FlowModel(); child.addOnEndAction(new EvaluateModel("expression")); child.addOnEndAction(new RenderModel("expression")); child.addOnEndAction(new SetModel("expression", "value")); - parent.addOnEndAction(new EvaluateModel("expression", "result")); + EvaluateModel eval = new EvaluateModel("expression"); + eval.setResult("result"); + parent.addOnEndAction(eval); parent.addOnEndAction(new RenderModel("expression")); parent.addOnEndAction(new SetModel("expression", "value")); child.merge(parent); - assertEquals(3, child.getOnEndActions().size()); - assertEquals("result", ((EvaluateModel) child.getOnEndActions().get(0)).getResult()); + assertEquals(6, child.getOnEndActions().size()); + assertNotNull(((EvaluateModel) child.getOnEndActions().get(0)).getResult()); } - public void testIntegrationExceptionHandlers() { + public void testMergeExceptionHandlers() { FlowModel child = new FlowModel(); FlowModel parent = new FlowModel(); child.addExceptionHandler(new ExceptionHandlerModel("bean1")); @@ -171,10 +188,10 @@ public class FlowModelTests extends TestCase { parent.addExceptionHandler(new ExceptionHandlerModel("bean2")); parent.addExceptionHandler(new ExceptionHandlerModel("bean3")); child.merge(parent); - assertEquals(3, child.getExceptionHandlers().size()); + assertEquals(4, child.getExceptionHandlers().size()); } - public void testIntegrationBeanImports() { + public void testMergeBeanImports() { FlowModel child = new FlowModel(); FlowModel parent = new FlowModel(); child.addBeanImport(new BeanImportModel("path1")); @@ -182,7 +199,7 @@ public class FlowModelTests extends TestCase { parent.addBeanImport(new BeanImportModel("path2")); parent.addBeanImport(new BeanImportModel("path3")); child.merge(parent); - assertEquals(3, child.getBeanImports().size()); + assertEquals(4, child.getBeanImports().size()); } } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/IfModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/IfModelTests.java index ed927753..6f491778 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/IfModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/IfModelTests.java @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.IfModel; - import junit.framework.TestCase; /** @@ -24,32 +22,28 @@ import junit.framework.TestCase; */ public class IfModelTests extends TestCase { - public void testMerge() { + public void testMergeable() { + IfModel child = new IfModel("child", "childthen"); + assertTrue(child.isMergeableWith(child)); + } + + public void testNotMergeable() { IfModel child = new IfModel("child", "childthen"); IfModel parent = new IfModel("parent", "parentthen"); - child.merge(parent); - assertEquals("childthen", child.getThen()); + assertFalse(child.isMergeableWith(parent)); } - public void testMergeNullParent() { + public void testNotMergeableWithNull() { IfModel child = new IfModel("child", "childthen"); - IfModel parent = null; - child.merge(parent); - assertEquals("childthen", child.getThen()); + assertFalse(child.isMergeableWith(null)); } - public void testMergeOverrideMatch() { + public void testMerge() { IfModel child = new IfModel("child", "childthen"); - IfModel parent = new IfModel("child", "childthen", "childelse"); + IfModel parent = new IfModel("child", "parentthen"); + parent.setElse("parentelse"); child.merge(parent); - assertEquals("childelse", child.getElse()); - } - - public void testMergeOverrideMatchFailed() { - IfModel child = new IfModel("child", "childthen"); - IfModel parent = new IfModel("parent", "parentthen", "parentelse"); - child.merge(parent); - assertEquals(null, child.getElse()); + assertEquals("parentelse", child.getElse()); } } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/InputModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/InputModelTests.java index 7634ad36..0f87e564 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/InputModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/InputModelTests.java @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.InputModel; - import junit.framework.TestCase; /** @@ -24,34 +22,28 @@ import junit.framework.TestCase; */ public class InputModelTests extends TestCase { + public void testMergeable() { + InputModel child = new InputModel("child", "childvalue"); + assertTrue(child.isMergeableWith(child)); + } + + public void testNotMergeable() { + InputModel child = new InputModel("child", "childvalue"); + InputModel parent = new InputModel("parent", "parentvalue"); + assertFalse(child.isMergeableWith(parent)); + } + + public void testNotMergeableWithNull() { + InputModel child = new InputModel("child", "childvalue"); + assertFalse(child.isMergeableWith(null)); + } + public void testMerge() { InputModel child = new InputModel("child", "childvalue"); - InputModel parent = new InputModel("parent", "parentvalue"); + InputModel parent = new InputModel("child", "parentvalue"); + parent.setType("parenttype"); child.merge(parent); - assertEquals("childvalue", child.getValue()); - } - - public void testMergeNullParent() { - InputModel child = new InputModel("child", "childvalue"); - InputModel parent = null; - child.merge(parent); - assertEquals("childvalue", child.getValue()); - } - - public void testMergeOverrideMatch() { - InputModel child = new InputModel("child", "childvalue"); - InputModel parent = new InputModel("child", "childvalue"); - parent.setType("long"); - child.merge(parent); - assertEquals("long", child.getType()); - } - - public void testMergeOverrideMatchFailed() { - InputModel child = new InputModel("child", "childvalue"); - InputModel parent = new InputModel("parent", "parentvalue"); - parent.setType("long"); - child.merge(parent); - assertEquals(null, child.getType()); + assertEquals("parenttype", child.getType()); } } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/OutputModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/OutputModelTests.java index 58a84481..c15816e3 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/OutputModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/OutputModelTests.java @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.OutputModel; - import junit.framework.TestCase; /** @@ -24,34 +22,28 @@ import junit.framework.TestCase; */ public class OutputModelTests extends TestCase { + public void testMergeable() { + OutputModel child = new OutputModel("child", "childvalue"); + assertTrue(child.isMergeableWith(child)); + } + + public void testNotMergeable() { + OutputModel child = new OutputModel("child", "childvalue"); + OutputModel parent = new OutputModel("parent", "parentvalue"); + assertFalse(child.isMergeableWith(parent)); + } + + public void testNotMergeableWithNull() { + OutputModel child = new OutputModel("child", "childvalue"); + assertFalse(child.isMergeableWith(null)); + } + public void testMerge() { OutputModel child = new OutputModel("child", "childvalue"); - OutputModel parent = new OutputModel("parent", "parentvalue"); + OutputModel parent = new OutputModel("child", "parentvalue"); + parent.setType("parenttype"); child.merge(parent); - assertEquals("childvalue", child.getValue()); - } - - public void testMergeNullParent() { - OutputModel child = new OutputModel("child", "childvalue"); - OutputModel parent = null; - child.merge(parent); - assertEquals("childvalue", child.getValue()); - } - - public void testMergeOverrideMatch() { - OutputModel child = new OutputModel("child", "childvalue"); - OutputModel parent = new OutputModel("child", "childvalue"); - parent.setType("long"); - child.merge(parent); - assertEquals("long", child.getType()); - } - - public void testMergeOverrideMatchFailed() { - OutputModel child = new OutputModel("child", "childvalue"); - OutputModel parent = new OutputModel("parent", "parentvalue"); - parent.setType("long"); - child.merge(parent); - assertEquals(null, child.getType()); + assertEquals("parenttype", child.getType()); } } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/PersistenceContextModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/PersistenceContextModelTests.java index 72126efe..1a152994 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/PersistenceContextModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/PersistenceContextModelTests.java @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.PersistenceContextModel; - import junit.framework.TestCase; /** @@ -24,8 +22,9 @@ import junit.framework.TestCase; */ public class PersistenceContextModelTests extends TestCase { - public void test() { - // no op + public void testNotMergeable() { + PersistenceContextModel child = new PersistenceContextModel(); + assertFalse(child.isMergeableWith(child)); } } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/RenderModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/RenderModelTests.java index bd8cb585..f8857205 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/RenderModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/RenderModelTests.java @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.RenderModel; - import junit.framework.TestCase; /** @@ -24,26 +22,9 @@ import junit.framework.TestCase; */ public class RenderModelTests extends TestCase { - public void testMerge() { + public void testNotMergeable() { RenderModel child = new RenderModel("child"); - RenderModel parent = new RenderModel("parent"); - child.merge(parent); - assertEquals("child", child.getFragments()); - } - - public void testMergeNullParent() { - RenderModel child = new RenderModel("child"); - RenderModel parent = null; - child.merge(parent); - assertEquals("child", child.getFragments()); - } - - public void testMergeOverrideMatch() { - // render will never merge - } - - public void testMergeOverrideMatchFailed() { - // render will never merge + assertFalse(child.isMergeableWith(child)); } } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/SecuredModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/SecuredModelTests.java index 89b28150..ec57d150 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/SecuredModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/SecuredModelTests.java @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.SecuredModel; - import junit.framework.TestCase; /** @@ -24,32 +22,28 @@ import junit.framework.TestCase; */ public class SecuredModelTests extends TestCase { - public void testMerge() { + public void testMergeable() { + SecuredModel child = new SecuredModel("child"); + assertTrue(child.isMergeableWith(child)); + } + + public void testNotMergeable() { SecuredModel child = new SecuredModel("child"); SecuredModel parent = new SecuredModel("parent"); - child.merge(parent); - assertEquals("child", child.getAttributes()); + assertFalse(child.isMergeableWith(parent)); } - public void testMergeNullParent() { + public void testNotMergeableWithNull() { SecuredModel child = new SecuredModel("child"); - SecuredModel parent = null; - child.merge(parent); - assertEquals("child", child.getAttributes()); + assertFalse(child.isMergeableWith(null)); } - public void testMergeOverrideMatch() { + public void testMerge() { SecuredModel child = new SecuredModel("child"); - SecuredModel parent = new SecuredModel("child", "all"); + SecuredModel parent = new SecuredModel("child"); + parent.setMatch("all"); child.merge(parent); assertEquals("all", child.getMatch()); } - public void testMergeOverrideMatchFailed() { - SecuredModel child = new SecuredModel("child"); - SecuredModel parent = new SecuredModel("parent", "all"); - child.merge(parent); - assertEquals(null, child.getMatch()); - } - } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/SetModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/SetModelTests.java index ce8be1e9..c887be87 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/SetModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/SetModelTests.java @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.SetModel; - import junit.framework.TestCase; /** @@ -24,32 +22,9 @@ import junit.framework.TestCase; */ public class SetModelTests extends TestCase { - public void testMerge() { - SetModel child = new SetModel("child", "childvalue"); - SetModel parent = new SetModel("parent", "parentvalue"); - child.merge(parent); - assertEquals("child", child.getName()); - } - - public void testMergeNullParent() { - SetModel child = new SetModel("child", "childvalue"); - SetModel parent = null; - child.merge(parent); - assertEquals("child", child.getName()); - } - - public void testMergeOverrideMatch() { - SetModel child = new SetModel("child", "childvalue"); - SetModel parent = new SetModel("child", "childvalue", "childtype"); - child.merge(parent); - assertEquals("childtype", child.getType()); - } - - public void testMergeOverrideMatchFailed() { - SetModel child = new SetModel("child", "childvalue"); - SetModel parent = new SetModel("parent", "parentvalue", "parenttype"); - child.merge(parent); - assertEquals(null, child.getType()); + public void testNotMergeable() { + SetModel child = new SetModel("name", "value"); + assertFalse(child.isMergeableWith(child)); } } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/SubflowStateModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/SubflowStateModelTests.java index 004d4ed2..8cbb2590 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/SubflowStateModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/SubflowStateModelTests.java @@ -22,34 +22,28 @@ import junit.framework.TestCase; */ public class SubflowStateModelTests extends TestCase { + public void testMergeable() { + SubflowStateModel child = new SubflowStateModel("child", "flow"); + assertTrue(child.isMergeableWith(child)); + } + + public void testNotMergeable() { + SubflowStateModel child = new SubflowStateModel("child", "flow"); + SubflowStateModel parent = new SubflowStateModel("parent", "flow"); + assertFalse(child.isMergeableWith(parent)); + } + + public void testNotMergeableWithNull() { + SubflowStateModel child = new SubflowStateModel("child", "flow"); + assertFalse(child.isMergeableWith(null)); + } + public void testMerge() { - SubflowStateModel child = new SubflowStateModel("child", "childflow"); - SubflowStateModel parent = new SubflowStateModel("parent", "parentflow"); + SubflowStateModel child = new SubflowStateModel("child", "flow"); + SubflowStateModel parent = new SubflowStateModel("child", "flow"); + parent.setSecured(new SecuredModel("secured")); child.merge(parent); - assertEquals("child", child.getId()); - } - - public void testMergeNullParent() { - SubflowStateModel child = new SubflowStateModel("child", "childflow"); - SubflowStateModel parent = null; - child.merge(parent); - assertEquals("child", child.getId()); - } - - public void testMergeOverrideMatch() { - SubflowStateModel child = new SubflowStateModel("child", "childflow"); - SubflowStateModel parent = new SubflowStateModel("child", "parentflow"); - parent.addInput(new InputModel("inname", "invalue")); - child.merge(parent); - assertEquals(1, child.getInputs().size()); - } - - public void testMergeOverrideMatchFailed() { - SubflowStateModel child = new SubflowStateModel("child", "childflow"); - SubflowStateModel parent = new SubflowStateModel("parent", "parentflow"); - parent.addInput(new InputModel("inname", "invalue")); - child.merge(parent); - assertEquals(null, child.getInputs()); + assertNotNull(child.getSecured()); } } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/TransitionModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/TransitionModelTests.java index 0363b83c..bbbd18ff 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/TransitionModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/TransitionModelTests.java @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.TransitionModel; - import junit.framework.TestCase; /** @@ -24,32 +22,33 @@ import junit.framework.TestCase; */ public class TransitionModelTests extends TestCase { + public void testMergeable() { + TransitionModel child = new TransitionModel(); + child.setOn("child"); + assertTrue(child.isMergeableWith(child)); + } + + public void testNotMergeable() { + TransitionModel child = new TransitionModel(); + child.setOn("child"); + TransitionModel parent = new TransitionModel(); + parent.setOn("parent"); + assertFalse(child.isMergeableWith(parent)); + } + + public void testNotMergeableWithNull() { + TransitionModel child = new TransitionModel(); + assertFalse(child.isMergeableWith(null)); + } + public void testMerge() { - TransitionModel child = new TransitionModel("child"); - TransitionModel parent = new TransitionModel("parent"); - child.merge(parent); - assertEquals("child", child.getOn()); - } - - public void testMergeNullParent() { - TransitionModel child = new TransitionModel("child"); - TransitionModel parent = null; - child.merge(parent); - assertEquals("child", child.getOn()); - } - - public void testMergeOverrideMatch() { - TransitionModel child = new TransitionModel("child"); - TransitionModel parent = new TransitionModel("child", "end"); + TransitionModel child = new TransitionModel(); + child.setOn("child"); + TransitionModel parent = new TransitionModel(); + parent.setOn("child"); + parent.setTo("end"); child.merge(parent); assertEquals("end", child.getTo()); } - public void testMergeOverrideMatchFailed() { - TransitionModel child = new TransitionModel("child"); - TransitionModel parent = new TransitionModel("parent", "end"); - child.merge(parent); - assertEquals(null, child.getTo()); - } - } 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 63563d8c..b8cea88b 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 @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.VarModel; - import junit.framework.TestCase; /** @@ -24,32 +22,9 @@ import junit.framework.TestCase; */ public class VarModelTests extends TestCase { - public void testMerge() { - VarModel child = new VarModel("child", "childclass"); - VarModel parent = new VarModel("parent", "parentclass"); - child.merge(parent); - assertEquals("child", child.getName()); - } - - public void testMergeNullParent() { - VarModel child = new VarModel("child", "childclass"); - VarModel parent = null; - child.merge(parent); - assertEquals("child", child.getName()); - } - - public void testMergeOverrideMatch() { - VarModel child = new VarModel("child", "childclass"); - VarModel parent = new VarModel("child", "childclass", "childscope"); - child.merge(parent); - assertEquals("childscope", child.getScope()); - } - - public void testMergeOverrideMatchFailed() { - VarModel child = new VarModel("child", "childclass"); - VarModel parent = new VarModel("parent", "parentclass", "parentscope"); - child.merge(parent); - assertEquals(null, child.getScope()); + public void testNotMergeable() { + VarModel child = new VarModel("name", "value"); + assertFalse(child.isMergeableWith(child)); } } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/ViewStateModelTests.java b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/ViewStateModelTests.java index 0b70b642..bb616191 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/engine/model/ViewStateModelTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/engine/model/ViewStateModelTests.java @@ -15,8 +15,6 @@ */ package org.springframework.webflow.engine.model; -import org.springframework.webflow.engine.model.ViewStateModel; - import junit.framework.TestCase; /** @@ -24,32 +22,28 @@ import junit.framework.TestCase; */ public class ViewStateModelTests extends TestCase { + public void testMergeable() { + ViewStateModel child = new ViewStateModel("child"); + assertTrue(child.isMergeableWith(child)); + } + + public void testNotMergeable() { + ViewStateModel child = new ViewStateModel("child"); + ViewStateModel parent = new ViewStateModel("parent"); + assertFalse(child.isMergeableWith(parent)); + } + + public void testNotMergeableWithNull() { + ViewStateModel child = new ViewStateModel("child"); + assertFalse(child.isMergeableWith(null)); + } + public void testMerge() { - ViewStateModel child = new ViewStateModel("child", "childview"); - ViewStateModel parent = new ViewStateModel("parent", "parentview"); - child.merge(parent); - assertEquals("childview", child.getView()); - } - - public void testMergeNullParent() { - ViewStateModel child = new ViewStateModel("child", "childview"); - ViewStateModel parent = null; - child.merge(parent); - assertEquals("childview", child.getView()); - } - - public void testMergeOverrideMatch() { ViewStateModel child = new ViewStateModel("child"); - ViewStateModel parent = new ViewStateModel("child", "parentview"); + ViewStateModel parent = new ViewStateModel("child"); + parent.setSecured(new SecuredModel("secured")); child.merge(parent); - assertEquals("parentview", child.getView()); - } - - public void testMergeOverrideMatchFailed() { - ViewStateModel child = new ViewStateModel("child"); - ViewStateModel parent = new ViewStateModel("parent", "parentview"); - child.merge(parent); - assertEquals(null, child.getView()); + assertNotNull(child.getSecured()); } }