diff --git a/src/main/java/org/springframework/data/gemfire/config/AbstractRegionParser.java b/src/main/java/org/springframework/data/gemfire/config/AbstractRegionParser.java index 2392fe66..9bd816bb 100644 --- a/src/main/java/org/springframework/data/gemfire/config/AbstractRegionParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/AbstractRegionParser.java @@ -16,6 +16,10 @@ package org.springframework.data.gemfire.config; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.config.BeanDefinition; @@ -30,10 +34,6 @@ import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; import org.w3c.dom.Element; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - /** * Base class for all Region Parsers * @@ -41,9 +41,6 @@ import java.util.Map; */ abstract class AbstractRegionParser extends AbstractSingleBeanDefinitionParser { - - private final Map subRegionElements = new HashMap(); - protected final Log log = LogFactory.getLog(getClass()); @Override @@ -143,15 +140,15 @@ abstract class AbstractRegionParser extends AbstractSingleBeanDefinitionParser { } } - if (!subRegion) { - Map allSubRegionElements = new HashMap(); - findSubregionElements(element,getRegionNameFromElement(element),allSubRegionElements); - if (!CollectionUtils.isEmpty(allSubRegionElements)) { - for (Map.Entry entry: allSubRegionElements.entrySet()) { - parseSubRegion(entry.getValue(),parserContext,entry.getKey()); - } - } - } + if (!subRegion) { + Map allSubRegionElements = new HashMap(); + findSubregionElements(element, getRegionNameFromElement(element), allSubRegionElements); + if (!CollectionUtils.isEmpty(allSubRegionElements)) { + for (Map.Entry entry : allSubRegionElements.entrySet()) { + parseSubRegion(entry.getValue(), parserContext, entry.getKey()); + } + } + } } @@ -170,47 +167,49 @@ abstract class AbstractRegionParser extends AbstractSingleBeanDefinitionParser { } private BeanDefinition parseSubRegion(Element element, ParserContext parserContext, String regionPath) { - element.setAttribute("id", regionPath); - String regionName = getRegionNameFromElement(element); - element.setAttribute("name", regionPath); - BeanDefinition beanDefinition = parserContext.getDelegate().parseCustomElement(element); - String parentBeanName = getParentPathForSubRegion(regionPath); - beanDefinition.getPropertyValues().add("parent",new RuntimeBeanReference(parentBeanName)); - beanDefinition.getPropertyValues().add("regionName",regionName); - return beanDefinition; + String parentBeanName = getParentPathForSubRegion(regionPath); + String regionName = getRegionNameFromElement(element); // do before 'renaming' the element, below + + element.setAttribute("id", regionPath); + element.setAttribute("name", regionPath); + + BeanDefinition beanDefinition = parserContext.getDelegate().parseCustomElement(element); + beanDefinition.getPropertyValues().add("parent", new RuntimeBeanReference(parentBeanName)); + beanDefinition.getPropertyValues().add("regionName", regionName); + + return beanDefinition; } private String getRegionNameFromElement(Element element) { String name = element.getAttribute(NAME_ATTRIBUTE); - return StringUtils.hasText(name) ? name : element.getAttribute(ID_ATTRIBUTE); + return (StringUtils.hasText(name) ? name : element.getAttribute(ID_ATTRIBUTE)); } private String buildPathForSubRegion(String parentName, String regionName) { - String regionPath = StringUtils.arrayToDelimitedString(new String[] { parentName, - regionName }, "/"); + String regionPath = StringUtils.arrayToDelimitedString(new String[] { parentName, regionName }, "/"); if (!regionPath.startsWith("/")) { regionPath = "/" + regionPath; } return regionPath; } - private String getParentPathForSubRegion(String regionPath) { - int index = regionPath.lastIndexOf("/"); - String parentPath = regionPath.substring(0,index); - if (parentPath.lastIndexOf("/") == 0) { - parentPath = parentPath.substring(1); - } - return parentPath; - } + private String getParentPathForSubRegion(String regionPath) { + int index = regionPath.lastIndexOf("/"); + String parentPath = regionPath.substring(0, index); + if (parentPath.lastIndexOf("/") == 0) { + parentPath = parentPath.substring(1); + } + return parentPath; + } + private void findSubregionElements(Element parent, String parentPath, Map allSubregionElements) { + for (Element element : DomUtils.getChildElements(parent)) { + if (element.getLocalName().endsWith("region")) { + String regionPath = buildPathForSubRegion(parentPath, getRegionNameFromElement(element)); + allSubregionElements.put(regionPath, element); + findSubregionElements(element, regionPath, allSubregionElements); + } + } + } - private void findSubregionElements(Element parent, String parentPath, Map allSubregionElements) { - for (Element element : DomUtils.getChildElements(parent)) { - if (element.getLocalName().endsWith("region")) { - String regionPath = buildPathForSubRegion(parentPath, getRegionNameFromElement(element)); - allSubregionElements.put(regionPath,element); - findSubregionElements(element,regionPath,allSubregionElements); - } - } - } } diff --git a/src/main/java/org/springframework/data/gemfire/config/LookupRegionParser.java b/src/main/java/org/springframework/data/gemfire/config/LookupRegionParser.java index 867a3d9c..3c601e87 100644 --- a/src/main/java/org/springframework/data/gemfire/config/LookupRegionParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/LookupRegionParser.java @@ -16,13 +16,10 @@ package org.springframework.data.gemfire.config; -import java.util.List; - import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.data.gemfire.RegionLookupFactoryBean; import org.springframework.util.StringUtils; -import org.springframework.util.xml.DomUtils; import org.w3c.dom.Element; /** @@ -33,6 +30,11 @@ import org.w3c.dom.Element; */ class LookupRegionParser extends AbstractRegionParser { + @Override + protected Class getRegionFactoryClass() { + return RegionLookupFactoryBean.class; + } + @Override protected void doParseRegion(Element element, ParserContext parserContext, BeanDefinitionBuilder builder, boolean subRegion) { @@ -50,8 +52,4 @@ class LookupRegionParser extends AbstractRegionParser { } } - @Override - protected Class getRegionFactoryClass() { - return RegionLookupFactoryBean.class; - } } diff --git a/src/test/java/org/springframework/data/gemfire/test/StubGatewayReceiverFactory.java b/src/test/java/org/springframework/data/gemfire/test/StubGatewayReceiverFactory.java index 8bef5987..ec3047aa 100644 --- a/src/test/java/org/springframework/data/gemfire/test/StubGatewayReceiverFactory.java +++ b/src/test/java/org/springframework/data/gemfire/test/StubGatewayReceiverFactory.java @@ -12,14 +12,15 @@ */ package org.springframework.data.gemfire.test; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + import java.util.ArrayList; import java.util.List; import com.gemstone.gemfire.cache.wan.GatewayReceiver; import com.gemstone.gemfire.cache.wan.GatewayReceiverFactory; import com.gemstone.gemfire.cache.wan.GatewayTransportFilter; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; /** * @author David Turanski @@ -33,6 +34,7 @@ public class StubGatewayReceiverFactory implements GatewayReceiverFactory { private List gatewayTransportFilters = new ArrayList(); private int maximumTimeBetweenPings; private int socketBufferSize; + private String hostnameForClients; /* (non-Javadoc) * @see com.gemstone.gemfire.cache.wan.GatewayReceiverFactory#setStartPort(int) @@ -97,6 +99,16 @@ public class StubGatewayReceiverFactory implements GatewayReceiverFactory { return this; } + /* (non-Javadoc) + * @see com.gemstone.gemfire.cache.wan.GatewayReceiverFactory#setHostnameForClients(String) + * @see com.gemstone.gemfire.cache.wan.GatewayReceiver#getHost + */ + //@Override + public GatewayReceiverFactory setHostnameForClients(final String name) { + this.hostnameForClients = name; + return this; + } + /* (non-Javadoc) * @see com.gemstone.gemfire.cache.wan.GatewayReceiverFactory#create() */ @@ -109,6 +121,7 @@ public class StubGatewayReceiverFactory implements GatewayReceiverFactory { when(gatewayReceiver.getMaximumTimeBetweenPings()).thenReturn(this.maximumTimeBetweenPings); when(gatewayReceiver.getSocketBufferSize()).thenReturn(this.socketBufferSize); when(gatewayReceiver.getStartPort()).thenReturn(this.startPort); + when(gatewayReceiver.getHost()).thenReturn(this.hostnameForClients); return gatewayReceiver; }