aboutsummaryrefslogtreecommitdiffstats
path: root/config-model-api
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-01-10 10:08:09 +0100
committerMartin Polden <mpolden@mpolden.no>2022-01-10 10:08:09 +0100
commit14b3076c47793de99d7e6920dae91e02845109d8 (patch)
tree5e2fcbb6a25226fbba57e5419ec8a5234293f764 /config-model-api
parentfe268417a9b9d2f05cae0140b9b109e6221b5bbb (diff)
Default to days contained in the date range
Diffstat (limited to 'config-model-api')
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/TimeWindow.java24
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/application/api/TimeWindowTest.java6
2 files changed, 19 insertions, 11 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/TimeWindow.java b/config-model-api/src/main/java/com/yahoo/config/application/api/TimeWindow.java
index 14deb5d5720..746d7226d82 100644
--- a/config-model-api/src/main/java/com/yahoo/config/application/api/TimeWindow.java
+++ b/config-model-api/src/main/java/com/yahoo/config/application/api/TimeWindow.java
@@ -12,9 +12,11 @@ import java.time.temporal.ChronoField;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.EnumSet;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
+import java.util.Set;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@@ -39,7 +41,7 @@ public class TimeWindow {
if (days.isEmpty()) throw new IllegalArgumentException("At least one day must be specified");
if (hours.isEmpty()) throw new IllegalArgumentException("At least one hour must be specified");
for (var day : days) {
- if (!dateRange.includes(day)) {
+ if (!dateRange.days().contains(day)) {
throw new IllegalArgumentException("Invalid day: " + dateRange + " does not contain " + day);
}
}
@@ -83,14 +85,15 @@ public class TimeWindow {
/** Parse a time window from the given day, hour and time zone specification */
public static TimeWindow from(String daySpec, String hourSpec, String zoneSpec, String dateStart, String dateEnd) {
+ LocalDateRange dateRange = LocalDateRange.from(dateStart, dateEnd);
List<DayOfWeek> days = daySpec.isEmpty()
- ? List.of(DayOfWeek.values()) // All days by default
+ ? List.copyOf(dateRange.days()) // Default to the days contained in the date range
: parse(daySpec, TimeWindow::parseDays);
List<Integer> hours = hourSpec.isEmpty()
? IntStream.rangeClosed(0, 23).boxed().collect(Collectors.toList()) // All hours by default
: parse(hourSpec, TimeWindow::parseHours);
ZoneId zone = zoneFrom(zoneSpec.isEmpty() ? "UTC" : zoneSpec);
- return new TimeWindow(days, hours, zone, LocalDateRange.from(dateStart, dateEnd));
+ return new TimeWindow(days, hours, zone, dateRange);
}
/** Parse a specification, e.g. "1,4-5", using the given value parser */
@@ -187,15 +190,14 @@ public class TimeWindow {
return end;
}
- /** Returns whether this contains the given day */
- private boolean includes(DayOfWeek day) {
- if (start.isEmpty() || end.isEmpty()) return true;
- for (LocalDate date = start.get(); !date.isAfter(end.get()); date = date.plusDays(1)) {
- if (date.getDayOfWeek() == day) {
- return true;
- }
+ /** Return days of week found in this range */
+ private Set<DayOfWeek> days() {
+ if (start.isEmpty() || end.isEmpty()) return EnumSet.allOf(DayOfWeek.class);
+ Set<DayOfWeek> days = EnumSet.noneOf(DayOfWeek.class);
+ for (LocalDate date = start.get(); !date.isAfter(end.get()) && days.size() < 7; date = date.plusDays(1)) {
+ days.add(date.getDayOfWeek());
}
- return false;
+ return days;
}
/** Returns whether includes the given date */
diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/TimeWindowTest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/TimeWindowTest.java
index a76f156ebb1..2403066868b 100644
--- a/config-model-api/src/test/java/com/yahoo/config/application/api/TimeWindowTest.java
+++ b/config-model-api/src/test/java/com/yahoo/config/application/api/TimeWindowTest.java
@@ -129,6 +129,12 @@ public class TimeWindowTest {
assertEquals(List.of(MONDAY, WEDNESDAY, THURSDAY), tw.days());
assertEquals(List.of(1, 2, 3, 4), tw.hours());
}
+ { // Default to days contained in the date range
+ TimeWindow tw = TimeWindow.from("", "", "", "2022-01-11", "2022-01-14");
+ assertEquals(List.of(TUESDAY, WEDNESDAY, THURSDAY, FRIDAY), tw.days());
+ TimeWindow tw2 = TimeWindow.from("", "", "", "2022-01-01", "2100-01-01");
+ assertEquals(List.of(DayOfWeek.values()), tw2.days());
+ }
}
@Test