BATCH-1135: Create TopLevelStepListenerHandler specifically for use in the CoreNamespaceHandler

This commit is contained in:
dhgarrette
2009-03-11 22:06:36 +00:00
parent a273055e9f
commit 93bb7c7695
5 changed files with 34 additions and 13 deletions

View File

@@ -5,11 +5,10 @@ import java.util.List;
import org.springframework.batch.core.listener.AbstractListenerFactoryBean;
import org.springframework.batch.core.listener.ListenerMetaData;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedMap;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.util.StringUtils;
import org.w3c.dom.Element;
@@ -19,16 +18,11 @@ import org.w3c.dom.NamedNodeMap;
* @author Dan Garrette
* @since 2.0
*/
public abstract class AbstractListenerParser extends AbstractSingleBeanDefinitionParser {
public BeanDefinition internalParse(Element element, ParserContext parserContext) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(getBeanClass(null));
this.doParse(element, parserContext, builder);
return builder.getBeanDefinition();
}
public abstract class AbstractListenerParser {
@SuppressWarnings("unchecked")
public void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
public AbstractBeanDefinition parse(Element element, ParserContext parserContext) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(getBeanClass(null));
String id = element.getAttribute("id");
String listenerRef = element.getAttribute("ref");
String className = element.getAttribute("class");
@@ -54,6 +48,7 @@ public abstract class AbstractListenerParser extends AbstractSingleBeanDefinitio
}
}
builder.addPropertyValue("metaDataMap", metaDataMap);
return builder.getBeanDefinition();
}
private void checkListenerElementAttributes(ParserContext parserContext, Element element, String id,

View File

@@ -119,6 +119,10 @@ public abstract class AbstractStepParser {
if (StringUtils.hasText(allowStartIfComplete)) {
bd.getPropertyValues().addPropertyValue("allowStartIfComplete", allowStartIfComplete);
}
setParent(stepElement, bd);
}
protected void setParent(Element stepElement, AbstractBeanDefinition bd) {
String parentRef = stepElement.getAttribute("parent");
if (StringUtils.hasText(parentRef)) {
bd.setParentName(parentRef);
@@ -138,7 +142,7 @@ public abstract class AbstractStepParser {
DomUtils.getChildElementsByTagName(listenersElement, "listener");
if (listenerElements != null) {
for (Element listenerElement : listenerElements) {
listenerBeans.add(stepListenerParser.internalParse(listenerElement, parserContext));
listenerBeans.add(stepListenerParser.parse(listenerElement, parserContext));
}
}
ManagedList arguments = new ManagedList();

View File

@@ -33,6 +33,6 @@ public class CoreNamespaceHandler extends NamespaceHandlerSupport {
this.registerBeanDefinitionParser("job", new JobParser());
this.registerBeanDefinitionParser("step", new TopLevelStepParser());
this.registerBeanDefinitionParser("job-repository", new JobRepositoryParser());
this.registerBeanDefinitionParser("step-listener", new StepListenerParser());
this.registerBeanDefinitionParser("step-listener", new TopLevelStepListenerParser());
}
}

View File

@@ -89,7 +89,7 @@ public class JobParser extends AbstractSingleBeanDefinitionParser {
List<BeanDefinition> listeners = new ArrayList<BeanDefinition>();
List<Element> listenerElements = (List<Element>) DomUtils.getChildElementsByTagName(listenersElement, "listener");
for (Element listenerElement : listenerElements) {
listeners.add(listenerParser.internalParse(listenerElement, parserContext));
listeners.add(listenerParser.parse(listenerElement, parserContext));
}
ManagedList managedList = new ManagedList();
managedList.addAll(listeners);

View File

@@ -0,0 +1,22 @@
package org.springframework.batch.core.configuration.xml;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.w3c.dom.Element;
/**
* @author Dan Garrette
* @since 2.0
*/
public class TopLevelStepListenerParser extends AbstractBeanDefinitionParser {
@Override
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
StepListenerParser stepListenerParser = new StepListenerParser();
return stepListenerParser.parse(element, parserContext);
}
}