You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2012/04/11 17:50:06 UTC
[2/2] git commit: DELTASPIKE-151 BeanProvider - additional helper
methods
DELTASPIKE-151 BeanProvider - additional helper methods
also needed for DELTASPIKE-158
Project: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/commit/5c2c282e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/tree/5c2c282e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/diff/5c2c282e
Branch: refs/heads/master
Commit: 5c2c282e72140f8e5aa58fcc05c701c151b54d5f
Parents: 06eca2e
Author: gpetracek <gp...@apache.org>
Authored: Wed Apr 11 17:41:27 2012 +0200
Committer: gpetracek <gp...@apache.org>
Committed: Wed Apr 11 17:41:27 2012 +0200
----------------------------------------------------------------------
.../deltaspike/core/api/provider/BeanProvider.java | 70 +++++++++++++--
1 files changed, 63 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/5c2c282e/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java
index 2b9224d..ff11e79 100644
--- a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java
+++ b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java
@@ -181,6 +181,25 @@ public final class BeanProvider
}
/**
+ * <p>Get the Contextual Reference for the given bean
+ *
+ * @param type the type of the bean in question
+ * @param bean bean-definition for the contextual-reference
+ * @param <T> target type
+ * @return the resolved Contextual Reference
+ */
+ public static <T> T getContextualReference(Class<T> type, Bean<T> bean)
+ {
+ return getContextualReference(type, getBeanManager(), bean);
+ }
+
+ private static <T> T getContextualReference(Class<T> type, BeanManager beanManager, Bean<?> bean)
+ {
+ //noinspection unchecked
+ return getContextualReference(type, beanManager, new HashSet<Bean<?>>((Collection) Arrays.asList(bean)));
+ }
+
+ /**
* <p>Get a list of Contextual References by it's type independent of the qualifier
* (including dependent scoped beans).
*
@@ -219,13 +238,50 @@ public final class BeanProvider
boolean includeDefaultScopedBeans)
{
BeanManager beanManager = getBeanManager();
+
+ Set<Bean<T>> beans = getBeanDefinitions(type, optional, includeDefaultScopedBeans, beanManager);
+
+ List<T> result = new ArrayList<T>(beans.size());
+
+ for (Bean<?> bean : beans)
+ {
+ //noinspection unchecked
+ result.add(getContextualReference(type, beanManager, bean));
+ }
+ return result;
+ }
+
+ /**
+ * <p>Get a set of {@link Bean} definitions by it's type independent of the qualifier.
+ *
+ * @param type the type of the bean in question
+ * @param optional if <code>true</code> it will return an empty set if no bean could be found or created.
+ * Otherwise it will throw an {@code IllegalStateException}
+ * @param includeDefaultScopedBeans specifies if dependent scoped beans should be included in the in the result
+ * @param <T> target type
+ * @return the resolved set of {@link Bean} definitions or an empty-set if optional is true
+ */
+ public static <T> Set<Bean<T>> getBeanDefinitions(Class<T> type,
+ boolean optional,
+ boolean includeDefaultScopedBeans)
+ {
+ BeanManager beanManager = getBeanManager();
+
+ return getBeanDefinitions(type, optional, includeDefaultScopedBeans, beanManager);
+ }
+
+ private static <T> Set<Bean<T>> getBeanDefinitions(Class<T> type,
+ boolean optional,
+ boolean includeDefaultScopedBeans,
+ BeanManager beanManager)
+ {
Set<Bean<?>> beans = beanManager.getBeans(type, new AnyLiteral());
if (beans == null || beans.isEmpty())
{
if (optional)
{
- return Collections.emptyList();
+ return Collections.emptySet();
}
throw new IllegalStateException("Could not find beans for Type=" + type);
@@ -235,18 +291,18 @@ public final class BeanProvider
{
beans = filterDefaultScopedBeans(beans);
}
-
- List<T> result = new ArrayList<T>(beans.size());
-
+
+ Set<Bean<T>> result = new HashSet<Bean<T>>();
+
for (Bean<?> bean : beans)
{
//noinspection unchecked
- result.add(getContextualReference(type, beanManager,
- new HashSet<Bean<?>>((Collection) Arrays.asList(bean))));
+ result.add((Bean<T>) bean);
}
+
return result;
}
-
+
/**
* Allows to perform dependency injection for instances which aren't managed by CDI
* <p/>