package com.lambdaworks.redis.support;
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.ApplicationScoped;
import javax.enterprise.inject.Stereotype;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.InjectionPoint;
import com.lambdaworks.redis.RedisURI;
import com.lambdaworks.redis.resource.ClientResources;
/**
* @author Mark Paluch
* @since 3.0
*/
abstract class AbstractCdiBean<T> implements Bean<T> {
protected final Bean<RedisURI> redisURIBean;
protected final Bean<ClientResources> clientResourcesBean;
protected final BeanManager beanManager;
protected final Set<Annotation> qualifiers;
protected final String name;
public AbstractCdiBean(Bean<RedisURI> redisURIBean, Bean<ClientResources> clientResourcesBean, BeanManager beanManager,
Set<Annotation> qualifiers, String name) {
this.redisURIBean = redisURIBean;
this.clientResourcesBean = clientResourcesBean;
this.beanManager = beanManager;
this.qualifiers = qualifiers;
this.name = name;
}
@Override
@SuppressWarnings("unchecked")
public Set<Type> getTypes() {
return Collections.singleton(getBeanClass());
}
@Override
public Set<Annotation> getQualifiers() {
return qualifiers;
}
@Override
public String getName() {
return name;
}
@Override
public Class<? extends Annotation> getScope() {
return ApplicationScoped.class;
}
@Override
public Set<Class<? extends Annotation>> getStereotypes() {
Set<Class<? extends Annotation>> stereotypes = new HashSet<>();
for (Annotation annotation : getQualifiers()) {
Class<? extends Annotation> annotationType = annotation.annotationType();
if (annotationType.isAnnotationPresent(Stereotype.class)) {
stereotypes.add(annotationType);
}
}
return stereotypes;
}
@Override
public boolean isAlternative() {
return false;
}
@Override
public boolean isNullable() {
return false;
}
@Override
public Set<InjectionPoint> getInjectionPoints() {
return Collections.emptySet();
}
}