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<>(); }