CompositeStepsFactory.java
package org.jbehave.core.steps;
import java.util.ArrayList;
import java.util.List;
import org.jbehave.core.steps.AbstractStepsFactory.StepsInstanceNotFound;
/**
* An {@link InjectableStepsFactory} that composes {@link CandidateSteps}
* created from other factories.
*/
public class CompositeStepsFactory implements InjectableStepsFactory {
private final InjectableStepsFactory[] stepsFactories;
public CompositeStepsFactory(InjectableStepsFactory... stepsFactories) {
this.stepsFactories = stepsFactories;
}
@Override
public List<CandidateSteps> createCandidateSteps() {
List<CandidateSteps> steps = new ArrayList<>();
for (InjectableStepsFactory factory : stepsFactories) {
steps.addAll(factory.createCandidateSteps());
}
return steps;
}
@Override
public Object createInstanceOfType(Class<?> type) {
Object instance = null;
for (InjectableStepsFactory factory : stepsFactories) {
try {
instance = factory.createInstanceOfType(type);
} catch (RuntimeException e) {
// creation failed on given factory, carry on
}
}
if (instance == null) {
throw new StepsInstanceNotFound(type, this);
}
return instance;
}
}