Skip to content

Commit

Permalink
Camel producers instrumentation refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
astefanutti committed Jan 25, 2016
1 parent 20eb55d commit 9431fef
Showing 1 changed file with 9 additions and 16 deletions.
25 changes: 9 additions & 16 deletions impl/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
Original file line number Diff line number Diff line change
Expand Up @@ -203,24 +203,17 @@ private void afterBeanDiscovery(@Observes AfterBeanDiscovery abd, BeanManager ma
abd.addBean(camelContextBean(manager, ANY, DEFAULT));

// Update the CDI Camel factory beans
Set<Annotation> endpointQualifiers = cdiEventEndpoints.keySet().stream()
.flatMap(ip -> ip.getQualifiers().stream())
.collect(Collectors.toSet());
Set<Annotation> producerQualifiers = contextQualifiers.stream()
.filter(qualifier -> !Arrays.asList(Any.class, Default.class, Named.class).contains(qualifier.annotationType()))
.filter(q -> !Arrays.asList(Any.class, Default.class, Named.class).contains(q.annotationType()))
.collect(Collectors.toSet());
Bean<CdiCamelFactory> bean = (Bean<CdiCamelFactory>) manager.resolve(manager.getBeans(CdiCamelFactory.class));
for (AnnotatedMethod<? super CdiCamelFactory> am : abd.getAnnotatedType(CdiCamelFactory.class, null).getMethods()) {
if (!am.isAnnotationPresent(Produces.class))
continue;
// TODO: would be more correct to add a bean for each Camel context bean
Class<?> type = CdiSpiHelper.getRawType(am.getBaseType());
if (CdiEventEndpoint.class.equals(type)) {
Set<Annotation> qualifiers = new HashSet<>();
for (InjectionPoint ip : cdiEventEndpoints.keySet())
qualifiers.addAll(ip.getQualifiers());
abd.addBean(manager.createBean(new BeanAttributesDecorator<>(manager.createBeanAttributes(am), qualifiers), CdiCamelFactory.class, manager.getProducerFactory(am, bean)));
} else if (Endpoint.class.isAssignableFrom(type) || ProducerTemplate.class.isAssignableFrom(type)) {
abd.addBean(manager.createBean(new BeanAttributesDecorator<>(manager.createBeanAttributes(am), producerQualifiers), CdiCamelFactory.class, manager.getProducerFactory(am, bean)));
}
}
// TODO: would be more correct to add a bean for each Camel context bean
abd.getAnnotatedType(CdiCamelFactory.class, null).getMethods().stream()
.filter(am -> am.isAnnotationPresent(Produces.class) && (am.getTypeClosure().contains(Endpoint.class) || am.getTypeClosure().contains(ProducerTemplate.class)))
.map(am -> manager.createBean(new BeanAttributesDecorator<>(manager.createBeanAttributes(am), CdiEventEndpoint.class.equals(CdiSpiHelper.getRawType(am.getBaseType())) ? endpointQualifiers : producerQualifiers), CdiCamelFactory.class, manager.getProducerFactory(am, (Bean<CdiCamelFactory>) manager.resolve(manager.getBeans(CdiCamelFactory.class)))))
.forEach(abd::addBean);

// Add CDI event endpoint observer methods
cdiEventEndpoints.values().forEach(abd::addObserverMethod);
Expand Down

0 comments on commit 9431fef

Please sign in to comment.