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<Class<?>>(); for (ComponentAdapter<?> adapter : parent.getComponentAdapters()) { if (hasAnnotatedMethods(adapter.getComponentImplementation())) { types.add(adapter.getComponentImplementation()); } } return types; } public Object createInstanceOfType(Class<?> type) { Object instance = parent.getComponent(type); if ( instance == null ){ throw new StepsInstanceNotFound(type, this); } return instance; } }