WeldBootstrap.java

  1. package org.jbehave.core.configuration.weld;

  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import javax.enterprise.context.ApplicationScoped;
  5. import javax.enterprise.inject.Any;
  6. import javax.enterprise.inject.Instance;
  7. import javax.inject.Inject;

  8. import org.jbehave.core.annotations.weld.UsingWeld;
  9. import org.jbehave.core.annotations.weld.WeldConfiguration;
  10. import org.jbehave.core.configuration.Configuration;
  11. import org.jbehave.core.steps.weld.WeldStepsFactory;
  12. import org.jboss.weld.environment.se.Weld;
  13. import org.jboss.weld.environment.se.WeldContainer;

  14. @ApplicationScoped
  15. public class WeldBootstrap extends Weld {
  16.     private WeldContainer weld;

  17.     public WeldBootstrap() {
  18.     }

  19.     @Override
  20.     public WeldContainer initialize() {
  21.         weld = super.initialize();
  22.         return weld;
  23.     }

  24.     public WeldAnnotationBuilder findAnnotationBuilder(Class<?> annotatedClass) {
  25.         return weld.instance().select(InstanceManager.class).get().findBuilder(annotatedClass);
  26.     }

  27.     @ApplicationScoped
  28.     public static class InstanceManager {

  29.         @Inject
  30.         @Any
  31.         @UsingWeld
  32.         private Instance<Object> instances;

  33.         @Inject
  34.         @WeldConfiguration
  35.         private Configuration configuration;

  36.         @Inject
  37.         private WeldStepsFactory stepsFactory;

  38.         private Map<Class<?>, WeldAnnotationBuilder> builders = null;

  39.         public void build() {
  40.             builders = new HashMap<>();
  41.             for (Object o : instances) {
  42.                 Class<?> instanceClass = o.getClass();
  43.                 WeldAnnotationBuilder builder = new WeldAnnotationBuilder(instanceClass, configuration, stepsFactory);
  44.                 builders.put(instanceClass, builder);
  45.             }
  46.         }

  47.         public WeldAnnotationBuilder findBuilder(Class<?> annotatedClass) {
  48.             if (builders == null) {
  49.                 build();
  50.             }

  51.             if (builders.containsKey(annotatedClass)) {
  52.                 return builders.get(annotatedClass);
  53.             } else {
  54.                 return new WeldAnnotationBuilder(annotatedClass, configuration, stepsFactory);
  55.             }
  56.         }

  57.     }

  58. }