Package org.jboss.forge.furnace.container.cdi.lifecycle

Source Code of org.jboss.forge.furnace.container.cdi.lifecycle.WeldAddonLifecycleProvider

package org.jboss.forge.furnace.container.cdi.lifecycle;

import javax.enterprise.inject.spi.BeanManager;

import org.jboss.forge.furnace.Furnace;
import org.jboss.forge.furnace.addons.Addon;
import org.jboss.forge.furnace.addons.AddonRegistry;
import org.jboss.forge.furnace.container.cdi.events.EventManagerImpl;
import org.jboss.forge.furnace.container.cdi.events.EventManagerProducer;
import org.jboss.forge.furnace.container.cdi.events.LocalLiteral;
import org.jboss.forge.furnace.container.cdi.impl.AddonProducer;
import org.jboss.forge.furnace.container.cdi.impl.AddonRegistryProducer;
import org.jboss.forge.furnace.container.cdi.impl.AddonRepositoryProducer;
import org.jboss.forge.furnace.container.cdi.impl.ContainerBeanRegistrant;
import org.jboss.forge.furnace.container.cdi.impl.ContainerServiceExtension;
import org.jboss.forge.furnace.container.cdi.impl.FurnaceProducer;
import org.jboss.forge.furnace.container.cdi.impl.ServiceRegistryImpl;
import org.jboss.forge.furnace.container.cdi.impl.ServiceRegistryProducer;
import org.jboss.forge.furnace.container.cdi.util.BeanManagerUtils;
import org.jboss.forge.furnace.container.cdi.weld.AddonResourceLoader;
import org.jboss.forge.furnace.container.cdi.weld.ModularURLScanner;
import org.jboss.forge.furnace.container.cdi.weld.ModularWeld;
import org.jboss.forge.furnace.container.cdi.weld.ModuleScanResult;
import org.jboss.forge.furnace.event.EventManager;
import org.jboss.forge.furnace.event.PostStartup;
import org.jboss.forge.furnace.event.PreShutdown;
import org.jboss.forge.furnace.lifecycle.AddonLifecycleProvider;
import org.jboss.forge.furnace.lifecycle.ControlType;
import org.jboss.forge.furnace.spi.ServiceRegistry;
import org.jboss.forge.furnace.util.Assert;
import org.jboss.weld.environment.se.WeldContainer;
import org.jboss.weld.resources.spi.ResourceLoader;

public class WeldAddonLifecycleProvider implements AddonLifecycleProvider
{
   private Furnace furnace;
   private AddonRegistry addonRegistry;

   private ServiceRegistry serviceRegistry;
   private BeanManager manager;
   private ModularWeld weld;
   private EventManagerImpl eventManager;
   private Addon container;

   @Override
   public void initialize(Furnace furnace, AddonRegistry registry, Addon container)
   {
      this.furnace = furnace;
      this.addonRegistry = registry;
      this.container = container;
   }

   @Override
   public void start(Addon addon) throws Exception
   {
      ResourceLoader resourceLoader = new AddonResourceLoader(addon);
      ModularURLScanner scanner = new ModularURLScanner(resourceLoader, "META-INF/beans.xml");
      ModuleScanResult scanResult = scanner.scan();

      if (!scanResult.getDiscoveredResourceUrls().isEmpty())
      {
         ContainerServiceExtension extension = new ContainerServiceExtension(container, addon);

         weld = new ModularWeld(scanResult);
         weld.addExtension(extension);
         weld.addExtension(new ContainerBeanRegistrant());
         WeldContainer container = weld.initialize();

         manager = container.getBeanManager();
         Assert.notNull(manager, "BeanManager was null");

         AddonRepositoryProducer repositoryProducer = BeanManagerUtils.getContextualInstance(manager,
                  AddonRepositoryProducer.class);
         repositoryProducer.setRepository(addon.getRepository());

         FurnaceProducer forgeProducer = BeanManagerUtils.getContextualInstance(manager, FurnaceProducer.class);
         forgeProducer.setFurnace(furnace);

         AddonProducer addonProducer = BeanManagerUtils.getContextualInstance(manager, AddonProducer.class);
         addonProducer.setAddon(addon);

         AddonRegistryProducer addonRegistryProducer = BeanManagerUtils.getContextualInstance(manager,
                  AddonRegistryProducer.class);
         addonRegistryProducer.setRegistry(addonRegistry);

         ServiceRegistryProducer serviceRegistryProducer = BeanManagerUtils.getContextualInstance(manager,
                  ServiceRegistryProducer.class);
         serviceRegistry = new ServiceRegistryImpl(furnace.getLockManager(), addon, manager, extension.getServices());
         serviceRegistryProducer.setServiceRegistry(serviceRegistry);
         Assert.notNull(BeanManagerUtils.getContextualInstance(manager, ServiceRegistry.class),
                  "InboundEvent registry was null.");

         EventManagerProducer eventManagerProducer = BeanManagerUtils.getContextualInstance(manager,
                  EventManagerProducer.class);
         eventManager = new EventManagerImpl(addon, manager);
         eventManagerProducer.setEventManager(eventManager);
         Assert.notNull(BeanManagerUtils.getContextualInstance(manager, EventManager.class),
                  "InboundEvent registry was null.");
      }
   }

   @Override
   public void postStartup(Addon addon)
   {
      if (manager != null)
         manager.fireEvent(new PostStartup(addon), new LocalLiteral());
   }

   @Override
   public void preShutdown(Addon addon)
   {
      if (manager != null)
         manager.fireEvent(new PreShutdown(addon), new LocalLiteral());
   }

   @Override
   public void stop(Addon addon)
   {
      if (weld != null)
         weld.shutdown();
   }

   @Override
   public EventManager getEventManager(Addon addon)
   {
      return eventManager;
   }

   @Override
   public ServiceRegistry getServiceRegistry(Addon addon)
   {
      return serviceRegistry;
   }

   @Override
   public ControlType getControlType()
   {
      return ControlType.DEPENDENTS;
   }
}
TOP

Related Classes of org.jboss.forge.furnace.container.cdi.lifecycle.WeldAddonLifecycleProvider

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.