Tidy up IDE callbacks in xml config
This commit is contained in:
@@ -18,10 +18,12 @@ package org.springframework.batch.core.configuration.xml;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.batch.core.job.flow.support.SimpleFlow;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.config.RuntimeBeanReference;
|
||||
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.beans.factory.support.ManagedList;
|
||||
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
|
||||
import org.springframework.beans.factory.xml.ParserContext;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
@@ -31,52 +33,67 @@ import org.w3c.dom.NodeList;
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class FlowParser {
|
||||
public class FlowParser extends AbstractSingleBeanDefinitionParser {
|
||||
|
||||
private final String flowName;
|
||||
|
||||
/**
|
||||
* Construct a {@link FlowParser} with the specified name.
|
||||
* @param flowName the name of the flow
|
||||
*/
|
||||
public FlowParser(String flowName) {
|
||||
this.flowName = flowName;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see AbstractSingleBeanDefinitionParser#getBeanClass(Element)
|
||||
*/
|
||||
@Override
|
||||
protected Class<SimpleFlow> getBeanClass(Element element) {
|
||||
return SimpleFlow.class;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param element the top level element containing a flow definition
|
||||
* @param parserContext the {@link ParserContext}
|
||||
* @param flowName the name of the flow
|
||||
* @return a bean definition for a {@link org.springframework.batch.core.job.flow.Flow}
|
||||
* @param outerContext the {@link ParserContext}
|
||||
*/
|
||||
public AbstractBeanDefinition parse(Element element, ParserContext parserContext, String flowName) {
|
||||
@Override
|
||||
protected void doParse(Element element, ParserContext outerContext, BeanDefinitionBuilder builder) {
|
||||
List<RuntimeBeanReference> stateTransitions = new ArrayList<RuntimeBeanReference>();
|
||||
|
||||
StepParser stepParser = new StepParser();
|
||||
DecisionParser decisionParser = new DecisionParser();
|
||||
SplitParser splitParser = new SplitParser();
|
||||
|
||||
ParserContext parserContext = new ParserContext(outerContext.getReaderContext(), outerContext.getDelegate(),
|
||||
builder.getBeanDefinition());
|
||||
|
||||
NodeList children = element.getChildNodes();
|
||||
for (int i = 0; i < children.getLength(); i++) {
|
||||
Node node = children.item(i);
|
||||
if (node instanceof Element) {
|
||||
String nodeName = node.getLocalName();
|
||||
if(nodeName.equals("step"))
|
||||
{
|
||||
stateTransitions.addAll(stepParser.parse((Element)node, parserContext));
|
||||
if (nodeName.equals("step")) {
|
||||
stateTransitions.addAll(stepParser.parse((Element) node, parserContext));
|
||||
}
|
||||
else if(nodeName.equals("decision"))
|
||||
{
|
||||
stateTransitions.addAll(decisionParser.parse((Element)node, parserContext));
|
||||
else if (nodeName.equals("decision")) {
|
||||
stateTransitions.addAll(decisionParser.parse((Element) node, parserContext));
|
||||
}
|
||||
else if(nodeName.equals("split"))
|
||||
{
|
||||
stateTransitions.addAll(splitParser.parse((Element)node, parserContext));
|
||||
else if (nodeName.equals("split")) {
|
||||
stateTransitions.addAll(splitParser.parse((Element) node, parserContext));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BeanDefinitionBuilder flowBuilder = BeanDefinitionBuilder
|
||||
.genericBeanDefinition("org.springframework.batch.core.job.flow.support.SimpleFlow");
|
||||
flowBuilder.addConstructorArgValue(flowName);
|
||||
builder.addConstructorArgValue(flowName);
|
||||
ManagedList managedList = new ManagedList();
|
||||
@SuppressWarnings( { "unchecked", "unused" })
|
||||
boolean dummy = managedList.addAll(stateTransitions);
|
||||
flowBuilder.addPropertyValue("stateTransitions", managedList);
|
||||
AbstractBeanDefinition flowDef = flowBuilder.getBeanDefinition();
|
||||
parserContext.getReaderContext().registerWithGeneratedName(flowDef);
|
||||
builder.addPropertyValue("stateTransitions", managedList);
|
||||
|
||||
return flowDef;
|
||||
builder.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ import java.util.List;
|
||||
import org.springframework.beans.factory.BeanCreationException;
|
||||
import org.springframework.beans.factory.config.BeanReference;
|
||||
import org.springframework.beans.factory.config.RuntimeBeanReference;
|
||||
import org.springframework.beans.factory.parsing.BeanComponentDefinition;
|
||||
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.beans.factory.support.ManagedList;
|
||||
@@ -76,7 +77,8 @@ public class JobExecutionListenerParser {
|
||||
else if(hasText(className)){
|
||||
RootBeanDefinition beanDef = new RootBeanDefinition(className, null, null);
|
||||
String delegateId = parserContext.getReaderContext().generateBeanName(beanDef);
|
||||
parserContext.getRegistry().registerBeanDefinition(delegateId, beanDef);
|
||||
parserContext.registerBeanComponent(new BeanComponentDefinition(beanDef, delegateId));
|
||||
beanDef.setSource(parserContext.extractSource(listenerElement));
|
||||
listenerBuilder.addPropertyReference("delegate", delegateId);
|
||||
}
|
||||
else {
|
||||
@@ -98,7 +100,8 @@ public class JobExecutionListenerParser {
|
||||
if (!StringUtils.hasText(id)) {
|
||||
id = parserContext.getReaderContext().generateBeanName(beanDef);
|
||||
}
|
||||
parserContext.getRegistry().registerBeanDefinition(id, beanDef);
|
||||
parserContext.registerBeanComponent(new BeanComponentDefinition(beanDef, id));
|
||||
beanDef.setSource(parserContext.extractSource(listenerElement));
|
||||
BeanReference bean = new RuntimeBeanReference(id);
|
||||
listeners.add(bean);
|
||||
}
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
*/
|
||||
package org.springframework.batch.core.configuration.xml;
|
||||
|
||||
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
||||
import org.springframework.batch.core.job.flow.FlowJob;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.beans.factory.support.ManagedList;
|
||||
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
|
||||
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
|
||||
import org.springframework.beans.factory.xml.ParserContext;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.util.xml.DomUtils;
|
||||
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
@@ -32,7 +32,12 @@ import org.w3c.dom.Element;
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobParser extends AbstractBeanDefinitionParser {
|
||||
public class JobParser extends AbstractSingleBeanDefinitionParser {
|
||||
|
||||
@Override
|
||||
protected Class<FlowJob> getBeanClass(Element element) {
|
||||
return FlowJob.class;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a bean definition for a {@link org.springframework.batch.core.job.flow.FlowJob}. The
|
||||
@@ -40,16 +45,18 @@ public class JobParser extends AbstractBeanDefinitionParser {
|
||||
* {@link org.springframework.batch.core.repository.JobRepository} and defaults to "jobRepository". Nested step
|
||||
* elements are delegated to a {@link StepParser}.
|
||||
*
|
||||
* @see AbstractBeanDefinitionParser#parseInternal(Element, ParserContext)
|
||||
* @see AbstractSingleBeanDefinitionParser#doParse(Element, ParserContext, BeanDefinitionBuilder)
|
||||
*/
|
||||
@Override
|
||||
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
|
||||
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
|
||||
|
||||
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition("org.springframework.batch.core.job.flow.FlowJob");
|
||||
String jobName = element.getAttribute("id");
|
||||
builder.addConstructorArgValue(jobName);
|
||||
|
||||
String repositoryAttribute = element.getAttribute("job-repository");
|
||||
if (!StringUtils.hasText(repositoryAttribute)) {
|
||||
repositoryAttribute = "jobRepository";
|
||||
}
|
||||
builder.addPropertyReference("jobRepository", repositoryAttribute);
|
||||
|
||||
String restartableAttribute = element.getAttribute("restartable");
|
||||
@@ -62,8 +69,8 @@ public class JobParser extends AbstractBeanDefinitionParser {
|
||||
builder.addPropertyReference("jobParametersIncrementer", incrementer);
|
||||
}
|
||||
|
||||
FlowParser flowParser = new FlowParser();
|
||||
AbstractBeanDefinition flowDef = flowParser.parse(element, parserContext, jobName);
|
||||
FlowParser flowParser = new FlowParser(jobName);
|
||||
BeanDefinition flowDef = flowParser.parse(element, parserContext);
|
||||
builder.addPropertyValue("flow", flowDef);
|
||||
|
||||
JobExecutionListenerParser listenerParser = new JobExecutionListenerParser();
|
||||
@@ -72,8 +79,7 @@ public class JobParser extends AbstractBeanDefinitionParser {
|
||||
ManagedList managedList = listenerParser.parse(listenersElement, parserContext);
|
||||
builder.addPropertyValue("jobExecutionListeners", managedList);
|
||||
}
|
||||
|
||||
return builder.getBeanDefinition();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -62,10 +62,10 @@ public class SplitParser {
|
||||
BeanDefinitionBuilder.genericBeanDefinition("org.springframework.batch.core.job.flow.support.state.SplitState");
|
||||
|
||||
Collection<BeanDefinition> flows = new ArrayList<BeanDefinition>();
|
||||
FlowParser flowParser = new FlowParser();
|
||||
int i = 0;
|
||||
for (Element nextElement : flowElements) {
|
||||
flows.add(flowParser.parse(nextElement, parserContext, idAttribute+"#"+i));
|
||||
FlowParser flowParser = new FlowParser(idAttribute+"#"+i);
|
||||
flows.add(flowParser.parse(nextElement, parserContext));
|
||||
i++;
|
||||
}
|
||||
ManagedList managedList = new ManagedList();
|
||||
|
||||
@@ -31,7 +31,6 @@ import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
import org.springframework.beans.factory.xml.ParserContext;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.util.xml.DomUtils;
|
||||
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
|
||||
@@ -74,13 +73,12 @@ public class StepParser {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Element> processTaskElements = (List<Element>) DomUtils.getChildElementsByTagName(element, "tasklet");
|
||||
if (StringUtils.hasText(taskletRef)) {
|
||||
BeanDefinition task = handleTaskletRef(element, taskletRef, parserContext);
|
||||
parserContext.getRegistry().registerBeanDefinition(stepRef, task);
|
||||
handleTaskletRef(element, taskletRef, parserContext);
|
||||
stateBuilder.addConstructorArgReference(stepRef);
|
||||
}
|
||||
else if (processTaskElements.size() > 0) {
|
||||
BeanDefinition task = handleTaskletElement(element, processTaskElements.get(0), parserContext);
|
||||
parserContext.getRegistry().registerBeanDefinition(stepRef, task);
|
||||
Element taskElement = processTaskElements.get(0);
|
||||
handleTaskletElement(element, taskElement, parserContext);
|
||||
stateBuilder.addConstructorArgReference(stepRef);
|
||||
}
|
||||
else if (StringUtils.hasText(stepRef)) {
|
||||
@@ -209,9 +207,8 @@ public class StepParser {
|
||||
* @param stepElement
|
||||
* @param taskletRef
|
||||
* @param parserContext
|
||||
* @return the TaskletStep bean
|
||||
*/
|
||||
protected BeanDefinition handleTaskletRef(Element stepElement, String taskletRef, ParserContext parserContext) {
|
||||
private void handleTaskletRef(Element stepElement, String taskletRef, ParserContext parserContext) {
|
||||
|
||||
RootBeanDefinition bd = new RootBeanDefinition("org.springframework.batch.core.step.tasklet.TaskletStep", null, null);
|
||||
|
||||
@@ -232,16 +229,16 @@ public class StepParser {
|
||||
|
||||
bd.setRole(BeanDefinition.ROLE_SUPPORT);
|
||||
|
||||
return bd;
|
||||
parserContext.registerBeanComponent(new BeanComponentDefinition(bd, stepElement.getAttribute("name")));
|
||||
bd.setSource(parserContext.extractSource(stepElement));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param element
|
||||
* @param parserContext
|
||||
* @return the TaskletStep bean
|
||||
*/
|
||||
protected BeanDefinition handleTaskletElement(Element stepElement, Element element, ParserContext parserContext) {
|
||||
private void handleTaskletElement(Element stepElement, Element element, ParserContext parserContext) {
|
||||
|
||||
RootBeanDefinition bd;
|
||||
|
||||
@@ -360,7 +357,8 @@ public class StepParser {
|
||||
|
||||
bd.setRole(BeanDefinition.ROLE_SUPPORT);
|
||||
|
||||
return bd;
|
||||
parserContext.registerBeanComponent(new BeanComponentDefinition(bd, stepElement.getAttribute("name")));
|
||||
bd.setSource(parserContext.extractSource(element));
|
||||
|
||||
}
|
||||
|
||||
@@ -451,7 +449,8 @@ public class StepParser {
|
||||
if (!StringUtils.hasText(id)) {
|
||||
id = parserContext.getReaderContext().generateBeanName(beanDef);
|
||||
}
|
||||
parserContext.getRegistry().registerBeanDefinition(id, beanDef);
|
||||
parserContext.registerBeanComponent(new BeanComponentDefinition(beanDef, id));
|
||||
beanDef.setSource(parserContext.extractSource(listenerElement));
|
||||
BeanReference bean = new RuntimeBeanReference(id);
|
||||
beans.add(bean);
|
||||
}
|
||||
@@ -482,7 +481,8 @@ public class StepParser {
|
||||
else if (StringUtils.hasText(className)) {
|
||||
RootBeanDefinition beanDef = new RootBeanDefinition(className, null, null);
|
||||
String delegateId = parserContext.getReaderContext().generateBeanName(beanDef);
|
||||
parserContext.getRegistry().registerBeanDefinition(delegateId, beanDef);
|
||||
parserContext.registerBeanComponent(new BeanComponentDefinition(beanDef, delegateId));
|
||||
beanDef.setSource(parserContext.extractSource(listenerElement));
|
||||
listenerBuilder.addPropertyReference("delegate", delegateId);
|
||||
}
|
||||
else {
|
||||
@@ -520,7 +520,8 @@ public class StepParser {
|
||||
if (!StringUtils.hasText(id)) {
|
||||
id = parserContext.getReaderContext().generateBeanName(beanDef);
|
||||
}
|
||||
parserContext.getRegistry().registerBeanDefinition(id, beanDef);
|
||||
parserContext.registerBeanComponent(new BeanComponentDefinition(beanDef, id));
|
||||
beanDef.setSource(parserContext.extractSource(listenerElement));
|
||||
BeanReference bean = new RuntimeBeanReference(id);
|
||||
beans.add(bean);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user