CompositeStepsFactory.java

  1. package org.jbehave.core.steps;

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. import org.jbehave.core.steps.AbstractStepsFactory.StepsInstanceNotFound;

  5. /**
  6.  * An {@link InjectableStepsFactory} that composes {@link CandidateSteps}
  7.  * created from other factories.
  8.  */
  9. public class CompositeStepsFactory implements InjectableStepsFactory {

  10.     private final InjectableStepsFactory[] stepsFactories;

  11.     public CompositeStepsFactory(InjectableStepsFactory... stepsFactories) {
  12.         this.stepsFactories = stepsFactories;
  13.     }

  14.     @Override
  15.     public List<CandidateSteps> createCandidateSteps() {
  16.         List<CandidateSteps> steps = new ArrayList<>();
  17.         for (InjectableStepsFactory factory : stepsFactories) {
  18.             steps.addAll(factory.createCandidateSteps());
  19.         }
  20.         return steps;
  21.     }

  22.     @Override
  23.     public Object createInstanceOfType(Class<?> type) {
  24.         Object instance = null;
  25.         for (InjectableStepsFactory factory : stepsFactories) {
  26.             try {
  27.                 instance = factory.createInstanceOfType(type);
  28.             } catch (RuntimeException e) {
  29.                 // creation failed on given factory, carry on
  30.             }
  31.         }
  32.         if (instance == null) {
  33.             throw new StepsInstanceNotFound(type, this);
  34.         }
  35.         return instance;
  36.     }

  37. }