BATCH-1143: Moved common logic from InlineStepParser and StandaloneStepParser to AbstractStepParser
This commit is contained in:
@@ -53,15 +53,15 @@ public abstract class AbstractStepParser {
|
||||
* @param parserContext
|
||||
* @return a BeanDefinition if possible
|
||||
*/
|
||||
protected AbstractBeanDefinition parseTasklet(Element element, ParserContext parserContext) {
|
||||
protected AbstractBeanDefinition parseTasklet(Element element, ParserContext parserContext, String jobRepositoryRef) {
|
||||
|
||||
String jobRepositoryRef = element.getAttribute("job-repository");
|
||||
String taskletRef = element.getAttribute("tasklet");
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Element> taskletElements = (List<Element>) DomUtils.getChildElementsByTagName(element, "tasklet");
|
||||
boolean taskletElementExists = taskletElements.size() > 0;
|
||||
AbstractBeanDefinition bd = null;
|
||||
if (StringUtils.hasText(taskletRef)) {
|
||||
if (taskletElements.size() > 0) {
|
||||
if (taskletElementExists) {
|
||||
parserContext.getReaderContext().error(
|
||||
"The <" + taskletElements.get(0).getNodeName()
|
||||
+ "> element can't be combined with the 'tasklet=\"" + taskletRef
|
||||
@@ -69,7 +69,7 @@ public abstract class AbstractStepParser {
|
||||
}
|
||||
bd = parseTaskletRef(element, taskletRef, parserContext, jobRepositoryRef);
|
||||
}
|
||||
else if (taskletElements.size() > 0) {
|
||||
else if (taskletElementExists) {
|
||||
Element taskElement = taskletElements.get(0);
|
||||
bd = parseTaskletElement(element, taskElement, parserContext, jobRepositoryRef);
|
||||
}
|
||||
@@ -82,7 +82,7 @@ public abstract class AbstractStepParser {
|
||||
* @param taskletRef
|
||||
* @param parserContext
|
||||
*/
|
||||
protected AbstractBeanDefinition parseTaskletRef(Element stepElement, String taskletRef,
|
||||
private AbstractBeanDefinition parseTaskletRef(Element stepElement, String taskletRef,
|
||||
ParserContext parserContext, String jobRepositoryRef) {
|
||||
|
||||
GenericBeanDefinition bd = new GenericBeanDefinition();
|
||||
@@ -103,7 +103,7 @@ public abstract class AbstractStepParser {
|
||||
* @param element
|
||||
* @param parserContext
|
||||
*/
|
||||
protected AbstractBeanDefinition parseTaskletElement(Element stepElement, Element element,
|
||||
private AbstractBeanDefinition parseTaskletElement(Element stepElement, Element element,
|
||||
ParserContext parserContext, String jobRepositoryRef) {
|
||||
|
||||
AbstractBeanDefinition bd = taskletElementParser.parse(element, parserContext);
|
||||
|
||||
@@ -29,8 +29,9 @@ import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
* Internal parser for the <step/> elements inside a job. A step element
|
||||
* references a bean definition for a {@link org.springframework.batch.core.Step} and goes on to (optionally)
|
||||
* list a set of transitions from that step to others with <next on="pattern"
|
||||
* references a bean definition for a
|
||||
* {@link org.springframework.batch.core.Step} and goes on to (optionally) list
|
||||
* a set of transitions from that step to others with <next on="pattern"
|
||||
* to="stepName"/>. Used by the {@link JobParser}.
|
||||
*
|
||||
* @see JobParser
|
||||
@@ -46,14 +47,16 @@ public class InlineStepParser extends AbstractStepParser {
|
||||
*
|
||||
* @param element the <step/gt; element to parse
|
||||
* @param parserContext the parser context for the bean factory
|
||||
* @param jobRepositoryRef the reference to the jobRepository from the enclosing tag
|
||||
* @return a collection of bean definitions for {@link org.springframework.batch.core.job.flow.support.StateTransition}
|
||||
* instances objects
|
||||
* @param jobRepositoryRef the reference to the jobRepository from the
|
||||
* enclosing tag
|
||||
* @return a collection of bean definitions for
|
||||
* {@link org.springframework.batch.core.job.flow.support.StateTransition}
|
||||
* instances objects
|
||||
*/
|
||||
public Collection<BeanDefinition> parse(Element element, ParserContext parserContext, String jobRepositoryRef) {
|
||||
|
||||
BeanDefinitionBuilder stateBuilder =
|
||||
BeanDefinitionBuilder.genericBeanDefinition("org.springframework.batch.core.job.flow.support.state.StepState");
|
||||
BeanDefinitionBuilder stateBuilder = BeanDefinitionBuilder
|
||||
.genericBeanDefinition("org.springframework.batch.core.job.flow.support.state.StepState");
|
||||
String stepId = element.getAttribute("id");
|
||||
String stepRef = element.getAttribute("ref");
|
||||
String taskletRef = element.getAttribute("tasklet");
|
||||
@@ -61,48 +64,50 @@ public class InlineStepParser extends AbstractStepParser {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Element> listOfTaskElements = (List<Element>) DomUtils.getChildElementsByTagName(element, "tasklet");
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Element> listOfListenersElements = (List<Element>) DomUtils.getChildElementsByTagName(element, "listeners");
|
||||
List<Element> listOfListenersElements = (List<Element>) DomUtils
|
||||
.getChildElementsByTagName(element, "listeners");
|
||||
|
||||
if (StringUtils.hasText(stepRef)) {
|
||||
if (StringUtils.hasText(taskletRef)) {
|
||||
parserContext.getReaderContext().error("The 'tasklet' attribute can't be combined with the 'ref=\""+ stepRef +"\"' attribute specification for <" + element.getNodeName() + ">", element);
|
||||
parserContext.getReaderContext().error(
|
||||
"The 'tasklet' attribute can't be combined with the 'ref=\"" + stepRef
|
||||
+ "\"' attribute specification for <" + element.getNodeName() + ">", element);
|
||||
}
|
||||
if (listOfTaskElements.size() > 0) {
|
||||
parserContext.getReaderContext().error("The <" + listOfTaskElements.get(0).getNodeName() +
|
||||
"> element can't be combined with the 'ref=\""+ stepRef +"\"' attribute specification for <" + element.getNodeName() + ">", element);
|
||||
parserContext.getReaderContext().error(
|
||||
"The <" + listOfTaskElements.get(0).getNodeName()
|
||||
+ "> element can't be combined with the 'ref=\"" + stepRef
|
||||
+ "\"' attribute specification for <" + element.getNodeName() + ">", element);
|
||||
}
|
||||
if (listOfListenersElements.size() > 0) {
|
||||
parserContext.getReaderContext().error("The 'listeners' element can't be combined with the 'ref=\""+ stepRef +"\"' attribute specification for <" + element.getNodeName() + ">", element);
|
||||
parserContext.getReaderContext().error(
|
||||
"The 'listeners' element can't be combined with the 'ref=\"" + stepRef
|
||||
+ "\"' attribute specification for <" + element.getNodeName() + ">", element);
|
||||
}
|
||||
if (StringUtils.hasText(element.getAttribute("parent"))) {
|
||||
parserContext.getReaderContext().error("The 'parent' element can't be combined with the 'ref=\""+ stepRef +"\"' attribute specification for <" + element.getNodeName() + ">", element);
|
||||
parserContext.getReaderContext().error(
|
||||
"The 'parent' element can't be combined with the 'ref=\"" + stepRef
|
||||
+ "\"' attribute specification for <" + element.getNodeName() + ">", element);
|
||||
}
|
||||
BeanDefinitionBuilder stepBuilder =
|
||||
BeanDefinitionBuilder.genericBeanDefinition("org.springframework.batch.core.configuration.xml.DelegatingStep");
|
||||
BeanDefinitionBuilder stepBuilder = BeanDefinitionBuilder
|
||||
.genericBeanDefinition("org.springframework.batch.core.configuration.xml.DelegatingStep");
|
||||
stepBuilder.addConstructorArgValue(stepId);
|
||||
stepBuilder.addConstructorArgReference(stepRef);
|
||||
AbstractBeanDefinition bd = stepBuilder.getBeanDefinition();
|
||||
bd.setSource(parserContext.extractSource(element));
|
||||
bd.setSource(parserContext.extractSource(element));
|
||||
parserContext.getRegistry().registerBeanDefinition(stepId, bd);
|
||||
stateBuilder.addConstructorArgReference(stepId);
|
||||
}
|
||||
else if (StringUtils.hasText(taskletRef)) {
|
||||
if (listOfTaskElements.size() > 0) {
|
||||
parserContext.getReaderContext().error("The <" + listOfTaskElements.get(0).getNodeName() +
|
||||
"> element can't be combined with the 'tasklet=\""+ taskletRef +"\"' attribute specification for <" + element.getNodeName() + ">", element);
|
||||
}
|
||||
AbstractBeanDefinition bd = parseTaskletRef(element, taskletRef, parserContext, jobRepositoryRef);
|
||||
parserContext.registerBeanComponent(new BeanComponentDefinition(bd, stepId));
|
||||
stateBuilder.addConstructorArgReference(stepId);
|
||||
}
|
||||
else if (listOfTaskElements.size() > 0) {
|
||||
Element taskElement = listOfTaskElements.get(0);
|
||||
AbstractBeanDefinition bd = parseTaskletElement(element, taskElement, parserContext, jobRepositoryRef);
|
||||
parserContext.registerBeanComponent(new BeanComponentDefinition(bd, stepId));
|
||||
stateBuilder.addConstructorArgReference(stepId);
|
||||
}
|
||||
else {
|
||||
parserContext.getReaderContext().error("Incomplete configuration detected while creating step with name " + stepRef, element);
|
||||
AbstractBeanDefinition bd = parseTasklet(element, parserContext, jobRepositoryRef);
|
||||
if (bd != null) {
|
||||
parserContext.registerBeanComponent(new BeanComponentDefinition(bd, stepId));
|
||||
stateBuilder.addConstructorArgReference(stepId);
|
||||
}
|
||||
else {
|
||||
parserContext.getReaderContext().error(
|
||||
"Incomplete configuration detected while creating step with name " + stepRef, element);
|
||||
}
|
||||
}
|
||||
return FlowParser.getNextElements(parserContext, stepId, stateBuilder.getBeanDefinition(), element);
|
||||
|
||||
|
||||
@@ -38,7 +38,8 @@ public class StandaloneStepParser extends AbstractStepParser {
|
||||
* @param parserContext the parser context for the bean factory
|
||||
*/
|
||||
public AbstractBeanDefinition parse(Element element, ParserContext parserContext) {
|
||||
AbstractBeanDefinition bd = parseTasklet(element, parserContext);
|
||||
String jobRepositoryRef = element.getAttribute("job-repository");
|
||||
AbstractBeanDefinition bd = parseTasklet(element, parserContext, jobRepositoryRef);
|
||||
if (bd == null) {
|
||||
bd = new GenericBeanDefinition();
|
||||
setUpBeanDefinition(element, bd, parserContext, element.getAttribute("job-repository"));
|
||||
@@ -47,5 +48,4 @@ public class StandaloneStepParser extends AbstractStepParser {
|
||||
|
||||
return bd;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user