PicoStepsFactory.java
package org.jbehave.core.steps.pico;
import java.util.ArrayList;
import java.util.List;
import org.jbehave.core.configuration.Configuration;
import org.jbehave.core.steps.AbstractStepsFactory;
import org.jbehave.core.steps.InjectableStepsFactory;
import org.picocontainer.ComponentAdapter;
import org.picocontainer.PicoContainer;
/**
* An {@link InjectableStepsFactory} that uses a {@link PicoContainer} for the
* composition and instantiation of all components that contain JBehave
* annotated methods.
*
* @author Paul Hammant
* @author Mauro Talevi
*/
public class PicoStepsFactory extends AbstractStepsFactory {
private final PicoContainer parent;
public PicoStepsFactory(Configuration configuration, PicoContainer parent) {
super(configuration);
this.parent = parent;
}
@Override
protected List<Class<?>> stepsTypes() {
List<Class<?>> types = new ArrayList<>();
for (ComponentAdapter<?> adapter : parent.getComponentAdapters()) {
if (hasAnnotatedMethods(adapter.getComponentImplementation())) {
types.add(adapter.getComponentImplementation());
}
}
return types;
}
@Override
public Object createInstanceOfType(Class<?> type) {
Object instance = parent.getComponent(type);
if (instance == null) {
throw new StepsInstanceNotFound(type, this);
}
return instance;
}
}