package gherkin.formatter; import gherkin.formatter.model.ExamplesTableRow; import gherkin.formatter.model.Range; import gherkin.formatter.model.Tag; import java.util.ArrayList; import java.util.List; public class LineFilter implements Filter { private final List<Integer> lines; public LineFilter(List<Integer> lines) { // During our tests, lines is passed in from Ruby, and it's a list of Long. this.lines = toIntegers(lines); } private List<Integer> toIntegers(List<?> lines) { List<Integer> result = new ArrayList<Integer>(lines.size()); for (Object line : lines) { if (line instanceof Number) { result.add(((Number) line).intValue()); } else { throw new IllegalArgumentException("Not a list of numbers: " + lines); } } return result; } public boolean evaluate(List<Tag> tags, List<String> names, List<Range> ranges) { for (Range range : ranges) { if (range != null) { for (Integer line : lines) { if (range.isInclude(line)) { return true; } } } } return false; } public List<ExamplesTableRow> filterTableBodyRows(List<ExamplesTableRow> exampleRows) { List<ExamplesTableRow> result = new ArrayList<ExamplesTableRow>(); for (ExamplesTableRow row : exampleRows) { if (result.isEmpty()) { result.add(row); } else { for (Integer line : lines) { if (row.getLine().equals(line)) { result.add(row); } } } } return result; } }