From fb0bfaf216ac6213b68fdde26392dbbf3be5459c Mon Sep 17 00:00:00 2001 From: David Turanski Date: Thu, 14 Mar 2013 08:30:59 -0400 Subject: [PATCH] SGF-162 added id to cq-listener-container --- .../GemfireListenerContainerParser.java | 54 +++---------------- .../gemfire/support/JSONRegionAdviceTest.java | 5 ++ .../data/gemfire/listener/container.xml | 4 +- 3 files changed, 15 insertions(+), 48 deletions(-) diff --git a/src/main/java/org/springframework/data/gemfire/config/GemfireListenerContainerParser.java b/src/main/java/org/springframework/data/gemfire/config/GemfireListenerContainerParser.java index 42b0435e..fab3a4fe 100644 --- a/src/main/java/org/springframework/data/gemfire/config/GemfireListenerContainerParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/GemfireListenerContainerParser.java @@ -18,32 +18,24 @@ package org.springframework.data.gemfire.config; import java.util.List; -import org.springframework.beans.factory.BeanDefinitionStoreException; import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.config.BeanDefinitionHolder; -import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.ManagedSet; -import org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser; +import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.data.gemfire.listener.ContinuousQueryDefinition; import org.springframework.data.gemfire.listener.ContinuousQueryListenerContainer; import org.springframework.data.gemfire.listener.adapter.ContinuousQueryListenerAdapter; -import org.springframework.util.Assert; import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; -import org.w3c.dom.Attr; import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; /** * Parser for SGF <cq-listener-container> element. * * @author Costin Leau */ -class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser { - +class GemfireListenerContainerParser extends AbstractSingleBeanDefinitionParser { @Override protected Class getBeanClass(Element element) { return ContinuousQueryListenerContainer.class; @@ -51,31 +43,11 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser @Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { - // parse attributes (but replace the value assignment with references) - NamedNodeMap attributes = element.getAttributes(); - - for (int x = 0; x < attributes.getLength(); x++) { - Attr attribute = (Attr) attributes.item(x); - if (isEligibleAttribute(attribute, parserContext)) { - String propertyName = extractPropertyName(attribute.getLocalName()); - Assert.state(StringUtils.hasText(propertyName), - "Illegal property name returned from 'extractPropertyName(String)': cannot be null or empty."); - builder.addPropertyReference(propertyName, attribute.getValue()); - } - } - ParsingUtils.setPropertyValue(element, builder, "phase"); ParsingUtils.setPropertyValue(element, builder, "pool-name"); - - // Register the Id if one has been provided. - String id = element.getAttribute("id"); - if( StringUtils.hasText(id)) { - //BeanDefinitionHolder holder = new BeanDefinitionHolder(builder.getBeanDefinition(), id, null); - //BeanDefinitionReaderUtils.registerBeanDefinition(holder, parserContext.getRegistry()); - } - - postProcess(builder, element); + ParsingUtils.setPropertyReference(element, builder, "cache","cache"); + ParsingUtils.setPropertyReference(element, builder, "task-executor","task-executor"); // parse nested listeners List listDefs = DomUtils.getChildElementsByTagName(element, "listener"); @@ -83,26 +55,21 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser if (!listDefs.isEmpty()) { ManagedSet listeners = new ManagedSet(listDefs.size()); for (Element listElement : listDefs) { - listeners.add(parseListener(listElement, parserContext, builder)); + listeners.add(parseListener(listElement)); } builder.addPropertyValue("queryListeners", listeners); } } - @Override - protected boolean isEligibleAttribute(String attributeName) { - return (!"phase".equals(attributeName) | !"id".equals(attributeName)); - } - /** * Parses a listener definition. Returns the listener bean reference definition (of a {@link ContinuousQueryDefinition}). * * @param element * @return */ - private BeanDefinition parseListener(Element element, ParserContext parserContext, BeanDefinitionBuilder definition) { - + private BeanDefinition parseListener(Element element) { + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(ContinuousQueryListenerAdapter.class); builder.addConstructorArgReference(element.getAttribute("ref")); @@ -117,7 +84,7 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser if (StringUtils.hasText(attr)) { defBuilder.addConstructorArgValue(attr); } - + defBuilder.addConstructorArgValue(element.getAttribute("query")); defBuilder.addConstructorArgValue(builder.getBeanDefinition()); @@ -128,9 +95,4 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser return defBuilder.getBeanDefinition(); } - - @Override - protected boolean shouldGenerateId() { - return false; - } } \ No newline at end of file diff --git a/src/test/java/org/springframework/data/gemfire/support/JSONRegionAdviceTest.java b/src/test/java/org/springframework/data/gemfire/support/JSONRegionAdviceTest.java index d6bae478..e647bbad 100644 --- a/src/test/java/org/springframework/data/gemfire/support/JSONRegionAdviceTest.java +++ b/src/test/java/org/springframework/data/gemfire/support/JSONRegionAdviceTest.java @@ -24,6 +24,7 @@ import javax.annotation.Resource; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -49,6 +50,10 @@ public class JSONRegionAdviceTest { @Autowired GemfireOperations template; + @Before + public void setUp() { + region.clear(); + } @Test public void testPutString() { String json = "{\"hello\":\"world\"}"; diff --git a/src/test/resources/org/springframework/data/gemfire/listener/container.xml b/src/test/resources/org/springframework/data/gemfire/listener/container.xml index a777ac79..dfd27d2c 100644 --- a/src/test/resources/org/springframework/data/gemfire/listener/container.xml +++ b/src/test/resources/org/springframework/data/gemfire/listener/container.xml @@ -25,7 +25,7 @@ - + @@ -33,7 +33,7 @@ - +