From 93bb7c76953dd0361a361c61892389c3ee6d1029 Mon Sep 17 00:00:00 2001 From: dhgarrette Date: Wed, 11 Mar 2009 22:06:36 +0000 Subject: [PATCH] BATCH-1135: Create TopLevelStepListenerHandler specifically for use in the CoreNamespaceHandler --- .../xml/AbstractListenerParser.java | 15 +++++-------- .../configuration/xml/AbstractStepParser.java | 6 ++++- .../xml/CoreNamespaceHandler.java | 2 +- .../core/configuration/xml/JobParser.java | 2 +- .../xml/TopLevelStepListenerParser.java | 22 +++++++++++++++++++ 5 files changed, 34 insertions(+), 13 deletions(-) create mode 100644 spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/TopLevelStepListenerParser.java diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractListenerParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractListenerParser.java index 1677c76a7..2bb9375ba 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractListenerParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractListenerParser.java @@ -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, diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractStepParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractStepParser.java index c7a2f06f4..792a6ba2f 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractStepParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractStepParser.java @@ -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(); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/CoreNamespaceHandler.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/CoreNamespaceHandler.java index ff9869651..06cf321cc 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/CoreNamespaceHandler.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/CoreNamespaceHandler.java @@ -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()); } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobParser.java index 10c63a68b..9bf9c3ff2 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobParser.java @@ -89,7 +89,7 @@ public class JobParser extends AbstractSingleBeanDefinitionParser { List listeners = new ArrayList(); List listenerElements = (List) 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); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/TopLevelStepListenerParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/TopLevelStepListenerParser.java new file mode 100644 index 000000000..9e989ee11 --- /dev/null +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/TopLevelStepListenerParser.java @@ -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); + + } + +}