package detective.core.distribute;
import detective.core.Scenario;
import detective.core.distribute.scenario.ScenarioRunContext;
import detective.core.filter.RunnerFilter;
import detective.core.filter.RunnerFilterChain;
/**
* Split Story into scenarios and invoke scenarios into ScenarioRunnerFilters
*
* @author James Luo
*
*/
public class JobStoryScenarioFilter implements RunnerFilter<JobStoryRunContext>{
private final RunnerFilterChain<ScenarioRunContext> scenarioChain;
public JobStoryScenarioFilter(RunnerFilterChain<ScenarioRunContext> chain){
assert chain != null;
this.scenarioChain = chain;
}
@Override
public void doFilter(JobStoryRunContext t, RunnerFilterChain<JobStoryRunContext> chain) {
for (final Scenario scenario : t.getStory().getScenarios()){
ScenarioRunContext context = new ScenarioRunContext();
context.setJobStoryRunContext(t);
context.setScenario(scenario);
this.scenarioChain.resetChainPosition();
this.scenarioChain.doFilter(context);
}
chain.doFilter(t);
}
}