package de.ph87.data.point; import de.ph87.data.series.data.Interval; import lombok.Data; import java.time.ZonedDateTime; import java.util.List; import java.util.stream.Stream; @Data public class PointRequestRelative implements IPointRequest { public final List ids; public final Interval outerInterval; public final long offset; public final long count; public final Interval interval; public final ZonedDateTime begin; public final ZonedDateTime end; public final long expectedCount; public PointRequestRelative(final List ids, final Interval outerInterval, final long offset, final long count, final Interval interval) { this.ids = ids; this.outerInterval = outerInterval; this.offset = offset; this.count = count; this.interval = interval; this.end = outerInterval.align.apply(ZonedDateTime.now()).minus(outerInterval.amount * (offset - 1), outerInterval.unit); this.begin = this.end.minus(outerInterval.amount * count, outerInterval.unit); this.expectedCount = calculateExpectedCount(); } private long calculateExpectedCount() { return Stream.iterate(begin, d -> d.isBefore(end), d -> d.plus(interval.amount, interval.unit)).count(); } }