diff --git a/src/main/java/org/springframework/data/gemfire/ClientRegionShortcutConverter.java b/src/main/java/org/springframework/data/gemfire/ClientRegionShortcutConverter.java
new file mode 100644
index 00000000..6dfe4ad8
--- /dev/null
+++ b/src/main/java/org/springframework/data/gemfire/ClientRegionShortcutConverter.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2010-2013 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.data.gemfire;
+
+import org.springframework.core.convert.converter.Converter;
+
+import com.gemstone.gemfire.cache.client.ClientRegionShortcut;
+
+/**
+ * The ClientRegionShortcutConverter class is a Spring Converter implementation converting String value Client Region
+ * Shortcut representations into actual GemFire ClientRegionShortcut enumerated values.
+ *
+ * @author John Blum
+ * @see org.springframework.core.convert.converter.Converter
+ * @see com.gemstone.gemfire.cache.client.ClientRegionShortcut
+ * @since 1.3.4
+ */
+@SuppressWarnings("unused")
+public class ClientRegionShortcutConverter implements Converter {
+
+ /**
+ * Converts the String value to upper case, trimming all whitespace. This method guards against null values
+ * and returns the "null" String if value is null.
+ *
+ * @param value the String to convert to a trimmed, upper case value.
+ * @return a trimmed, upper case value of the specified String, or "null" if the String value reference is null.
+ * @see java.lang.String#toUpperCase()
+ * @see java.lang.String#trim()
+ * @see java.lang.String#valueOf(Object)
+ */
+ protected static String toUpperCase(final String value) {
+ return (value != null ? value.toUpperCase().trim() : String.valueOf(value));
+ }
+
+ /**
+ * Converts the source String representation of a Client Region Shortcut into a ClientRegionShortcut enumerated
+ * value.
+ *
+ * @param source the String representation of the Client Region Shortcut to convert.
+ * @return a ClientRegionShortcut enumerated value for the String representation.
+ * @throws IllegalArgumentException if the String source is not a valid ClientRegionShortcut enumerated value.
+ * @see com.gemstone.gemfire.cache.client.ClientRegionShortcut#valueOf(String)
+ */
+ @Override
+ public ClientRegionShortcut convert(final String source) {
+ return ClientRegionShortcut.valueOf(toUpperCase(source));
+ }
+
+}
diff --git a/src/main/java/org/springframework/data/gemfire/RegionFactoryBean.java b/src/main/java/org/springframework/data/gemfire/RegionFactoryBean.java
index 85e43651..24570fea 100644
--- a/src/main/java/org/springframework/data/gemfire/RegionFactoryBean.java
+++ b/src/main/java/org/springframework/data/gemfire/RegionFactoryBean.java
@@ -101,6 +101,10 @@ public class RegionFactoryBean extends RegionLookupFactoryBean imple
RegionFactory regionFactory;
if (attributes != null) {
+ // TODO refactor... AttributesFactory extended by the SDG RegionAttributesFactoryBean and used by all
+ // RegionFactoryBeans subclasses calls AttributesFactory.validateAttributes(..) before the RegionAttributes
+ // are created in the AttributesFactory.create() method, which is called by
+ // RegionAttributesFactoryBean.afterPropertiesSet() method.
AttributesFactory.validateAttributes(attributes);
regionFactory = cache.createRegionFactory(attributes);
}
diff --git a/src/main/java/org/springframework/data/gemfire/RegionShortcutConverter.java b/src/main/java/org/springframework/data/gemfire/RegionShortcutConverter.java
new file mode 100644
index 00000000..bbdde97b
--- /dev/null
+++ b/src/main/java/org/springframework/data/gemfire/RegionShortcutConverter.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2010-2013 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.data.gemfire;
+
+import org.springframework.core.convert.converter.Converter;
+
+import com.gemstone.gemfire.cache.RegionShortcut;
+
+/**
+ * The RegionShortcutConverter class is a Spring Converter implementation converting String value Region Shortcut
+ * representations into actual GemFire RegionShortcut enumerated values.
+ *
+ * @author John Blum
+ * @see org.springframework.core.convert.converter.Converter
+ * @see com.gemstone.gemfire.cache.RegionShortcut
+ * @since 1.3.4
+ */
+@SuppressWarnings("unused")
+public class RegionShortcutConverter implements Converter {
+
+ /**
+ * Converts the String value to upper case, trimming all whitespace. This method guards against null values
+ * and returns the "null" String if value is null.
+ *
+ * @param value the String to convert to a trimmed, upper case value.
+ * @return a trimmed, upper case value of the specified String, or "null" if the String value reference is null.
+ * @see java.lang.String#toUpperCase()
+ * @see java.lang.String#trim()
+ * @see java.lang.String#valueOf(Object)
+ */
+ protected static String toUpperCase(final String value) {
+ return (value != null ? value.toUpperCase().trim() : String.valueOf(value));
+ }
+
+ /**
+ * Converts the source String representation of a Region Shortcut into a RegionShortcut enumerated value.
+ *
+ * @param source the String representation of the Region Shortcut to convert.
+ * @return a RegionShortcut enumerated value for the String representation.
+ * @throws IllegalArgumentException if the String source is not a valid RegionShortcut enumerated value.
+ * @see com.gemstone.gemfire.cache.RegionShortcut#valueOf(String)
+ */
+ @Override
+ public RegionShortcut convert(final String source) {
+ return RegionShortcut.valueOf(toUpperCase(source));
+ }
+
+}
diff --git a/src/test/java/org/springframework/data/gemfire/ClientRegionShortcutConverterTest.java b/src/test/java/org/springframework/data/gemfire/ClientRegionShortcutConverterTest.java
new file mode 100644
index 00000000..e32bea75
--- /dev/null
+++ b/src/test/java/org/springframework/data/gemfire/ClientRegionShortcutConverterTest.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2010-2013 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.data.gemfire;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import com.gemstone.gemfire.cache.client.ClientRegionShortcut;
+
+/**
+ * The ClientRegionShortcutConverterTest class is a test suite of test cases testing the contract and functionality
+ * of the ClientRegionShortcutConverter class
+ *
+ * @author John Blum
+ * @see org.junit.Test
+ * @see org.springframework.data.gemfire.ClientRegionShortcutConverter
+ * @see com.gemstone.gemfire.cache.client.ClientRegionShortcut
+ * @since 1.3.4
+ */
+public class ClientRegionShortcutConverterTest {
+
+ private final ClientRegionShortcutConverter converter = new ClientRegionShortcutConverter();
+
+ @Test
+ public void testToUpperCase() {
+ assertEquals("TEST", ClientRegionShortcutConverter.toUpperCase("test"));
+ assertEquals("TEST", ClientRegionShortcutConverter.toUpperCase(" Test "));
+ assertEquals("", ClientRegionShortcutConverter.toUpperCase(""));
+ assertEquals("", ClientRegionShortcutConverter.toUpperCase(" "));
+ assertEquals("NULL", ClientRegionShortcutConverter.toUpperCase("null"));
+ assertEquals("null", ClientRegionShortcutConverter.toUpperCase(null));
+ }
+
+ @Test
+ public void testConvert() {
+ for (ClientRegionShortcut shortcut : ClientRegionShortcut.values()) {
+ assertEquals(shortcut, converter.convert(shortcut.name()));
+ }
+
+ assertEquals(ClientRegionShortcut.PROXY, converter.convert("Proxy"));
+ assertEquals(ClientRegionShortcut.CACHING_PROXY, converter.convert("caching_proxy"));
+ assertEquals(ClientRegionShortcut.LOCAL_HEAP_LRU, converter.convert("local_Heap_LRU"));
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testConvertWithIllegalEnumeratedValue() {
+ converter.convert("LOCAL Persistent OverFlow");
+ }
+
+}
diff --git a/src/test/java/org/springframework/data/gemfire/RegionShortcutConverterTest.java b/src/test/java/org/springframework/data/gemfire/RegionShortcutConverterTest.java
new file mode 100644
index 00000000..d64141cf
--- /dev/null
+++ b/src/test/java/org/springframework/data/gemfire/RegionShortcutConverterTest.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2010-2013 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.data.gemfire;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import com.gemstone.gemfire.cache.RegionShortcut;
+
+/**
+ * The RegionShortcutConverterTest class is a test suite of test cases testing the contract and functionality of the
+ * RegionShortcutConverter class
+ *
+ * @author John Blum
+ * @see org.junit.Test
+ * @see org.springframework.data.gemfire.RegionShortcutConverter
+ * @see com.gemstone.gemfire.cache.RegionShortcut
+ * @since 1.3.4
+ */
+public class RegionShortcutConverterTest {
+
+ private final RegionShortcutConverter converter = new RegionShortcutConverter();
+
+ @Test
+ public void testToUpperCase() {
+ assertEquals("TEST", RegionShortcutConverter.toUpperCase("test"));
+ assertEquals("TEST", RegionShortcutConverter.toUpperCase(" Test "));
+ assertEquals("", RegionShortcutConverter.toUpperCase(""));
+ assertEquals("", RegionShortcutConverter.toUpperCase(" "));
+ assertEquals("NULL", RegionShortcutConverter.toUpperCase("null"));
+ assertEquals("null", RegionShortcutConverter.toUpperCase(null));
+ }
+
+ @Test
+ public void testConvert() {
+ for (RegionShortcut shortcut : RegionShortcut.values()) {
+ assertEquals(shortcut, converter.convert(shortcut.name()));
+ }
+
+ assertEquals(RegionShortcut.PARTITION_PROXY, converter.convert("Partition_Proxy"));
+ assertEquals(RegionShortcut.REPLICATE_OVERFLOW, converter.convert("replicate_overflow"));
+ assertEquals(RegionShortcut.LOCAL_HEAP_LRU, converter.convert("local_Heap_LRU"));
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testConvertWithIllegalEnumeratedValue() {
+ converter.convert("localPersistentOverflow");
+ }
+
+}