Skip to content

Commit

Permalink
inline BeanManagerHelper in RuntimeBeanRepository apache#9
Browse files Browse the repository at this point in the history
  • Loading branch information
lburgazzoli committed Oct 5, 2019
1 parent aada775 commit b746f4c
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 98 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,18 @@
*/
package org.apache.camel.quarkus.core;

import java.lang.annotation.Annotation;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;

import io.quarkus.arc.Arc;
import io.quarkus.arc.ArcContainer;
import org.apache.camel.spi.BeanRepository;

public final class RuntimeBeanRepository implements BeanRepository {
Expand All @@ -29,16 +38,63 @@ public Object lookupByName(String name) {

@Override
public <T> T lookupByNameAndType(String name, Class<T> type) {
return BeanManagerHelper.getReferenceByName(name, type).orElse(null);
final ArcContainer container = Arc.container();
final BeanManager manager = container.beanManager();

return getReferenceByName(manager, name, type).orElse(null);
}

@Override
public <T> Map<String, T> findByTypeWithName(Class<T> type) {
return BeanManagerHelper.getReferencesByTypeWithName(type);
return getReferencesByTypeWithName(type);
}

@Override
public <T> Set<T> findByType(Class<T> type) {
return BeanManagerHelper.getReferencesByType(type);
final ArcContainer container = Arc.container();
final BeanManager manager = container.beanManager();

return getReferencesByType(manager, type);
}

private static <T> Map<String, T> getReferencesByTypeWithName(Class<T> type, Annotation... qualifiers) {
final ArcContainer container = Arc.container();
final BeanManager manager = container.beanManager();

return getReferencesByTypeWithName(manager, type, qualifiers);
}

private static <T> Set<T> getReferencesByType(BeanManager manager, Class<T> type, Annotation... qualifiers) {
Set<T> answer = new HashSet<>();

for (Bean<?> bean: manager.getBeans(type, qualifiers)) {
T ref = getReference(manager, type, bean);
if (ref != null) {
answer.add(ref);
}
}

return answer;
}

private static <T> Optional<T> getReferenceByName(BeanManager manager, String name, Class<T> type) {
return Optional.ofNullable(manager.resolve(manager.getBeans(name))).map(bean -> getReference(manager, type, bean));
}

private static <T> T getReference(BeanManager manager, Class<T> type, Bean<?> bean) {
return type.cast(manager.getReference(bean, type, manager.createCreationalContext(bean)));
}

private static <T> Map<String, T> getReferencesByTypeWithName(BeanManager manager, Class<T> type, Annotation... qualifiers) {
Map<String, T> answer = new HashMap<>();

for (Bean<?> bean: manager.getBeans(type, qualifiers)) {
T ref = getReference(manager, type, bean);
if (ref != null) {
answer.put(bean.getName(), ref);
}
}

return answer;
}
}

0 comments on commit b746f4c

Please sign in to comment.