package org.jboss.capedwarf.server.api.env;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.Extension;
import javax.enterprise.inject.spi.ProcessAnnotatedType;
import javax.transaction.UserTransaction;
import javax.validation.ValidatorFactory;
import java.util.HashSet;
import java.util.Set;
/**
* CapeDwarf Green GAE with CapeDwearf Blue needs to ignore built-in beans.
*
* @author <a href="mailto:ales.justin@jboss.org">Ales Justin</a>
*/
public class EnvExtension implements Extension {
private static final Set<Class<?>> builtInBeanTypes;
private static final Set<String> gaeBeans;
private Boolean isGAE;
static {
builtInBeanTypes = new HashSet<Class<?>>();
builtInBeanTypes.add(BeanManager.class);
builtInBeanTypes.add(ValidatorFactory.class);
builtInBeanTypes.add(UserTransaction.class);
// producers to ignore
gaeBeans = new HashSet<String>();
gaeBeans.add("org.jboss.capedwarf.server.gae.validation.CdiValidationFactoryProvider");
}
protected boolean isGAE() {
if (isGAE == null) {
isGAE = (System.getProperty("jboss.home.dir") == null); // TODO other containers
}
return isGAE;
}
protected boolean isBuiltInType(Class<?> clazz) {
for (Class<?> bibt : builtInBeanTypes) {
if (bibt.isAssignableFrom(clazz))
return true;
}
final String className = clazz.getName();
for (String gb : gaeBeans) {
if (gb.equals(className))
return true;
}
return false;
}
public void processBeans(@Observes ProcessAnnotatedType pat) {
if (isGAE() == false) {
AnnotatedType annotatedType = pat.getAnnotatedType();
if (isBuiltInType(annotatedType.getJavaClass()))
pat.veto(); // use built-in impls
}
}
}