You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xbean-scm@geronimo.apache.org by ga...@apache.org on 2009/04/29 19:52:32 UTC
svn commit: r769852 - in /geronimo/xbean/trunk/xbean-reflect/src:
main/java/org/apache/xbean/recipe/ test/java/org/apache/xbean/recipe/
Author: gawor
Date: Wed Apr 29 17:52:32 2009
New Revision: 769852
URL: http://svn.apache.org/viewvc?rev=769852&view=rev
Log:
bunch more MapRecipe and CollectionRecipe tests and fixes
Modified:
geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/CollectionRecipe.java
geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/MapRecipe.java
geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/CollectionRecipeTest.java
geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/MapRecipeTest.java
Modified: geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/CollectionRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/CollectionRecipe.java?rev=769852&r1=769851&r2=769852&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/CollectionRecipe.java (original)
+++ geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/CollectionRecipe.java Wed Apr 29 17:52:32 2009
@@ -20,9 +20,11 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Dictionary;
import java.util.EnumSet;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
@@ -47,8 +49,6 @@
public CollectionRecipe(Class type) {
if (type == null) throw new NullPointerException("type is null");
- if (!RecipeHelper.hasDefaultConstructor(type)) throw new IllegalArgumentException("Collection type does not have a default constructor " + type);
-
this.list = new ArrayList<Object>();
this.typeClass = type;
}
@@ -168,9 +168,8 @@
private Class getType(Type expectedType) {
Class expectedClass = RecipeHelper.toClass(expectedType);
- Class type = expectedClass;
if (typeClass != null || typeName != null) {
- type = typeClass;
+ Class type = typeClass;
if (type == null) {
try {
type = RecipeHelper.loadClass(typeName);
@@ -181,25 +180,31 @@
// if expectedType is a subclass of the assigned type,
// we use it assuming it has a default constructor
- if (type.isAssignableFrom(expectedClass) && RecipeHelper.hasDefaultConstructor(expectedClass)) {
- type = expectedClass;
+ if (type.isAssignableFrom(expectedClass)) {
+ return getCollection(expectedClass);
+ } else {
+ return getCollection(type);
}
}
-
+
// no type explicitly set
+ return getCollection(expectedClass);
+ }
+
+ private Class getCollection(Class type) {
if (RecipeHelper.hasDefaultConstructor(type)) {
return type;
- } else if (SortedSet.class.isAssignableFrom(expectedClass)) {
+ } else if (SortedSet.class.isAssignableFrom(type)) {
return TreeSet.class;
- } else if (Set.class.isAssignableFrom(expectedClass)) {
+ } else if (Set.class.isAssignableFrom(type)) {
return LinkedHashSet.class;
- } else if (List.class.isAssignableFrom(expectedClass)) {
+ } else if (List.class.isAssignableFrom(type)) {
return ArrayList.class;
} else {
return ArrayList.class;
}
}
-
+
public void add(Object value) {
list.add(value);
}
Modified: geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/MapRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/MapRecipe.java?rev=769852&r1=769851&r2=769852&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/MapRecipe.java (original)
+++ geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/MapRecipe.java Wed Apr 29 17:52:32 2009
@@ -51,8 +51,8 @@
}
public MapRecipe(Class type) {
+ if (type == null) throw new NullPointerException("type is null");
this.typeClass = type;
- if (!RecipeHelper.hasDefaultConstructor(type)) throw new IllegalArgumentException("Type does not have a default constructor " + type);
entries = new ArrayList<Object[]>();
}
@@ -203,24 +203,29 @@
// if expectedType is a subclass of the assigned type,
// we use it assuming it has a default constructor
- if (expectedClass.isAssignableFrom(type) && RecipeHelper.hasDefaultConstructor(type)) {
- return type;
+ if (type.isAssignableFrom(expectedClass)) {
+ return getMap(expectedClass);
+ } else {
+ return getMap(type);
}
}
// no type explicitly set
- if (RecipeHelper.hasDefaultConstructor(expectedClass)) {
- return expectedClass;
- } else if (SortedMap.class.isAssignableFrom(expectedClass)) {
+ return getMap(expectedClass);
+ }
+
+ private Class getMap(Class type) {
+ if (RecipeHelper.hasDefaultConstructor(type)) {
+ return type;
+ } else if (SortedMap.class.isAssignableFrom(type)) {
return TreeMap.class;
- } else if (ConcurrentMap.class.isAssignableFrom(expectedClass)) {
+ } else if (ConcurrentMap.class.isAssignableFrom(type)) {
return ConcurrentHashMap.class;
} else {
return LinkedHashMap.class;
}
}
-
public void put(Object key, Object value) {
if (key == null) throw new NullPointerException("key is null");
entries.add(new Object[] { key, value});
Modified: geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/CollectionRecipeTest.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/CollectionRecipeTest.java?rev=769852&r1=769851&r2=769852&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/CollectionRecipeTest.java (original)
+++ geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/CollectionRecipeTest.java Wed Apr 29 17:52:32 2009
@@ -16,7 +16,9 @@
*/
package org.apache.xbean.recipe;
+import java.net.URI;
import java.util.ArrayList;
+import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
@@ -24,6 +26,7 @@
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
+import java.util.Vector;
import junit.framework.TestCase;
@@ -43,4 +46,42 @@
assertEquals(TreeSet.class, new CollectionRecipe().create(SortedSet.class, false).getClass());
assertEquals(HashSet.class, new CollectionRecipe().create(HashSet.class, false).getClass());
}
+
+ public void testListRecipe() throws Exception {
+ CollectionRecipe recipe = new CollectionRecipe(List.class);
+ assertEquals(ArrayList.class, recipe.create(List.class, false).getClass());
+ assertEquals(ArrayList.class, recipe.create(ArrayList.class, false).getClass());
+ assertEquals(LinkedList.class, recipe.create(LinkedList.class, false).getClass());
+ assertEquals(Vector.class, recipe.create(Vector.class, false).getClass());
+
+ assertTrue(recipe.canCreate(List.class));
+ assertTrue(recipe.canCreate(ArrayList.class));
+ assertTrue(recipe.canCreate(LinkedList.class));
+ assertTrue(recipe.canCreate(Vector.class));
+ assertTrue(recipe.canCreate(Object.class));
+
+ assertFalse(recipe.canCreate(Date.class));
+ assertFalse(recipe.canCreate(URI.class));
+
+ assertFalse(recipe.canCreate(Set.class));
+ }
+
+ public void testSetRecipe() throws Exception {
+ CollectionRecipe recipe = new CollectionRecipe(Set.class);
+ assertEquals(LinkedHashSet.class, recipe.create(Set.class, false).getClass());
+ assertEquals(HashSet.class, recipe.create(HashSet.class, false).getClass());
+ assertEquals(TreeSet.class, recipe.create(SortedSet.class, false).getClass());
+ assertEquals(TreeSet.class, recipe.create(TreeSet.class, false).getClass());
+
+ assertTrue(recipe.canCreate(Set.class));
+ assertTrue(recipe.canCreate(HashSet.class));
+ assertTrue(recipe.canCreate(SortedSet.class));
+ assertTrue(recipe.canCreate(TreeSet.class));
+ assertTrue(recipe.canCreate(Object.class));
+
+ assertFalse(recipe.canCreate(Date.class));
+ assertFalse(recipe.canCreate(URI.class));
+
+ assertFalse(recipe.canCreate(List.class));
+ }
}
Modified: geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/MapRecipeTest.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/MapRecipeTest.java?rev=769852&r1=769851&r2=769852&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/MapRecipeTest.java (original)
+++ geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/MapRecipeTest.java Wed Apr 29 17:52:32 2009
@@ -16,6 +16,9 @@
*/
package org.apache.xbean.recipe;
+import java.net.URI;
+import java.util.Date;
+import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.SortedMap;
@@ -37,4 +40,26 @@
assertEquals(ConcurrentHashMap.class, new MapRecipe().create(ConcurrentMap.class, false).getClass());
assertEquals(HashMap.class, new MapRecipe(HashMap.class).create(Map.class, false).getClass());
}
+
+ public void testRecipe() throws Exception {
+ MapRecipe recipe = new MapRecipe(Map.class);
+ assertEquals(LinkedHashMap.class, recipe.create(Map.class, false).getClass());
+ assertEquals(ConcurrentHashMap.class, recipe.create(ConcurrentMap.class, false).getClass());
+ assertEquals(ConcurrentHashMap.class, recipe.create(ConcurrentHashMap.class, false).getClass());
+ assertEquals(TreeMap.class, recipe.create(SortedMap.class, false).getClass());
+ assertEquals(LinkedHashMap.class, recipe.create(LinkedHashMap.class, false).getClass());
+ assertEquals(Hashtable.class, recipe.create(Hashtable.class, false).getClass());
+ assertEquals(LinkedHashMap.class, recipe.create(Object.class, false).getClass());
+
+ assertTrue(recipe.canCreate(Map.class));
+ assertTrue(recipe.canCreate(ConcurrentMap.class));
+ assertTrue(recipe.canCreate(SortedMap.class));
+ assertTrue(recipe.canCreate(TreeMap.class));
+ assertTrue(recipe.canCreate(LinkedHashMap.class));
+ assertTrue(recipe.canCreate(Hashtable.class));
+ assertTrue(recipe.canCreate(Object.class));
+
+ assertFalse(recipe.canCreate(Date.class));
+ assertFalse(recipe.canCreate(URI.class));
+ }
}