Author: niallp
Date: Sun May 20 15:17:33 2007
New Revision: 539965
URL: http://svn.apache.org/viewvc?view=rev&rev=539965
Log:
Fix for BEANUTILS-112 - deprecate the public static defaultTransformers HashMap
and make it unmodifiable
Modified:
jakarta/commons/proper/beanutils/trunk/optional/bean-collections/src/java/org/apache/commons/beanutils/BeanMap.java
jakarta/commons/proper/beanutils/trunk/optional/bean-collections/src/test/org/apache/commons/beanutils/TestBeanMap.java
Modified:
jakarta/commons/proper/beanutils/trunk/optional/bean-collections/src/java/org/apache/commons/beanutils/BeanMap.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/optional/bean-collections/src/java/org/apache/commons/beanutils/BeanMap.java?view=diff&rev=539965&r1=539964&r2=539965
==============================================================================
---
jakarta/commons/proper/beanutils/trunk/optional/bean-collections/src/java/org/apache/commons/beanutils/BeanMap.java
(original)
+++
jakarta/commons/proper/beanutils/trunk/optional/bean-collections/src/java/org/apache/commons/beanutils/BeanMap.java
Sun May 20 15:17:33 2007
@@ -27,8 +27,10 @@
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.Map;
import java.util.Set;
import org.apache.commons.collections.list.UnmodifiableList;
@@ -64,10 +66,59 @@
/**
* Maps primitive Class types to transformers. The transformer
* transform strings into the appropriate primitive wrapper.
+ *
+ * N.B. private & unmodifiable replacement for the (public & static)
defaultTransformers instance.
+ */
+ private static Map typeTransformers =
Collections.unmodifiableMap(createTypeTransformers());
+
+ /**
+ * This HashMap has been made unmodifiable to prevent issues when
+ * loaded in a shared ClassLoader enviroment.
+ *
+ * @see http://issues.apache.org/jira/browse/BEANUTILS-112
+ * @deprecated Use [EMAIL PROTECTED] BeanMap#getTypeTransformer(Class)}
method
*/
- public static HashMap defaultTransformers = new HashMap();
+ public static HashMap defaultTransformers = new HashMap() {
+ public void clear() {
+ throw new UnsupportedOperationException();
+ }
+ public boolean containsKey(Object key) {
+ return typeTransformers.containsKey(key);
+ }
+ public boolean containsValue(Object value) {
+ return typeTransformers.containsValue(value);
+ }
+ public Set entrySet() {
+ return typeTransformers.entrySet();
+ }
+ public Object get(Object key) {
+ return typeTransformers.get(key);
+ }
+ public boolean isEmpty() {
+ return false;
+ }
+ public Set keySet() {
+ return typeTransformers.keySet();
+ }
+ public Object put(Object key, Object value) {
+ throw new UnsupportedOperationException();
+ }
+ public void putAll(Map m) {
+ throw new UnsupportedOperationException();
+ }
+ public Object remove(Object key) {
+ throw new UnsupportedOperationException();
+ }
+ public int size() {
+ return typeTransformers.size();
+ }
+ public Collection values() {
+ return typeTransformers.values();
+ }
+ };
- static {
+ private static Map createTypeTransformers() {
+ Map defaultTransformers = new HashMap();
defaultTransformers.put(
Boolean.TYPE,
new Transformer() {
@@ -132,6 +183,7 @@
}
}
);
+ return defaultTransformers;
}
@@ -776,7 +828,7 @@
* or null if the given type is not a primitive type
*/
protected Transformer getTypeTransformer( Class aType ) {
- return (Transformer) defaultTransformers.get( aType );
+ return (Transformer) typeTransformers.get( aType );
}
/**
Modified:
jakarta/commons/proper/beanutils/trunk/optional/bean-collections/src/test/org/apache/commons/beanutils/TestBeanMap.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/optional/bean-collections/src/test/org/apache/commons/beanutils/TestBeanMap.java?view=diff&rev=539965&r1=539964&r2=539965
==============================================================================
---
jakarta/commons/proper/beanutils/trunk/optional/bean-collections/src/test/org/apache/commons/beanutils/TestBeanMap.java
(original)
+++
jakarta/commons/proper/beanutils/trunk/optional/bean-collections/src/test/org/apache/commons/beanutils/TestBeanMap.java
Sun May 20 15:17:33 2007
@@ -19,12 +19,14 @@
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.Map;
+import java.util.HashMap;
import junit.framework.Test;
import junit.textui.TestRunner;
import org.apache.commons.collections.map.AbstractTestMap;
import org.apache.commons.collections.BulkTest;
+import org.apache.commons.collections.Transformer;
/**
* Test cases for BeanMap
@@ -341,5 +343,81 @@
Method method =
BeanWithProperties.class.getDeclaredMethod("setSomeIntegerValue", new Class[]
{Integer.class});
assertEquals(method, map.getWriteMethod("someIntegerValue"));
}
-
+
+ /**
+ * Test the default transformers using the getTypeTransformer() method
+ */
+ public void testGetTypeTransformerMethod() {
+ BeanMap beanMap = new BeanMap();
+ assertEquals("Boolean.TYPE", Boolean.TRUE,
beanMap.getTypeTransformer(Boolean.TYPE).transform("true"));
+ assertEquals("Character.TYPE", new Character('B'),
beanMap.getTypeTransformer(Character.TYPE).transform("BCD"));
+ assertEquals("Byte.TYPE", new Byte((byte)1),
beanMap.getTypeTransformer(Byte.TYPE).transform("1"));
+ assertEquals("Short.TYPE", new Short((short)2),
beanMap.getTypeTransformer(Short.TYPE).transform("2"));
+ assertEquals("Integer.TYPE", new Integer(3),
beanMap.getTypeTransformer(Integer.TYPE).transform("3"));
+ assertEquals("Long.TYPE", new Long(4),
beanMap.getTypeTransformer(Long.TYPE).transform("4"));
+ assertEquals("Float.TYPE", new Float("5"),
beanMap.getTypeTransformer(Float.TYPE).transform("5"));
+ assertEquals("Double.TYPE", new Double("6"),
beanMap.getTypeTransformer(Double.TYPE).transform("6"));
+ }
+
+ /**
+ * Test the default transformers via the pub static Map instance
+ */
+ public void testGetDefaultTransformersMap() {
+ BeanMap beanMap = new BeanMap();
+ assertEquals("Boolean.TYPE", Boolean.TRUE,
((Transformer)BeanMap.defaultTransformers.get(Boolean.TYPE)).transform("true"));
+ assertEquals("Character.TYPE", new Character('B'),
((Transformer)BeanMap.defaultTransformers.get(Character.TYPE)).transform("BCD"));
+ assertEquals("Byte.TYPE", new Byte((byte)1),
((Transformer)BeanMap.defaultTransformers.get(Byte.TYPE)).transform("1"));
+ assertEquals("Short.TYPE", new Short((short)2),
((Transformer)BeanMap.defaultTransformers.get(Short.TYPE)).transform("2"));
+ assertEquals("Integer.TYPE", new Integer(3),
((Transformer)BeanMap.defaultTransformers.get(Integer.TYPE)).transform("3"));
+ assertEquals("Long.TYPE", new Long(4),
((Transformer)BeanMap.defaultTransformers.get(Long.TYPE)).transform("4"));
+ assertEquals("Float.TYPE", new Float("5"),
((Transformer)BeanMap.defaultTransformers.get(Float.TYPE)).transform("5"));
+ assertEquals("Double.TYPE", new Double("6"),
((Transformer)BeanMap.defaultTransformers.get(Double.TYPE)).transform("6"));
+ try {
+ BeanMap.defaultTransformers.put("FOO", null);
+ fail("put() - expected UnsupportedOperationException");
+ } catch(UnsupportedOperationException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Test the default transformers via the pub static Map instance
+ */
+ public void testDefaultTransformersMap() {
+ assertEquals("Size", 8, BeanMap.defaultTransformers.size());
+ assertEquals("entrySet", 8,
BeanMap.defaultTransformers.entrySet().size());
+ assertEquals("keySet", 8,
BeanMap.defaultTransformers.keySet().size());
+ assertEquals("values", 8,
BeanMap.defaultTransformers.values().size());
+ assertFalse("isEmpty", BeanMap.defaultTransformers.isEmpty());
+ assertTrue("containsKey(Double)",
BeanMap.defaultTransformers.containsKey(Double.TYPE));
+ assertFalse("containsKey(Object)",
BeanMap.defaultTransformers.containsKey(Object.class));
+ assertTrue("containsValue(double)",
BeanMap.defaultTransformers.containsValue(BeanMap.defaultTransformers.get(Double.TYPE)));
+ assertFalse("containsValue(Object)",
BeanMap.defaultTransformers.containsValue(Object.class));
+
+ try {
+ BeanMap.defaultTransformers.clear();
+ fail("clear() - expected UnsupportedOperationException");
+ } catch(UnsupportedOperationException e) {
+ // expected result
+ }
+ try {
+ BeanMap.defaultTransformers.put("FOO", null);
+ fail("put() - expected UnsupportedOperationException");
+ } catch(UnsupportedOperationException e) {
+ // expected result
+ }
+ try {
+ BeanMap.defaultTransformers.putAll(new HashMap());
+ fail("putAll() - expected UnsupportedOperationException");
+ } catch(UnsupportedOperationException e) {
+ // expected result
+ }
+ try {
+ BeanMap.defaultTransformers.remove("FOO");
+ fail("remove() - expected UnsupportedOperationException");
+ } catch(UnsupportedOperationException e) {
+ // expected result
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]