Package br.com.caelum.vraptor.ioc.cdi

Source Code of br.com.caelum.vraptor.ioc.cdi.StereotypesRegistry

package br.com.caelum.vraptor.ioc.cdi;

import java.lang.annotation.Annotation;
import java.util.Map;
import java.util.Set;

import javax.enterprise.context.Dependent;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.util.AnnotationLiteral;
import javax.inject.Inject;

import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Convert;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.controller.DefaultBeanClass;
import br.com.caelum.vraptor.core.ControllerQualifier;
import br.com.caelum.vraptor.core.ConvertQualifier;
import br.com.caelum.vraptor.core.DeserializesQualifier;
import br.com.caelum.vraptor.core.InterceptorStackHandlersCache;
import br.com.caelum.vraptor.core.InterceptsQualifier;
import br.com.caelum.vraptor.core.StereotypeInfo;
import br.com.caelum.vraptor.deserialization.Deserializes;
import br.com.caelum.vraptor.deserialization.DeserializesHandler;
import br.com.caelum.vraptor.ioc.ControllerHandler;
import br.com.caelum.vraptor.ioc.ConverterHandler;
import br.com.caelum.vraptor.ioc.InterceptorStereotypeHandler;

import com.google.common.collect.ImmutableMap;

@Dependent
public class StereotypesRegistry {

  private static final Map<Class<?>, StereotypeInfo> STEREOTYPES_INFO;
  @Inject private BeanManager beanManager;
  @Inject private InterceptorStackHandlersCache interceptorsCache;

  public void configure(){
    Set<Bean<?>> beans = beanManager.getBeans(Object.class);
    for (Bean<?> bean : beans) {
      Annotation qualifier = tryToFindAStereotypeQualifier(bean);
      if(qualifier!=null){
        beanManager.fireEvent(new DefaultBeanClass(bean.getBeanClass()),qualifier);
      }
    }
    interceptorsCache.init();
  }

  private Annotation tryToFindAStereotypeQualifier(Bean<?> bean) {
    Set<Class<? extends Annotation>> annotations = bean.getStereotypes();
    Map<Class<?>, StereotypeInfo> stereotypesInfo = StereotypesRegistry.STEREOTYPES_INFO;
    for(Class<? extends Annotation> annotation : annotations){
      if(stereotypesInfo.containsKey(annotation)){
        return stereotypesInfo.get(annotation).getStereotypeQualifier();
      }
    }
    return null;
  }

  static {
    STEREOTYPES_INFO = ImmutableMap.<Class<?>, StereotypeInfo>of(
      Controller.class,new StereotypeInfo(Controller.class,ControllerHandler.class,new AnnotationLiteral<ControllerQualifier>() {}),
      Convert.class,new StereotypeInfo(Convert.class,ConverterHandler.class,new AnnotationLiteral<ConvertQualifier>() {}),
      Deserializes.class,new StereotypeInfo(Deserializes.class,DeserializesHandler.class,new AnnotationLiteral<DeserializesQualifier>() {}),
      Intercepts.class,new StereotypeInfo(Intercepts.class,InterceptorStereotypeHandler.class,new AnnotationLiteral<InterceptsQualifier>(){})
    );
  }
}
TOP

Related Classes of br.com.caelum.vraptor.ioc.cdi.StereotypesRegistry

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.