package com.intrbiz.bergamot.model.timeperiod; import java.time.Clock; import java.time.LocalDateTime; import java.util.Calendar; import java.util.LinkedList; import java.util.List; import com.intrbiz.Util; public class ComposedTimeRange implements TimeRange { private static final long serialVersionUID = 1L; private List<TimeRange> ranges = new LinkedList<TimeRange>(); public ComposedTimeRange() { super(); } public ComposedTimeRange(TimeRange... ranges) { super(); for (TimeRange range : ranges) { this.ranges.add(range); } } public List<TimeRange> getRanges() { return ranges; } public void addRange(TimeRange range) { this.ranges.add(range); } public void setRanges(List<TimeRange> ranges) { this.ranges = ranges; } public boolean isInTimeRange(Calendar calendar) { if (this.ranges.isEmpty()) return true; for (TimeRange range : this.ranges) { if (range.isInTimeRange(calendar)) return true; } return false; } public LocalDateTime computeNextStartTime(Clock clock) { LocalDateTime next = null; for (TimeRange range : this.ranges) { if (next == null) { next = range.computeNextStartTime(clock); } else { LocalDateTime rn = range.computeNextStartTime(clock); if (next.isAfter(rn)) next = rn; } } if (next == null) return null; // check the date is valid return (next.isAfter(LocalDateTime.now(clock))) ? next : null; } public String toString() { return Util.join(", ", this.ranges); } }