ProvidedStepsFactory.java
package org.jbehave.core.steps;
import static java.util.Arrays.asList;
import java.util.List;
import org.jbehave.core.steps.AbstractStepsFactory.StepsInstanceNotFound;
/**
* An {@link InjectableStepsFactory} that is provided with the
* {@link CandidateSteps} instances.
*/
public class ProvidedStepsFactory implements InjectableStepsFactory {
private final List<CandidateSteps> candidateSteps;
public ProvidedStepsFactory() {
this(asList(new CandidateSteps[]{}));
}
public ProvidedStepsFactory(List<CandidateSteps> candidateSteps) {
this.candidateSteps = candidateSteps;
}
@Override
public List<CandidateSteps> createCandidateSteps() {
return candidateSteps;
}
@Override
public Object createInstanceOfType(Class<?> type) {
Object instance = null;
for (CandidateSteps steps : candidateSteps) {
try {
if (type.equals(((Steps) steps).type())) {
instance = ((Steps) steps).instance();
}
} catch (RuntimeException e) {
// creation failed on given factory, carry on
}
}
if (instance == null) {
throw new StepsInstanceNotFound(type, this);
}
return instance;
}
}