Package br.gov.frameworkdemoiselle.internal.bootstrap

Source Code of br.gov.frameworkdemoiselle.internal.bootstrap.CustomContextBootstrap

package br.gov.frameworkdemoiselle.internal.bootstrap;

import java.util.ArrayList;
import java.util.List;

import javax.enterprise.event.Observes;
import javax.enterprise.inject.spi.AfterBeanDiscovery;
import javax.enterprise.inject.spi.Extension;
import javax.enterprise.inject.spi.ProcessAnnotatedType;

import br.gov.frameworkdemoiselle.context.CustomContext;
import br.gov.frameworkdemoiselle.context.StaticContext;
import br.gov.frameworkdemoiselle.internal.context.TemporaryRequestContextImpl;
import br.gov.frameworkdemoiselle.internal.context.TemporarySessionContextImpl;
import br.gov.frameworkdemoiselle.internal.context.StaticContextImpl;
import br.gov.frameworkdemoiselle.internal.context.TemporaryConversationContextImpl;
import br.gov.frameworkdemoiselle.internal.context.TemporaryViewContextImpl;

/**
* This portable extension registers and starts custom contexts used by
* the framework.
*
* @author serpro
*
*/
public class CustomContextBootstrap implements Extension{
 
  private List<CustomContext> contexts;
 
  public <T extends CustomContext> void vetoCustomContexts(@Observes ProcessAnnotatedType<T> event){
    //Veta os subtipos de CustomContext, para que não conflitem com o produtor de contextos personalizados.
    if( CustomContext.class.isAssignableFrom( event.getAnnotatedType().getJavaClass() )){
      event.veto();
    }
  }
 
  public void initializeContexts(@Observes AfterBeanDiscovery event){
    //Cadastra os contextos contidos no demoiselle-core
    if (contexts==null || contexts.isEmpty()){
      CustomContext ctx;
     
      contexts = new ArrayList<CustomContext>();
     
      ctx = new TemporaryRequestContextImpl();
      contexts.add(ctx);
     
      ctx = new TemporarySessionContextImpl();
      contexts.add(ctx);
     
      ctx = new StaticContextImpl();
      contexts.add(ctx);
     
      ctx = new TemporaryViewContextImpl();
      contexts.add(ctx);
     
      ctx = new TemporaryConversationContextImpl();
      contexts.add(ctx);
     
      for (CustomContext c : contexts){
        event.addContext(c);
      }
    }
   
    //Ativa um contexto para gerenciar o StaticScope, um escopo criado para gerenciar classes de configuração.
    for (CustomContext ctx : contexts){
      if (ctx instanceof StaticContext){
        StaticContext staticContext = (StaticContext)ctx;
        staticContext.activate();
        break;
      }
    }
  }
 
  public List<CustomContext> getCustomContexts(){
    return this.contexts;
  }
 
  /*public void storeContexts(@Observes AfterDeploymentValidation event){
    CustomContextProducer producer = Beans.getReference(CustomContextProducer.class);
    producer.addRegisteredContexts(contexts);
  }*/
 
TOP

Related Classes of br.gov.frameworkdemoiselle.internal.bootstrap.CustomContextBootstrap

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.