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"); + } + +}