@@ -0,0 +1,2335 @@
+package io.yancey.menufetcher.data;%0A%0Aimport java.time.*;%0Aimport java.util.*;%0A%0Apublic class LocalDateRange implements Iterable%3CLocalDate%3E %7B%0A%09public final LocalDate startDate;%0A%09public final LocalDate endDate;%0A%09%0A%09public LocalDateRange(LocalDate startDate, LocalDate endDate) %7B%0A%09%09this.startDate = startDate;%0A%09%09this.endDate = endDate;%0A%09%7D%0A%09%0A%09public String toString() %7B%0A%09%09return startDate + %22 - %22 + endDate;%0A%09%7D%0A%09%0A%09/**%0A     * Checks if this range is entirely before the specified time.%0A     * %3Cp%3E%0A     * The comparison is based on the time-line position of the time within a day.%0A     *%0A     * @param other  the other time to compare to, not null%0A     * @return true if this range is entirely before the specified time%0A     * @throws NullPointerException if %7B@code other%7D is null%0A     */%0A%09public boolean isBefore(LocalDate other) %7B%0A%09%09return endDate.isBefore(other);%0A%09%7D%0A%09%0A%09/**%0A     * Checks if this range is entirely after the specified time.%0A     * %3Cp%3E%0A     * The comparison is based on the time-line position of the time within a day.%0A     *%0A     * @param other  the other time to compare to, not null%0A     * @return true if this range is entirely after the specified time%0A     * @throws NullPointerException if %7B@code other%7D is null%0A     */%0A%09public boolean isAfter(LocalDate other) %7B%0A%09%09return startDate.isAfter(other);%0A%09%7D%0A%09%0A%09/**%0A     * Checks if this range contains the specified time.%0A     * %3Cp%3E%0A     * The comparison is based on the time-line position of the time within a day.%0A     *%0A     * @param other  the other time to compare to, not null%0A     * @return true if this range contains the specified time%0A     * @throws NullPointerException if %7B@code other%7D is null%0A     */%0A%09public boolean contains(LocalDate other) %7B%0A%09%09return !isBefore(other) && !isAfter(other);%0A%09%7D%0A%09%0A%09public boolean equals(Object o) %7B%0A%09%09return o instanceof LocalDateRange &&%0A%09%09%09%09startDate.equals(((LocalDateRange)o).startDate) &&%0A%09%09%09%09endDate.equals(((LocalDateRange)o).endDate);%0A%09%7D%0A%09%0A%09public int hashCode() %7B%0A%09%09return startDate.hashCode() %5E endDate.hashCode();%0A%09%7D%0A%0A%09@Override%0A%09public Iterator%3CLocalDate%3E iterator() %7B%0A%09%09return new Iterator%3CLocalDate%3E() %7B%0A%09%09%09LocalDate date = startDate;%0A%09%09%09%0A%09%09%09@Override%0A%09%09%09public LocalDate next() %7B%0A%09%09%09%09return date = date.plusDays(1);%0A%09%09%09%7D%0A%09%09%09%0A%09%09%09@Override%0A%09%09%09public boolean hasNext() %7B%0A%09%09%09%09return !date.equals(endDate);%0A%09%09%09%7D%0A%09%09%7D;%0A%09%7D%0A%7D%0A

Add missing file