package detective.core.filter.impl;
import java.util.Iterator;
import java.util.List;
import com.google.common.collect.ImmutableList;
import detective.common.annotation.NotThreadSafe;
import detective.core.Scenario;
import detective.core.Story;
import detective.core.TestTask;
import detective.core.filter.RunnerFilter;
import detective.core.filter.RunnerFilterChain;
@NotThreadSafe
public class RunnerFilterChainImpl<T> implements RunnerFilterChain<T>{
private int currentPosition = 0;
private final List<RunnerFilter<T>> filters;
public RunnerFilterChainImpl(List<RunnerFilter<T>> filters){
this.filters = ImmutableList.copyOf(filters);
}
@Override
public void doFilter(T t) {
if (currentPosition >= filters.size())
return; //we reached the end of filter list
RunnerFilter<T> next = filters.get(currentPosition);
currentPosition++;
next.doFilter(t, this);
}
public void resetChainPosition(){
currentPosition = 0;
}
@Override
public Iterator<RunnerFilter<T>> iterator() {
return filters.iterator();
}
}