Code review and polishing.
This commit is contained in:
@@ -35,14 +35,14 @@ import org.springframework.webflow.engine.builder.FlowServiceLocator;
|
||||
import org.springframework.webflow.execution.Action;
|
||||
|
||||
/**
|
||||
* Searches flow-local registries first before querying the global, externally
|
||||
* Flow service locator that searches flow-local registries first before querying the global, externally
|
||||
* managed flow service locator.
|
||||
* <p>
|
||||
* Internal helper class of the {@link org.springframework.webflow.engine.builder.xml.XmlFlowBuilder}.
|
||||
* Package private to highlight it's non-public nature.
|
||||
*
|
||||
*
|
||||
* @see org.springframework.webflow.engine.builder.xml.XmlFlowBuilder
|
||||
*
|
||||
*
|
||||
* @author Keith Donald
|
||||
*/
|
||||
class LocalFlowServiceLocator implements FlowServiceLocator {
|
||||
@@ -88,9 +88,9 @@ class LocalFlowServiceLocator implements FlowServiceLocator {
|
||||
public LocalFlowServiceRegistry pop() {
|
||||
return (LocalFlowServiceRegistry)localRegistries.pop();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the top registry on the stack
|
||||
* Returns the top registry on the stack.
|
||||
*/
|
||||
public LocalFlowServiceRegistry top() {
|
||||
return (LocalFlowServiceRegistry)localRegistries.peek();
|
||||
|
||||
@@ -19,15 +19,15 @@ import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.webflow.engine.Flow;
|
||||
|
||||
/**
|
||||
* Simple value object that holds a reference to a local bean factory housing services neeed by a flow definition
|
||||
* Simple object that holds a reference to a local bean factory housing services needed by a flow definition
|
||||
* at execution time.
|
||||
* <p>
|
||||
* Internal helper class of the {@link org.springframework.webflow.engine.builder.xml.XmlFlowBuilder}. Package private
|
||||
* to highlight it's non-public nature.
|
||||
*
|
||||
*
|
||||
* @see org.springframework.webflow.engine.builder.xml.XmlFlowBuilder
|
||||
* @see org.springframework.webflow.engine.builder.xml.LocalFlowServiceLocator
|
||||
*
|
||||
*
|
||||
* @author Keith Donald
|
||||
*/
|
||||
class LocalFlowServiceRegistry {
|
||||
|
||||
@@ -84,28 +84,28 @@ import org.xml.sax.SAXException;
|
||||
|
||||
/**
|
||||
* Flow builder that builds flows as defined in an XML document. The XML document should adhere to the following format:
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* <?xml version="1.0" encoding="UTF-8"?>
|
||||
* <flow xmlns="http://www.springframework.org/schema/webflow"
|
||||
* xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
* xsi:schemaLocation="http://www.springframework.org/schema/webflow
|
||||
* http://www.springframework.org/schema/webflow/spring-webflow-1.0.xsd">
|
||||
*
|
||||
*
|
||||
* <!-- Define your states here -->
|
||||
*
|
||||
*
|
||||
* </flow>
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
* <p>
|
||||
* Consult the <a href="http://www.springframework.org/schema/webflow/spring-webflow-1.0.xsd">webflow XML schema</a>
|
||||
* Consult the <a href="http://www.springframework.org/schema/webflow/spring-webflow-1.0.xsd">web flow XML schema</a>
|
||||
* for more information on the XML-based flow definition format.
|
||||
* <p>
|
||||
* This builder will setup a flow-local bean factory for the flow being constructed. That flow-local bean factory will
|
||||
* be populated with XML bean definitions contained in files referenced using the "import" element. The flow-local bean
|
||||
* factory will use the bean factory defing this flow builder as a parent. As such, the flow can access artifacts in
|
||||
* either its flow-local bean factory or in the parent bean factory hierarchy, e.g. the bean factory of the dispatcher.
|
||||
*
|
||||
*
|
||||
* @author Erwin Vervaet
|
||||
* @author Keith Donald
|
||||
*/
|
||||
@@ -244,8 +244,8 @@ public class XmlFlowBuilder extends BaseFlowBuilder implements ResourceHolder {
|
||||
protected Resource location;
|
||||
|
||||
/**
|
||||
* A flow service locator local to this builder that first looks in a locally-managed Spring application context for
|
||||
* services before searching the externally managed {@link #getFlowServiceLocator()}.
|
||||
* A flow service locator local to this builder that first looks in a locally-managed Spring bean factory for
|
||||
* services before searching the externally managed {@link #getFlowServiceLocator() service locator}.
|
||||
*/
|
||||
private LocalFlowServiceLocator localFlowServiceLocator;
|
||||
|
||||
@@ -469,7 +469,7 @@ public class XmlFlowBuilder extends BaseFlowBuilder implements ResourceHolder {
|
||||
* Create the local bean factory from the resources provided. This factory typcially houses services needed locally
|
||||
* by the flow definition.
|
||||
* @param flow the current flow definition being built
|
||||
* @param resources the file resources to assemble the bean factory from; typically xml-based
|
||||
* @param resources the file resources to assemble the bean factory from; typically XML-based
|
||||
* @return the bean factory
|
||||
*/
|
||||
private BeanFactory createLocalBeanFactory(Flow flow, Resource[] resources) {
|
||||
@@ -539,8 +539,8 @@ public class XmlFlowBuilder extends BaseFlowBuilder implements ResourceHolder {
|
||||
ScopeType scope = parseScope(element, ScopeType.FLOW);
|
||||
if (StringUtils.hasText(element.getAttribute(BEAN_ATTRIBUTE))) {
|
||||
BeanFactory beanFactory = getLocalFlowServiceLocator().getBeanFactory();
|
||||
return new BeanFactoryFlowVariable(element.getAttribute(NAME_ATTRIBUTE), element
|
||||
.getAttribute(BEAN_ATTRIBUTE), beanFactory, scope);
|
||||
return new BeanFactoryFlowVariable(element.getAttribute(NAME_ATTRIBUTE),
|
||||
element.getAttribute(BEAN_ATTRIBUTE), beanFactory, scope);
|
||||
}
|
||||
else {
|
||||
if (StringUtils.hasText(element.getAttribute(CLASS_ATTRIBUTE))) {
|
||||
@@ -638,31 +638,35 @@ public class XmlFlowBuilder extends BaseFlowBuilder implements ResourceHolder {
|
||||
}
|
||||
|
||||
private void parseAndAddActionState(Element element, Flow flow) {
|
||||
getFlowArtifactFactory().createActionState(parseId(element), flow, parseEntryActions(element),
|
||||
getFlowArtifactFactory().createActionState(
|
||||
parseId(element), flow, parseEntryActions(element),
|
||||
parseAnnotatedActions(element), parseTransitions(element), parseExceptionHandlers(element),
|
||||
parseExitActions(element), parseAttributes(element));
|
||||
}
|
||||
|
||||
private void parseAndAddViewState(Element element, Flow flow) {
|
||||
getFlowArtifactFactory().createViewState(parseId(element), flow, parseEntryActions(element),
|
||||
getFlowArtifactFactory().createViewState(
|
||||
parseId(element), flow, parseEntryActions(element),
|
||||
parseViewSelector(element), parseRenderActions(element), parseTransitions(element),
|
||||
parseExceptionHandlers(element), parseExitActions(element), parseAttributes(element));
|
||||
}
|
||||
|
||||
private void parseAndAddDecisionState(Element element, Flow flow) {
|
||||
getFlowArtifactFactory()
|
||||
.createDecisionState(parseId(element), flow, parseEntryActions(element), parseIfs(element),
|
||||
parseExceptionHandlers(element), parseExitActions(element), parseAttributes(element));
|
||||
getFlowArtifactFactory().createDecisionState(
|
||||
parseId(element), flow, parseEntryActions(element), parseIfs(element),
|
||||
parseExceptionHandlers(element), parseExitActions(element), parseAttributes(element));
|
||||
}
|
||||
|
||||
private void parseAndAddSubflowState(Element element, Flow flow) {
|
||||
getFlowArtifactFactory().createSubflowState(parseId(element), flow, parseEntryActions(element),
|
||||
getFlowArtifactFactory().createSubflowState(
|
||||
parseId(element), flow, parseEntryActions(element),
|
||||
parseSubflow(element), parseFlowAttributeMapper(element), parseTransitions(element),
|
||||
parseExceptionHandlers(element), parseExitActions(element), parseAttributes(element));
|
||||
}
|
||||
|
||||
private void parseAndAddEndState(Element element, Flow flow) {
|
||||
getFlowArtifactFactory().createEndState(parseId(element), flow, parseEntryActions(element),
|
||||
getFlowArtifactFactory().createEndState(
|
||||
parseId(element), flow, parseEntryActions(element),
|
||||
parseViewSelector(element), parseOutputMapper(element), parseExceptionHandlers(element),
|
||||
parseAttributes(element));
|
||||
}
|
||||
@@ -716,13 +720,13 @@ public class XmlFlowBuilder extends BaseFlowBuilder implements ResourceHolder {
|
||||
}
|
||||
|
||||
private Transition parseTransition(Element element) {
|
||||
TransitionCriteria matchingCriteria = (TransitionCriteria) fromStringTo(TransitionCriteria.class).execute(
|
||||
element.getAttribute(ON_ATTRIBUTE));
|
||||
TargetStateResolver targetStateResolver = (TargetStateResolver) fromStringTo(TargetStateResolver.class)
|
||||
.execute(element.getAttribute(TO_ATTRIBUTE));
|
||||
TransitionCriteria matchingCriteria = (TransitionCriteria)
|
||||
fromStringTo(TransitionCriteria.class).execute(element.getAttribute(ON_ATTRIBUTE));
|
||||
TargetStateResolver targetStateResolver = (TargetStateResolver)
|
||||
fromStringTo(TargetStateResolver.class).execute(element.getAttribute(TO_ATTRIBUTE));
|
||||
TransitionCriteria executionCriteria = TransitionCriteriaChain.criteriaChainFor(parseAnnotatedActions(element));
|
||||
return getFlowArtifactFactory().createTransition(targetStateResolver, matchingCriteria, executionCriteria,
|
||||
parseAttributes(element));
|
||||
return getFlowArtifactFactory().createTransition(
|
||||
targetStateResolver, matchingCriteria, executionCriteria, parseAttributes(element));
|
||||
}
|
||||
|
||||
private ViewSelector parseViewSelector(Element element) {
|
||||
@@ -967,8 +971,8 @@ public class XmlFlowBuilder extends BaseFlowBuilder implements ResourceHolder {
|
||||
Element mapperElement = getChildElementByTagName(element, INPUT_MAPPER_ELEMENT);
|
||||
if (mapperElement != null) {
|
||||
DefaultAttributeMapper mapper = new DefaultAttributeMapper();
|
||||
parseSimpleAttributeMappings(mapper, DomUtils.getChildElementsByTagName(mapperElement,
|
||||
INPUT_ATTRIBUTE_ELEMENT));
|
||||
parseSimpleAttributeMappings(mapper,
|
||||
DomUtils.getChildElementsByTagName(mapperElement, INPUT_ATTRIBUTE_ELEMENT));
|
||||
parseMappings(mapper, mapperElement);
|
||||
return mapper;
|
||||
}
|
||||
@@ -981,8 +985,8 @@ public class XmlFlowBuilder extends BaseFlowBuilder implements ResourceHolder {
|
||||
Element mapperElement = getChildElementByTagName(element, OUTPUT_MAPPER_ELEMENT);
|
||||
if (mapperElement != null) {
|
||||
DefaultAttributeMapper mapper = new DefaultAttributeMapper();
|
||||
parseSimpleAttributeMappings(mapper, DomUtils.getChildElementsByTagName(mapperElement,
|
||||
OUTPUT_ATTRIBUTE_ELEMENT));
|
||||
parseSimpleAttributeMappings(mapper,
|
||||
DomUtils.getChildElementsByTagName(mapperElement, OUTPUT_ATTRIBUTE_ELEMENT));
|
||||
parseMappings(mapper, mapperElement);
|
||||
return mapper;
|
||||
}
|
||||
@@ -1002,8 +1006,8 @@ public class XmlFlowBuilder extends BaseFlowBuilder implements ResourceHolder {
|
||||
target = parser.parseSettableExpression(mappingElement.getAttribute(TARGET_ATTRIBUTE));
|
||||
}
|
||||
else if (StringUtils.hasText(mappingElement.getAttribute(TARGET_COLLECTION_ATTRIBUTE))) {
|
||||
target = new CollectionAddingExpression(parser.parseSettableExpression(mappingElement
|
||||
.getAttribute(TARGET_COLLECTION_ATTRIBUTE)));
|
||||
target = new CollectionAddingExpression(
|
||||
parser.parseSettableExpression(mappingElement.getAttribute(TARGET_COLLECTION_ATTRIBUTE)));
|
||||
}
|
||||
if (getRequired(mappingElement, false)) {
|
||||
mapper.addMapping(new RequiredMapping(source, target, parseTypeConverter(mappingElement)));
|
||||
@@ -1062,8 +1066,8 @@ public class XmlFlowBuilder extends BaseFlowBuilder implements ResourceHolder {
|
||||
private FlowExecutionExceptionHandler[] parseExceptionHandlers(Element element) {
|
||||
FlowExecutionExceptionHandler[] transitionExecutingHandlers = parseTransitionExecutingExceptionHandlers(element);
|
||||
FlowExecutionExceptionHandler[] customHandlers = parseCustomExceptionHandlers(element);
|
||||
FlowExecutionExceptionHandler[] exceptionHandlers = new FlowExecutionExceptionHandler[transitionExecutingHandlers.length
|
||||
+ customHandlers.length];
|
||||
FlowExecutionExceptionHandler[] exceptionHandlers =
|
||||
new FlowExecutionExceptionHandler[transitionExecutingHandlers.length + customHandlers.length];
|
||||
System.arraycopy(transitionExecutingHandlers, 0, exceptionHandlers, 0, transitionExecutingHandlers.length);
|
||||
System.arraycopy(customHandlers, 0, exceptionHandlers, transitionExecutingHandlers.length,
|
||||
customHandlers.length);
|
||||
@@ -1097,8 +1101,8 @@ public class XmlFlowBuilder extends BaseFlowBuilder implements ResourceHolder {
|
||||
private FlowExecutionExceptionHandler parseTransitionExecutingExceptionHandler(Element element) {
|
||||
TransitionExecutingStateExceptionHandler handler = new TransitionExecutingStateExceptionHandler();
|
||||
Class exceptionClass = (Class) fromStringTo(Class.class).execute(element.getAttribute(ON_EXCEPTION_ATTRIBUTE));
|
||||
TargetStateResolver targetStateResolver = (TargetStateResolver) fromStringTo(TargetStateResolver.class)
|
||||
.execute(element.getAttribute(TO_ATTRIBUTE));
|
||||
TargetStateResolver targetStateResolver = (TargetStateResolver)
|
||||
fromStringTo(TargetStateResolver.class).execute(element.getAttribute(TO_ATTRIBUTE));
|
||||
handler.add(exceptionClass, targetStateResolver);
|
||||
handler.getActionList().addAll(parseAnnotatedActions(element));
|
||||
return handler;
|
||||
|
||||
Reference in New Issue
Block a user