Repository: wicket
Updated Branches:
  refs/heads/master 95d265769 -> dd54298ce


WICKET-5808 SpringBean, support generic beans. Improved tests.


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/dd54298c
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/dd54298c
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/dd54298c

Branch: refs/heads/master
Commit: dd54298ce5e385cbfa3165975bdae2c68600e732
Parents: 95d2657
Author: Andrea Del Bene <adelb...@apache.org>
Authored: Fri Jan 23 18:47:33 2015 +0100
Committer: Andrea Del Bene <adelb...@apache.org>
Committed: Fri Jan 23 18:49:08 2015 +0100

----------------------------------------------------------------------
 .../apache/wicket/spring/SpringBeanLocator.java | 28 +++++++++++++-
 .../annot/SpringBeanWithGenericsTest.java       | 39 ++++++++++++++++++--
 2 files changed, 63 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/dd54298c/wicket-spring/src/main/java/org/apache/wicket/spring/SpringBeanLocator.java
----------------------------------------------------------------------
diff --git 
a/wicket-spring/src/main/java/org/apache/wicket/spring/SpringBeanLocator.java 
b/wicket-spring/src/main/java/org/apache/wicket/spring/SpringBeanLocator.java
index 49ba4fd..1f51ef9 100644
--- 
a/wicket-spring/src/main/java/org/apache/wicket/spring/SpringBeanLocator.java
+++ 
b/wicket-spring/src/main/java/org/apache/wicket/spring/SpringBeanLocator.java
@@ -22,6 +22,8 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.apache.wicket.core.util.lang.WicketObjects;
 import org.apache.wicket.proxy.IProxyTargetLocator;
@@ -129,9 +131,33 @@ public class SpringBeanLocator implements 
IProxyTargetLocator
                {
                        fieldName = beanField.getName();
                        fieldResolvableType = 
ResolvableType.forField(beanField);
-                       fieldElementsResolvableType = 
fieldResolvableType.getGeneric();
+                       fieldElementsResolvableType = 
extractElementGeneric(fieldResolvableType);
                }
        }
+       
+       /**
+        * If the field type is a collection (Map, Set or List) extracts type 
+        * informations about its elements.
+        * 
+        * @param fieldResolvableType
+        *                              the resolvable type of the field
+        * @return the resolvable type of elements of the field, if any.
+        */
+       private ResolvableType extractElementGeneric(ResolvableType 
fieldResolvableType)
+       {
+               Class<?> clazz = fieldResolvableType.resolve();
+               
+               if (clazz == Set.class || clazz == List.class)
+               {
+                       return fieldResolvableType.getGeneric();
+               } 
+               else if (clazz == Map.class) 
+               {
+                       return fieldResolvableType.getGeneric(1);               
        
+               }
+               
+               return null;
+       }
 
        /**
         * @return returns whether the bean (the locator is supposed to 
istantiate) is a singleton or

http://git-wip-us.apache.org/repos/asf/wicket/blob/dd54298c/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/SpringBeanWithGenericsTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/SpringBeanWithGenericsTest.java
 
b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/SpringBeanWithGenericsTest.java
index ba657ea..ed105e9 100644
--- 
a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/SpringBeanWithGenericsTest.java
+++ 
b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/SpringBeanWithGenericsTest.java
@@ -18,6 +18,7 @@ package org.apache.wicket.spring.injection.annot;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.wicket.spring.BeanWithGeneric;
 import org.apache.wicket.util.tester.DummyHomePage;
@@ -67,8 +68,29 @@ public class SpringBeanWithGenericsTest extends Assert
                AnnotatedListOfBeanGenericQualifier page = 
                        tester.startPage(new 
AnnotatedListOfBeanGenericQualifier());
 
-               assertNotNull(page.getBeans());
-               assertEquals(2, page.getBeans().size());
+               List<BeanWithGeneric<?>> beans = page.getBeans();
+               
+               assertNotNull(beans);
+               assertEquals(2, beans.size());
+               
+               assertTrue(beans.contains(ctx.getBean("stringBean")));
+               assertTrue(beans.contains(ctx.getBean("integerBean")));
+       }
+       
+       @Test
+       public void mapOfGenerics() throws Exception
+       {
+               AnnotatedMapOfBeanGenericQualifier page = 
+                       tester.startPage(new 
AnnotatedMapOfBeanGenericQualifier());
+
+               Map<String, BeanWithGeneric<?>> beans = page.getBeans();
+               
+               assertNotNull(beans);
+               assertEquals(2, beans.size());
+               
+               assertTrue(beans.containsKey("stringBean"));
+               assertTrue(beans.containsKey("integerBean"));
+               
        }
        
        @Test
@@ -113,6 +135,17 @@ public class SpringBeanWithGenericsTest extends Assert
                }
        }
        
+       class AnnotatedMapOfBeanGenericQualifier extends DummyHomePage
+       {
+               @SpringBean
+               private Map<String, BeanWithGeneric<?>> beans;
+
+               public Map<String, BeanWithGeneric<?>> getBeans()
+               {
+                       return beans;
+               }
+       }
+       
        class AnnotatedListOfBeanTypeQualifier extends DummyHomePage
        {
                @SpringBean
@@ -145,7 +178,7 @@ public class SpringBeanWithGenericsTest extends Assert
                }
 
                @Bean
-               public BeanWithGeneric<Integer> nestedBean()
+               public BeanWithGeneric<Integer> integerBean()
                {
                        return new BeanWithGeneric<>();
                }

Reply via email to