From b490a78aee64486fd89571d1b604cc217d6bf831 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Sun, 31 Oct 2010 17:37:08 +0200 Subject: [PATCH] SGF-22 + overwrite data policy for client namespace only when needed (otherwise allow user specified settings) --- .../data/gemfire/config/ClientRegionParser.java | 8 +++++--- .../data/gemfire/config/ParsingUtils.java | 13 +++++++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/springframework/data/gemfire/config/ClientRegionParser.java b/src/main/java/org/springframework/data/gemfire/config/ClientRegionParser.java index a59d5901..f3b6d23b 100644 --- a/src/main/java/org/springframework/data/gemfire/config/ClientRegionParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/ClientRegionParser.java @@ -90,10 +90,12 @@ class ClientRegionParser extends AbstractSingleBeanDefinitionParser { // client attributes BeanDefinitionBuilder attrBuilder = BeanDefinitionBuilder.genericBeanDefinition(RegionAttributesFactory.class); - ParsingUtils.parseEviction(parserContext, element, attrBuilder); - ParsingUtils.parseDiskStorage(element, attrBuilder); + boolean overwriteDataPolicy = false; - if (!frozenDataPolicy) { + overwriteDataPolicy |= ParsingUtils.parseEviction(parserContext, element, attrBuilder); + overwriteDataPolicy |= ParsingUtils.parseDiskStorage(element, attrBuilder); + + if (!frozenDataPolicy && overwriteDataPolicy) { builder.addPropertyValue("dataPolicy", DataPolicy.NORMAL); } diff --git a/src/main/java/org/springframework/data/gemfire/config/ParsingUtils.java b/src/main/java/org/springframework/data/gemfire/config/ParsingUtils.java index 3c6b4a9f..f6818c39 100644 --- a/src/main/java/org/springframework/data/gemfire/config/ParsingUtils.java +++ b/src/main/java/org/springframework/data/gemfire/config/ParsingUtils.java @@ -110,12 +110,13 @@ abstract class ParsingUtils { * * @param element - element enclosing the disk-store definition * @param beanBuilder - beanbuilder for a RegionAttributesFactory instance + * @return true if parsing actually occured, false otherwise */ - static void parseDiskStorage(Element element, BeanDefinitionBuilder beanBuilder) { + static boolean parseDiskStorage(Element element, BeanDefinitionBuilder beanBuilder) { Element diskStoreElement = DomUtils.getChildElementByTagName(element, "disk-store"); if (diskStoreElement == null) - return; + return false; BeanDefinitionBuilder diskDefBuilder = BeanDefinitionBuilder.genericBeanDefinition(DiskWriteAttributesFactory.class); setPropertyValue(diskStoreElement, diskDefBuilder, "synchronous-write", "synchronous"); @@ -144,6 +145,8 @@ abstract class ParsingUtils { beanBuilder.addPropertyValue("diskWriteAttributes", factoryWrapper.getBeanDefinition()); beanBuilder.addPropertyValue("diskDirs", locations); beanBuilder.addPropertyValue("diskSizes", sizes); + + return true; } /** @@ -151,12 +154,13 @@ abstract class ParsingUtils { * * @param element * @param attrBuilder + * @return true if parsing actually occured, false otherwise */ - static void parseEviction(ParserContext parserContext, Element element, BeanDefinitionBuilder attrBuilder) { + static boolean parseEviction(ParserContext parserContext, Element element, BeanDefinitionBuilder attrBuilder) { Element evictionElement = DomUtils.getChildElementByTagName(element, "eviction"); if (evictionElement == null) - return; + return false; BeanDefinitionBuilder evictionDefBuilder = BeanDefinitionBuilder.genericBeanDefinition(EvictionAttributesFactoryBean.class); @@ -179,5 +183,6 @@ abstract class ParsingUtils { } attrBuilder.addPropertyValue("evictionAttributes", evictionDefBuilder.getBeanDefinition()); + return true; } } \ No newline at end of file