/** * Given a collection of date filters, extract the first date range. * * @param filters the date filters * @return the first date range found */ private static Option<Pair<Date, Date>> getDateRange(Collection<Pair<Operator, Iterable<String>>> filters) { Pair<Operator, Iterable<String>> firstFilter = get(filters, 0); Iterable<Date> dates = transform(firstFilter.second(), toDate()); if (size(dates) < 2) { //no range exists return none(); } Iterable<Pair<Date, Date>> ranges = mkPairs(dates); return some(get(ranges, 0)); }
public Predicate<Date> apply(Pair<Operator, Iterable<String>> filter, Predicate<Date> predicate) { Iterable<Date> dates = transform(filter.second(), toDate()); switch (filter.first()) { case BEFORE: return and(predicate, or(transform(dates, ToBeforePredicate.INSTANCE))); case AFTER: return and(predicate, or(transform(dates, ToAfterPredicate.INSTANCE))); case BETWEEN: Iterable<Pair<Date, Date>> ranges = mkPairs(dates); return and(predicate, or(transform(ranges, ToBetweenPredicate.INSTANCE))); default: return predicate; } } }
public Clause apply(Pair<Operator, Iterable<String>> dateFilter) { JqlClauseBuilder builder = newClauseBuilder().sub(); ImmutableList<Date> dates = ImmutableList.copyOf(transform(dateFilter.second(), toDate())); switch (dateFilter.first()) { case BEFORE: builder.addClause(or(before(created(), dates))).or().addClause(or(before(updated(), dates))); break; case AFTER: builder.addClause(or(after(created(), dates))).or().addClause(or(after(updated(), dates))); break; case BETWEEN: Iterable<Pair<Date, Date>> ranges = mkPairs(dates); builder.addClause(or(between(created(), ranges))).or().addClause(or(between(updated(), ranges))); break; } return builder.endsub().buildClause(); } }