You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2016/04/20 12:30:16 UTC
[1/2] camel git commit: Camel CDI: better Camel primitives producer
methods decoration
Repository: camel
Updated Branches:
refs/heads/master 8004521f8 -> b3a800e85
Camel CDI: better Camel primitives producer methods decoration
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b3a800e8
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b3a800e8
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b3a800e8
Branch: refs/heads/master
Commit: b3a800e856a0b85f398528c61823f6b0a6ca1d9e
Parents: 0fb5015
Author: Antonin Stefanutti <an...@stefanutti.fr>
Authored: Wed Apr 20 12:29:19 2016 +0200
Committer: Antonin Stefanutti <an...@stefanutti.fr>
Committed: Wed Apr 20 12:30:08 2016 +0200
----------------------------------------------------------------------
.../java/org/apache/camel/cdi/BeanDelegate.java | 11 ++++--
.../org/apache/camel/cdi/CdiCamelExtension.java | 38 ++++++++++----------
.../java/org/apache/camel/cdi/CdiSpiHelper.java | 18 ----------
3 files changed, 26 insertions(+), 41 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/b3a800e8/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanDelegate.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanDelegate.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanDelegate.java
index 9b5fab1..781c9a5 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanDelegate.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanDelegate.java
@@ -19,6 +19,7 @@ package org.apache.camel.cdi;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.Collections;
+import java.util.HashSet;
import java.util.Set;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
@@ -30,9 +31,13 @@ final class BeanDelegate<T> implements Bean<T> {
private final Set<Annotation> qualifiers;
- BeanDelegate(Bean<T> delegate, Set<? extends Annotation> qualifiers) {
+ @SafeVarargs
+ BeanDelegate(Bean<T> delegate, Set<? extends Annotation>... sets) {
this.delegate = delegate;
- this.qualifiers = Collections.unmodifiableSet(qualifiers);
+ this.qualifiers = new HashSet<>();
+ for (Set<? extends Annotation> set : sets) {
+ this.qualifiers.addAll(set);
+ }
}
@Override
@@ -42,7 +47,7 @@ final class BeanDelegate<T> implements Bean<T> {
@Override
public Set<Annotation> getQualifiers() {
- return qualifiers;
+ return Collections.unmodifiableSet(qualifiers);
}
@Override
http://git-wip-us.apache.org/repos/asf/camel/blob/b3a800e8/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
index 5b02425..6808a43 100755
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
@@ -28,9 +28,11 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import static java.util.Collections.newSetFromMap;
+
import javax.enterprise.event.Observes;
import javax.enterprise.inject.Default;
import javax.enterprise.inject.InjectionException;
@@ -76,10 +78,10 @@ import static org.apache.camel.cdi.AnyLiteral.ANY;
import static org.apache.camel.cdi.ApplicationScopedLiteral.APPLICATION_SCOPED;
import static org.apache.camel.cdi.BeanManagerHelper.getReference;
import static org.apache.camel.cdi.BeanManagerHelper.getReferencesByType;
-import static org.apache.camel.cdi.CdiSpiHelper.excludeElementOfTypes;
import static org.apache.camel.cdi.CdiSpiHelper.getQualifiers;
import static org.apache.camel.cdi.CdiSpiHelper.getRawType;
import static org.apache.camel.cdi.CdiSpiHelper.hasAnnotation;
+import static org.apache.camel.cdi.CdiSpiHelper.isAnnotationType;
import static org.apache.camel.cdi.DefaultLiteral.DEFAULT;
import static org.apache.camel.cdi.Excluded.EXCLUDED;
import static org.apache.camel.cdi.Startup.Literal.STARTUP;
@@ -299,25 +301,21 @@ public class CdiCamelExtension implements Extension {
// Finally add the beans to the deployment
beans.forEach(abd::addBean);
- // Then update the Camel producer beans
- for (Map.Entry<Method, Bean<?>> producer : producerBeans.entrySet()) {
- Bean<?> bean = producer.getValue();
- Set<Annotation> qualifiers = new HashSet<>(producerQualifiers.get(producer.getKey()));
- Class<?> type = producer.getKey().getReturnType();
- if (CdiEventEndpoint.class.equals(type)) {
- for (InjectionPoint ip : cdiEventEndpoints.keySet()) {
- qualifiers.addAll(ip.getQualifiers());
- }
- } else {
- if (Endpoint.class.isAssignableFrom(type)
- || ConsumerTemplate.class.equals(type)
- || ProducerTemplate.class.equals(type)) {
- qualifiers.addAll(excludeElementOfTypes(contextQualifiers, Default.class, Named.class));
- }
- }
- // TODO: would be more correct to add a bean for each Camel context bean
- abd.addBean(new BeanDelegate<>(bean, qualifiers));
- }
+ // Update the CDI Camel factory beans
+ Set<Annotation> endpointQualifiers = cdiEventEndpoints.keySet().stream()
+ .flatMap(ip -> ip.getQualifiers().stream())
+ .collect(Collectors.toSet());
+ Set<Annotation> templateQualifiers = contextQualifiers.stream()
+ .filter(isAnnotationType(Default.class).or(isAnnotationType(Named.class)).negate())
+ .collect(Collectors.toSet());
+ // TODO: would be more correct to add a bean for each Camel context bean
+ producerBeans.entrySet().stream()
+ .map(producer -> new BeanDelegate<>(producer.getValue(),
+ producerQualifiers.get(producer.getKey()),
+ CdiEventEndpoint.class.equals(producer.getKey().getReturnType())
+ ? endpointQualifiers
+ : templateQualifiers))
+ .forEach(abd::addBean);
// Add CDI event endpoint observer methods
for (ObserverMethod method : cdiEventEndpoints.values()) {
http://git-wip-us.apache.org/repos/asf/camel/blob/b3a800e8/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
index 44e2b67..8abd50f 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
@@ -68,24 +68,6 @@ final class CdiSpiHelper {
return null;
}
- @SafeVarargs
- static <T> Set<T> excludeElementOfTypes(Set<T> annotations, Class<? extends T>... exclusions) {
- Set<T> set = new HashSet<>();
- for (T annotation : annotations) {
- boolean exclude = false;
- for (Class<? extends T> exclusion : exclusions) {
- if (exclusion.isAssignableFrom(annotation.getClass())) {
- exclude = true;
- break;
- }
- }
- if (!exclude) {
- set.add(annotation);
- }
- }
- return set;
- }
-
static Predicate<Annotation> isAnnotationType(Class<? extends Annotation> clazz) {
Objects.requireNonNull(clazz);
return annotation -> clazz.equals(annotation.annotationType());
[2/2] camel git commit: Camel CDI: annotation type predicate
Posted by as...@apache.org.
Camel CDI: annotation type predicate
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/0fb50157
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/0fb50157
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/0fb50157
Branch: refs/heads/master
Commit: 0fb50157c52589ed56c7ec2451d7a2984eff0c1f
Parents: 8004521
Author: Antonin Stefanutti <an...@stefanutti.fr>
Authored: Wed Apr 20 11:23:58 2016 +0200
Committer: Antonin Stefanutti <an...@stefanutti.fr>
Committed: Wed Apr 20 12:30:08 2016 +0200
----------------------------------------------------------------------
.../org/apache/camel/cdi/AnnotatedDelegate.java | 22 ++++++++++++--------
.../apache/camel/cdi/CamelContextProducer.java | 7 ++++++-
.../java/org/apache/camel/cdi/CdiSpiHelper.java | 7 +++++++
.../apache/camel/cdi/SyntheticAnnotated.java | 6 ++++--
.../camel/cdi/SyntheticBeanAttributes.java | 4 +++-
5 files changed, 33 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/0fb50157/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedDelegate.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedDelegate.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedDelegate.java
index ccd4989..c9c9777 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedDelegate.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedDelegate.java
@@ -22,6 +22,8 @@ import java.util.HashSet;
import java.util.Set;
import javax.enterprise.inject.spi.Annotated;
+import static org.apache.camel.cdi.CdiSpiHelper.isAnnotationType;
+
class AnnotatedDelegate implements Annotated {
private final Annotated delegate;
@@ -39,13 +41,12 @@ class AnnotatedDelegate implements Annotated {
}
@Override
- public <T extends Annotation> T getAnnotation(Class<T> annotationType) {
- for (Annotation annotation : annotations) {
- if (annotation.annotationType().equals(annotationType)) {
- return annotationType.cast(annotation);
- }
- }
- return null;
+ public <T extends Annotation> T getAnnotation(Class<T> type) {
+ return annotations.stream()
+ .filter(isAnnotationType(type))
+ .findAny()
+ .map(type::cast)
+ .orElse(null);
}
@Override
@@ -64,8 +65,11 @@ class AnnotatedDelegate implements Annotated {
}
@Override
- public boolean isAnnotationPresent(Class<? extends Annotation> annotationType) {
- return getAnnotation(annotationType) != null;
+ public boolean isAnnotationPresent(Class<? extends Annotation> type) {
+ return annotations.stream()
+ .filter(isAnnotationType(type))
+ .findAny()
+ .isPresent();
}
@Override
http://git-wip-us.apache.org/repos/asf/camel/blob/0fb50157/components/camel-cdi/src/main/java/org/apache/camel/cdi/CamelContextProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CamelContextProducer.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CamelContextProducer.java
index 03602da..ac226f1 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CamelContextProducer.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CamelContextProducer.java
@@ -19,6 +19,7 @@ package org.apache.camel.cdi;
import java.beans.Introspector;
import java.lang.annotation.Annotation;
import java.util.Set;
+import java.util.stream.Collectors;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.InjectionException;
import javax.enterprise.inject.spi.Annotated;
@@ -38,6 +39,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.camel.cdi.AnyLiteral.ANY;
+import static org.apache.camel.cdi.CdiSpiHelper.isAnnotationType;
import static org.apache.camel.cdi.DefaultLiteral.DEFAULT;
final class CamelContextProducer<T extends CamelContext> extends DelegateProducer<T> {
@@ -77,7 +79,10 @@ final class CamelContextProducer<T extends CamelContext> extends DelegateProduce
}
// Add event notifier if at least one observer is present
- Set<Annotation> qualifiers = CdiSpiHelper.excludeElementOfTypes(CdiSpiHelper.getQualifiers(annotated, manager), Named.class);
+ Set<Annotation> qualifiers = annotated.getAnnotations().stream()
+ .filter(isAnnotationType(Named.class).negate()
+ .and(q -> manager.isQualifier(q.annotationType())))
+ .collect(Collectors.toSet());
qualifiers.add(ANY);
if (qualifiers.size() == 1) {
qualifiers.add(DEFAULT);
http://git-wip-us.apache.org/repos/asf/camel/blob/0fb50157/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
index 341fefa..44e2b67 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
@@ -29,8 +29,10 @@ import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Collection;
import java.util.HashSet;
+import java.util.Objects;
import java.util.Set;
import java.util.StringJoiner;
+import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.enterprise.inject.spi.Annotated;
@@ -84,6 +86,11 @@ final class CdiSpiHelper {
return set;
}
+ static Predicate<Annotation> isAnnotationType(Class<? extends Annotation> clazz) {
+ Objects.requireNonNull(clazz);
+ return annotation -> clazz.equals(annotation.annotationType());
+ }
+
static Class<?> getRawType(Type type) {
if (type instanceof Class<?>) {
return Class.class.cast(type);
http://git-wip-us.apache.org/repos/asf/camel/blob/0fb50157/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticAnnotated.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticAnnotated.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticAnnotated.java
index 803e41c..1c7f00a 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticAnnotated.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticAnnotated.java
@@ -25,6 +25,8 @@ import java.util.HashSet;
import java.util.Set;
import javax.enterprise.inject.spi.Annotated;
+import static org.apache.camel.cdi.CdiSpiHelper.isAnnotationType;
+
@Vetoed
final class SyntheticAnnotated implements Annotated {
@@ -66,7 +68,7 @@ final class SyntheticAnnotated implements Annotated {
@Override
public <T extends Annotation> T getAnnotation(Class<T> type) {
return annotations.stream()
- .filter(a -> a.annotationType().equals(type))
+ .filter(isAnnotationType(type))
.findAny()
.map(type::cast)
.orElse(null);
@@ -75,7 +77,7 @@ final class SyntheticAnnotated implements Annotated {
@Override
public boolean isAnnotationPresent(Class<? extends Annotation> type) {
return annotations.stream()
- .filter(a -> a.annotationType().equals(type))
+ .filter(isAnnotationType(type))
.findAny()
.isPresent();
}
http://git-wip-us.apache.org/repos/asf/camel/blob/0fb50157/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBeanAttributes.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBeanAttributes.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBeanAttributes.java
index f59caf1..e6f407c 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBeanAttributes.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBeanAttributes.java
@@ -25,6 +25,8 @@ import javax.enterprise.context.Dependent;
import javax.enterprise.inject.spi.BeanManager;
import javax.inject.Named;
+import static org.apache.camel.cdi.CdiSpiHelper.isAnnotationType;
+
class SyntheticBeanAttributes<T> {
private final BeanManager manager;
@@ -56,7 +58,7 @@ class SyntheticBeanAttributes<T> {
public String getName() {
return annotated.getAnnotations().stream()
- .filter(a -> Named.class.equals(a.annotationType()))
+ .filter(isAnnotationType(Named.class))
.map(Named.class::cast)
.map(Named::value)
.findFirst()