[prev in list] [next in list] [prev in thread] [next in thread]
List: jakarta-commons-dev
Subject: svn commit: r571381 - in
From: skestle () apache ! org
Date: 2007-08-31 5:13:57
Message-ID: 20070831051358.1E15D1A9832 () eris ! apache ! org
[Download RAW message or body]
Author: skestle
Date: Thu Aug 30 22:13:56 2007
New Revision: 571381
URL: http://svn.apache.org/viewvc?rev=571381&view=rev
Log:
Generified LazyMap
Modified:
commons/proper/collections/branches/collections_jdk5_branch/src/java/org/apache/commons/collections/FactoryUtils.java
commons/proper/collections/branches/collections_jdk5_branch/src/java/org/apache/commons/collections/map/LazyMap.java
commons/proper/collections/branches/collections_jdk5_branch/src/test/org/apache/commons/collections/map/AbstractTestMap.java
commons/proper/collections/branches/collections_jdk5_branch/src/test/org/apache/commons/collections/map/TestAll.java
commons/proper/collections/branches/collections_jdk5_branch/src/test/org/apache/commons/collections/map/TestLazyMap.java
Modified: commons/proper/collections/branches/collections_jdk5_branch/src/java/org/apache/commons/collections/FactoryUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/branches/collections_jdk5 \
_branch/src/java/org/apache/commons/collections/FactoryUtils.java?rev=571381&r1=571380&r2=571381&view=diff
==============================================================================
--- commons/proper/collections/branches/collections_jdk5_branch/src/java/org/apache/commons/collections/FactoryUtils.java \
(original)
+++ commons/proper/collections/branches/collections_jdk5_branch/src/java/org/apache/commons/collections/FactoryUtils.java \
Thu Aug 30 22:13:56 2007 @@ -64,10 +64,10 @@
* This could be useful during testing as a placeholder.
*
* @see org.apache.commons.collections.functors.ConstantFactory
- *
+ * @param <T> the "type" of null object the factory should return.
* @return the factory
*/
- public static Factory nullFactory() {
+ public static <T> Factory<T> nullFactory() {
return ConstantFactory.NULL_INSTANCE;
}
Modified: commons/proper/collections/branches/collections_jdk5_branch/src/java/org/apache/commons/collections/map/LazyMap.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/branches/collections_jdk5 \
_branch/src/java/org/apache/commons/collections/map/LazyMap.java?rev=571381&r1=571380&r2=571381&view=diff
==============================================================================
--- commons/proper/collections/branches/collections_jdk5_branch/src/java/org/apache/commons/collections/map/LazyMap.java \
(original)
+++ commons/proper/collections/branches/collections_jdk5_branch/src/java/org/apache/commons/collections/map/LazyMap.java \
Thu Aug 30 22:13:56 2007 @@ -62,15 +62,15 @@
* @author Stephen Colebourne
* @author Paul Jack
*/
-public class LazyMap
- extends AbstractMapDecorator
- implements Map, Serializable {
+public class LazyMap<K,V>
+ extends AbstractMapDecorator<K,V>
+ implements Map<K,V>, Serializable {
/** Serialization version */
private static final long serialVersionUID = 7990956402564206740L;
/** The factory to use to construct elements */
- protected final Transformer factory;
+ protected final Transformer<? super K, ? extends V> factory;
/**
* Factory method to create a lazily instantiated map.
@@ -78,9 +78,11 @@
* @param map the map to decorate, must not be null
* @param factory the factory to use, must not be null
* @throws IllegalArgumentException if map or factory is null
+ * @deprecated use {@link #getLazyMap(Map, Factory)} instead.
*/
- public static Map decorate(Map map, Factory factory) {
- return new LazyMap(map, factory);
+ @Deprecated
+ public static <K,V> Map<K,V> decorate(Map<K,V> map, Factory<? extends V> \
factory) { + return getLazyMap(map, factory);
}
/**
@@ -90,10 +92,34 @@
* @param factory the factory to use, must not be null
* @throws IllegalArgumentException if map or factory is null
*/
- public static Map decorate(Map map, Transformer factory) {
- return new LazyMap(map, factory);
+ public static <K, V> LazyMap<K, V> getLazyMap(Map<K, V> map, Factory< ? extends \
V> factory) { + return new LazyMap<K,V>(map, factory);
+ }
+
+ /**
+ * Factory method to create a lazily instantiated map.
+ *
+ * @param map the map to decorate, must not be null
+ * @param factory the factory to use, must not be null
+ * @throws IllegalArgumentException if map or factory is null
+ * @deprecated use {@link #getLazyMap(Map, Transformer)} instead.
+ */
+ @Deprecated
+ public static <K,V> Map<K,V> decorate(Map<K,V> map, Transformer<? super K, ? \
extends V> factory) { + return getLazyMap(map, factory);
}
+ /**
+ * Factory method to create a lazily instantiated map.
+ *
+ * @param map the map to decorate, must not be null
+ * @param factory the factory to use, must not be null
+ * @throws IllegalArgumentException if map or factory is null
+ */
+ public static <V, K> LazyMap<K, V> getLazyMap(Map<K, V> map, Transformer<? super K, \
? extends V> factory) { + return new LazyMap<K,V>(map, factory);
+ }
+
//-----------------------------------------------------------------------
/**
* Constructor that wraps (not copies).
@@ -102,7 +128,7 @@
* @param factory the factory to use, must not be null
* @throws IllegalArgumentException if map or factory is null
*/
- protected LazyMap(Map map, Factory factory) {
+ protected LazyMap(Map<K,V> map, Factory<? extends V> factory) {
super(map);
if (factory == null) {
throw new IllegalArgumentException("Factory must not be null");
@@ -117,7 +143,7 @@
* @param factory the factory to use, must not be null
* @throws IllegalArgumentException if map or factory is null
*/
- protected LazyMap(Map map, Transformer factory) {
+ protected LazyMap(Map<K,V> map, Transformer<? super K, ? extends V> factory) {
super(map);
if (factory == null) {
throw new IllegalArgumentException("Factory must not be null");
@@ -146,21 +172,35 @@
* @throws ClassNotFoundException
* @since Commons Collections 3.1
*/
- private void readObject(ObjectInputStream in) throws IOException, \
ClassNotFoundException { + @SuppressWarnings("unchecked")
+ private void readObject(ObjectInputStream in) throws IOException, \
ClassNotFoundException { in.defaultReadObject();
map = (Map) in.readObject();
}
//-----------------------------------------------------------------------
- public Object get(Object key) {
+ @Override
+ public V get(Object key) {
// create value for key if key is not currently in the map
if (map.containsKey(key) == false) {
- Object value = factory.transform(key);
- map.put(key, value);
+ K castKey = cast(key);
+ V value = factory.transform(castKey);
+ map.put(castKey, value);
return value;
}
return map.get(key);
}
+
+ /**
+ * Method just to cast {@link Object}s to K where necessary. This is done to \
ensure that the SuppressWarnings does not + * cover other stuff that it \
shouldn't + * @param key .
+ * @return the cast key.
+ */
+ @SuppressWarnings("unchecked")
+ private K cast(Object key) {
+ return (K) key;
+ }
// no need to wrap keySet, entrySet or values as they are views of
// existing map entries - you can't do a map-style get on them.
Modified: commons/proper/collections/branches/collections_jdk5_branch/src/test/org/apache/commons/collections/map/AbstractTestMap.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/branches/collections_jdk5 \
_branch/src/test/org/apache/commons/collections/map/AbstractTestMap.java?rev=571381&r1=571380&r2=571381&view=diff
==============================================================================
--- commons/proper/collections/branches/collections_jdk5_branch/src/test/org/apache/commons/collections/map/AbstractTestMap.java \
(original)
+++ commons/proper/collections/branches/collections_jdk5_branch/src/test/org/apache/commons/collections/map/AbstractTestMap.java \
Thu Aug 30 22:13:56 2007 @@ -397,7 +397,7 @@
*
* @return the map to be tested
*/
- public abstract Map makeEmptyMap();
+ public abstract <K,V> Map<K,V> makeEmptyMap();
/**
* Return a new, populated map. The mappings in the map should match the
Modified: commons/proper/collections/branches/collections_jdk5_branch/src/test/org/apache/commons/collections/map/TestAll.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/branches/collections_jdk5 \
_branch/src/test/org/apache/commons/collections/map/TestAll.java?rev=571381&r1=571380&r2=571381&view=diff
==============================================================================
--- commons/proper/collections/branches/collections_jdk5_branch/src/test/org/apache/commons/collections/map/TestAll.java \
(original)
+++ commons/proper/collections/branches/collections_jdk5_branch/src/test/org/apache/commons/collections/map/TestAll.java \
Thu Aug 30 22:13:56 2007 @@ -16,9 +16,11 @@
*/
package org.apache.commons.collections.map;
-import junit.framework.Test;
import junit.framework.TestCase;
-import junit.framework.TestSuite;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
/**
* Entry point for tests.
@@ -27,51 +29,38 @@
* @version $Revision$ $Date$
*
* @author Stephen Colebourne
+ * @author Stephen Kestle
*/
-public class TestAll extends TestCase {
-
- public TestAll(String testName) {
- super(testName);
- }
-
- public static void main(String args[]) {
- String[] testCaseName = { TestAll.class.getName() };
- junit.textui.TestRunner.main(testCaseName);
- }
+@RunWith(Suite.class)
+@SuiteClasses({
+ TestCaseInsensitiveMap.class,
+ TestCompositeMap.class,
+ TestDefaultedMap.class,
+ TestFlat3Map.class,
+ TestHashedMap.class,
+ TestIdentityMap.class,
+ TestLinkedMap.class,
+ TestLRUMap.class,
+ TestMultiKeyMap.class,
+ TestReferenceMap.class,
+ TestReferenceIdentityMap.class,
+ TestStaticBucketMap.class,
+ TestSingletonMap.class,
- public static Test suite() {
- TestSuite suite = new TestSuite();
-
- suite.addTest(TestCaseInsensitiveMap.suite());
- suite.addTest(TestCompositeMap.suite());
- suite.addTest(TestDefaultedMap.suite());
- suite.addTest(TestFlat3Map.suite());
- suite.addTest(TestHashedMap.suite());
- suite.addTest(TestIdentityMap.suite());
- suite.addTest(TestLinkedMap.suite());
- suite.addTest(TestLRUMap.suite());
- suite.addTest(TestMultiKeyMap.suite());
- suite.addTest(TestReferenceMap.suite());
- suite.addTest(TestReferenceIdentityMap.suite());
- suite.addTest(TestStaticBucketMap.suite());
- suite.addTest(TestSingletonMap.suite());
-
- suite.addTest(TestFixedSizeMap.suite());
- suite.addTest(TestFixedSizeSortedMap.suite());
- suite.addTest(TestLazyMap.suite());
- suite.addTest(TestLazySortedMap.suite());
- suite.addTest(TestListOrderedMap.suite());
- suite.addTest(TestListOrderedMap2.suite());
- suite.addTest(TestMultiValueMap.suite());
- suite.addTest(TestPredicatedMap.suite());
- suite.addTest(TestPredicatedSortedMap.suite());
- suite.addTest(TestTransformedMap.suite());
- suite.addTest(TestTransformedSortedMap.suite());
- suite.addTest(TestUnmodifiableMap.suite());
- suite.addTest(TestUnmodifiableOrderedMap.suite());
- suite.addTest(TestUnmodifiableSortedMap.suite());
-
- return suite;
- }
-
+ TestFixedSizeMap.class,
+ TestFixedSizeSortedMap.class,
+ TestLazyMap.class,
+ TestLazySortedMap.class,
+ TestListOrderedMap.class,
+ TestListOrderedMap2.class,
+ TestMultiValueMap.class,
+ TestPredicatedMap.class,
+ TestPredicatedSortedMap.class,
+ TestTransformedMap.class,
+ TestTransformedSortedMap.class,
+ TestUnmodifiableMap.class,
+ TestUnmodifiableOrderedMap.class,
+ TestUnmodifiableSortedMap.class
+})
+public class TestAll extends TestCase {
}
Modified: commons/proper/collections/branches/collections_jdk5_branch/src/test/org/apache/commons/collections/map/TestLazyMap.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/branches/collections_jdk5 \
_branch/src/test/org/apache/commons/collections/map/TestLazyMap.java?rev=571381&r1=571380&r2=571381&view=diff
==============================================================================
--- commons/proper/collections/branches/collections_jdk5_branch/src/test/org/apache/commons/collections/map/TestLazyMap.java \
(original)
+++ commons/proper/collections/branches/collections_jdk5_branch/src/test/org/apache/commons/collections/map/TestLazyMap.java \
Thu Aug 30 22:13:56 2007 @@ -16,14 +16,15 @@
*/
package org.apache.commons.collections.map;
+import static org.apache.commons.collections.map.LazyMap.getLazyMap;
+
import java.util.HashMap;
import java.util.Map;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
import org.apache.commons.collections.Factory;
import org.apache.commons.collections.FactoryUtils;
+import org.apache.commons.collections.Transformer;
+import org.junit.Test;
/**
* Extension of {@link TestMap} for exercising the
@@ -36,55 +37,64 @@
*/
public class TestLazyMap extends AbstractTestMap {
- protected static final Factory oneFactory = FactoryUtils.constantFactory("One");
- protected static final Factory nullFactory = FactoryUtils.nullFactory();
+ private static final Factory<Integer> oneFactory = FactoryUtils.constantFactory(1);
+ private static final Factory<Object> nullFactory = FactoryUtils.nullFactory();
public TestLazyMap(String testName) {
super(testName);
}
- public static Test suite() {
- return new TestSuite(TestLazyMap.class);
- }
-
public static void main(String args[]) {
String[] testCaseName = { TestLazyMap.class.getName()};
junit.textui.TestRunner.main(testCaseName);
}
- //-----------------------------------------------------------------------
- protected Map decorateMap(Map map, Factory factory) {
- return LazyMap.decorate(map, factory);
+ @Override
+ public <K,V> Map<K,V> makeEmptyMap() {
+ return getLazyMap(new HashMap<K,V>(), FactoryUtils.<V>nullFactory());
}
- public Map makeEmptyMap() {
- return decorateMap(new HashMap(), nullFactory);
+ //-----------------------------------------------------------------------
+ @Override
+ public void testMapGet() {
+ //TODO eliminate need for this via superclass - see svn history.
}
- protected Map makeTestMap(Factory factory) {
- return decorateMap(new HashMap(), factory);
- }
-
- //-----------------------------------------------------------------------
- public void testMapGet() {
- Map map = makeTestMap(oneFactory);
+ @Test
+ public void mapGetWithFactory() {
+ Map<Integer, Number> map = getLazyMap(new HashMap<Integer,Number>(), \
oneFactory); assertEquals(0, map.size());
- String s1 = (String) map.get("Five");
- assertEquals("One", s1);
+ Number i1 = map.get("Five");
+ assertEquals(1, i1);
assertEquals(1, map.size());
- String s2 = (String) map.get(new String(new char[] {'F','i','v','e'}));
- assertEquals("One", s2);
+ Number i2 = map.get(new String(new char[] {'F','i','v','e'}));
+ assertEquals(1, i2);
assertEquals(1, map.size());
- assertSame(s1, s2);
+ assertSame(i1, i2);
- map = makeTestMap(nullFactory);
+ map = getLazyMap(new HashMap<Integer,Number>(), \
FactoryUtils.<Long>nullFactory()); Object o = map.get("Five");
assertEquals(null,o);
assertEquals(1, map.size());
-
}
- public String getCompatibilityVersion() {
+ @Test
+ public void mapGetWithTransformer() {
+ Transformer<Number, Integer> intConverter = new Transformer<Number, Integer>(){
+ public Integer transform(Number input) {
+ return input.intValue();
+ }
+ };
+ Map<Long, Number> map = getLazyMap(new HashMap<Long,Number>(), intConverter );
+ assertEquals(0, map.size());
+ Number i1 = map.get(123L);
+ assertEquals(123, i1);
+ assertEquals(1, map.size());
+ }
+
+
+ @Override
+ public String getCompatibilityVersion() {
return "3.1";
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic