package de.invesdwin.util.math.decimal.scaled; import java.util.ArrayList; import java.util.List; import javax.annotation.concurrent.Immutable; import de.invesdwin.util.assertions.Assertions; import de.invesdwin.util.math.decimal.Decimal; import de.invesdwin.util.time.TimeRange; import de.invesdwin.util.time.fdate.FDate; @Immutable public class TimeRangedPercent extends Percent { public static final TimeRangedPercent INVALID_ROW = new TimeRangedPercent( new TimeRange(FDate.MIN_DATE, FDate.MAX_DATE), new Percent(new Decimal(Double.MIN_VALUE), PercentScale.RATE)); private final TimeRange timeRange; public TimeRangedPercent(final FDate time, final FDate endTime, final Percent percent) { this(new TimeRange(time, endTime), percent); } public TimeRangedPercent(final TimeRange timeRange, final Percent percent) { super(percent); Assertions.checkNotNull(timeRange); Assertions.checkNotNull(timeRange.getFrom()); Assertions.checkNotNull(timeRange.getTo()); this.timeRange = timeRange; } public TimeRange getTimeRange() { return timeRange; } public static List<TimeRange> extractTimeRanges(final Iterable<TimeRangedPercent> values) { final List<TimeRange> timeRanges = new ArrayList<TimeRange>(); for (final TimeRangedPercent pr : values) { timeRanges.add(pr.getTimeRange()); } return timeRanges; } public static TimeRangedPercent extractValueWithMaxPeriod(final Iterable<TimeRangedPercent> values) { TimeRangedPercent maxPeriod = null; for (final TimeRangedPercent pr : values) { if (maxPeriod == null || maxPeriod.getTimeRange().getDuration().isLessThan(pr.getTimeRange().getDuration())) { maxPeriod = pr; } } return maxPeriod; } public static TimeRangedPercent extractValueWithMinPeriod(final Iterable<TimeRangedPercent> values) { TimeRangedPercent minPeriod = null; for (final TimeRangedPercent pr : values) { if (minPeriod == null || minPeriod.getTimeRange().getDuration().isGreaterThan(pr.getTimeRange().getDuration())) { minPeriod = pr; } } return minPeriod; } public FDate getTime() { return getTimeRange().getFrom(); } public FDate getEndTime() { return getTimeRange().getTo(); } }