Tidy up IDE callbacks in xml config

This commit is contained in:
dsyer
2009-02-04 15:50:31 +00:00
parent 8e56304eb4
commit cf875e0a38
5 changed files with 79 additions and 52 deletions

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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();
}
}

View File

@@ -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();

View File

@@ -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);
}