WeldAnnotationBuilder.java

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

  2. import org.jbehave.core.annotations.weld.UsingWeld;
  3. import org.jbehave.core.configuration.AnnotationBuilder;
  4. import org.jbehave.core.configuration.AnnotationFinder;
  5. import org.jbehave.core.configuration.AnnotationMonitor;
  6. import org.jbehave.core.configuration.AnnotationRequired;
  7. import org.jbehave.core.configuration.Configuration;
  8. import org.jbehave.core.configuration.PrintStreamAnnotationMonitor;
  9. import org.jbehave.core.steps.CompositeStepsFactory;
  10. import org.jbehave.core.steps.InjectableStepsFactory;

  11. /**
  12.  * Extends {@link AnnotationBuilder} to provide Weld-based dependency injection
  13.  * if {@link UsingWeld} annotation is present.
  14.  *
  15.  * @author Aaron Walker
  16.  */
  17. public class WeldAnnotationBuilder extends AnnotationBuilder {

  18.     private Configuration configuration;
  19.     private InjectableStepsFactory stepsFactory;

  20.     public WeldAnnotationBuilder(Class<?> annotatedClass) {
  21.         this(annotatedClass, new PrintStreamAnnotationMonitor());
  22.     }

  23.     public WeldAnnotationBuilder(Class<?> annotatedClass, AnnotationMonitor annotationMonitor) {
  24.         super(annotatedClass, annotationMonitor);
  25.     }

  26.     public WeldAnnotationBuilder(Class<?> annotatedClass, Configuration configuration,
  27.             InjectableStepsFactory stepsFactory) {
  28.         this(annotatedClass);
  29.         this.configuration = configuration;
  30.         this.stepsFactory = stepsFactory;
  31.     }

  32.     @Override
  33.     public Configuration buildConfiguration() throws AnnotationRequired {
  34.         AnnotationFinder finder = annotationFinder();
  35.         if (finder.isAnnotationPresent(UsingWeld.class)) {
  36.             if (configuration == null) {
  37.                 return super.buildConfiguration();
  38.             }
  39.             return configuration;
  40.         } else {
  41.             annotationMonitor().annotationNotFound(UsingWeld.class, annotatedClass());
  42.         }
  43.         return super.buildConfiguration();
  44.     }

  45.     @Override
  46.     public InjectableStepsFactory buildStepsFactory(Configuration configuration) {
  47.         InjectableStepsFactory factoryUsingSteps = super.buildStepsFactory(configuration);
  48.         if (stepsFactory != null) {
  49.             return new CompositeStepsFactory(stepsFactory, factoryUsingSteps);
  50.         }
  51.         return factoryUsingSteps;
  52.     }
  53. }