WeldStepsFactory.java
package org.jbehave.core.steps.weld;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.inject.Any;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.jbehave.core.annotations.weld.WeldConfiguration;
import org.jbehave.core.annotations.weld.WeldStep;
import org.jbehave.core.configuration.Configuration;
import org.jbehave.core.steps.AbstractStepsFactory;
import org.jbehave.core.steps.InjectableStepsFactory;
/**
* An {@link InjectableStepsFactory} that uses a Weld {@link Inject} for the
* composition and instantiation of all components that contain JBehave
* annotated methods.
*
* @author Aaron Walker
*/
@Singleton
public class WeldStepsFactory extends AbstractStepsFactory {
@Inject
@Any
@WeldStep
private Instance<Object> instances;
@Inject
public WeldStepsFactory(@WeldConfiguration Configuration configuration) {
super(configuration);
}
@Override
protected List<Class<?>> stepsTypes() {
List<Class<?>> types = new ArrayList<>();
for (Object o : instances) {
types.add(o.getClass());
}
return types;
}
@Override
public Object createInstanceOfType(Class<?> type) {
for (Object o : instances) {
if (type.equals(o.getClass())) {
return o;
}
}
throw new StepsInstanceNotFound(type, this);
}
}