diff --git a/src/main/java/net/fortuna/ical4j/model/NumberList.java b/src/main/java/net/fortuna/ical4j/model/NumberList.java index 6382261de..808efda0a 100644 --- a/src/main/java/net/fortuna/ical4j/model/NumberList.java +++ b/src/main/java/net/fortuna/ical4j/model/NumberList.java @@ -34,6 +34,7 @@ import net.fortuna.ical4j.util.Numbers; import java.io.Serializable; +import java.time.temporal.ValueRange; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -50,9 +51,7 @@ public class NumberList extends ArrayList implements Serializable { private static final long serialVersionUID = -1667481795613729889L; - private final int minValue; - - private final int maxValue; + private final ValueRange range; private final boolean allowsNegativeValues; @@ -70,8 +69,11 @@ public NumberList() { * @param allowsNegativeValues indicates whether negative values are allowed */ public NumberList(int minValue, int maxValue, boolean allowsNegativeValues) { - this.minValue = minValue; - this.maxValue = maxValue; + this(ValueRange.of(minValue, maxValue), allowsNegativeValues); + } + + public NumberList(ValueRange range, boolean allowsNegativeValues) { + this.range = range; this.allowsNegativeValues = allowsNegativeValues; } @@ -106,9 +108,9 @@ public final boolean add(final Integer aNumber) { } abs = Math.abs(abs); } - if (abs < minValue || abs > maxValue) { + if (!range.isValidIntValue(abs)) { throw new IllegalArgumentException( - "Value not in range [" + minValue + ".." + maxValue + "]: " + aNumber); + "Value not in range [" + range.getMinimum() + ".." + range.getMaximum() + "]: " + aNumber); } return super.add(aNumber); } diff --git a/src/main/java/net/fortuna/ical4j/model/Recur.java b/src/main/java/net/fortuna/ical4j/model/Recur.java index e98c9adb8..371bf9a66 100644 --- a/src/main/java/net/fortuna/ical4j/model/Recur.java +++ b/src/main/java/net/fortuna/ical4j/model/Recur.java @@ -40,6 +40,7 @@ import java.io.IOException; import java.io.Serializable; import java.time.LocalDate; +import java.time.temporal.ChronoField; import java.time.temporal.ChronoUnit; import java.time.temporal.Temporal; import java.time.temporal.TemporalUnit; @@ -164,21 +165,21 @@ public enum Frequency { private Integer interval; - private final List secondList = new NumberList(0, 59, false); + private final List secondList = new NumberList(ChronoField.SECOND_OF_MINUTE.range(), false); - private final List minuteList = new NumberList(0, 59, false); + private final List minuteList = new NumberList(ChronoField.MINUTE_OF_HOUR.range(), false); - private final List hourList = new NumberList(0, 23, false); + private final List hourList = new NumberList(ChronoField.HOUR_OF_DAY.range(), false); private final List dayList = new WeekDayList(); - private final List monthDayList = new NumberList(1, 31, true); + private final List monthDayList = new NumberList(ChronoField.DAY_OF_MONTH.range(), true); - private final List yearDayList = new NumberList(1, 366, true); + private final List yearDayList = new NumberList(ChronoField.DAY_OF_YEAR.range(), true); - private final List weekNoList = new NumberList(1, 53, true); + private final List weekNoList = new NumberList(ChronoField.ALIGNED_WEEK_OF_YEAR.range(), true); - private final List monthList = new NumberList(1, 12, false); + private final List monthList = new NumberList(ChronoField.MONTH_OF_YEAR.range(), false); private final List setPosList = new NumberList(1, 366, true);