package detective.core.distribute.collector;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import detective.core.Detective;
import detective.core.Scenario;
import detective.core.Story;
import detective.core.distribute.JobToRun;
import detective.core.distribute.JobFactory;
import detective.core.exception.StoryFailException;
import detective.core.filter.RunnerFilter;
import detective.core.filter.RunnerFilterChain;
public class JobCollectorFilter implements RunnerFilter<Story> {
//private static final Logger logger = LoggerFactory.getLogger(JobCollectorFilter.class);
private int currentSotryIndex = 0;
private List<JobToRun> jobs = new ArrayList<JobToRun>();
@Override
public void doFilter(Story story, RunnerFilterChain<Story> chain) {
try {
distribute(story, currentSotryIndex);
currentSotryIndex ++;
} catch (Exception e) {
Detective.error("Error to distribute story [" + story.getTitle() + "]" + e.getMessage(), e);
}
chain.doFilter(story);
}
protected void distribute(Story story, int currentStoryIndex) {
if (story.getSharedDataMap().size() > 0){
jobs.add(JobFactory.newJob(story, currentStoryIndex));
}else{
for (int i = 0; i < story.getScenarios().size(); i++){
Scenario scenario = story.getScenarios().get(i);
jobs.add(JobFactory.newJob(scenario, currentStoryIndex, i));
}
}
}
public List<JobToRun> getJobs(){
return jobs;
}
}