package com.github.pfichtner.jrunalyser.base.data; import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Range.atMost; import java.util.EnumSet; import java.util.List; import java.util.concurrent.TimeUnit; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Ordering; public final class Durations { private Durations() { super(); } private static final Iterable<Duration> durations = ImmutableList .copyOf(Ordering.natural().sortedCopy(all())); private static Iterable<Duration> all() { List<Duration> result = Lists.<Duration> newArrayList(DefaultDuration .of(12, TimeUnit.MINUTES)); for (TimeUnit timeUnit : sort(EnumSet.of(TimeUnit.HOURS, TimeUnit.DAYS))) { for (int i : new int[] { 1, 2, 5, 10, 12 }) { result.add(DefaultDuration.of(i, timeUnit)); } } return result; } private static final List<Duration> defaultDurations = sort(Lists .newArrayList(durationIterator(DefaultDuration .of(1, TimeUnit.HOURS)))); private static <T extends Comparable<T>> List<T> sort(Iterable<T> build) { return ImmutableList.copyOf(Ordering.natural().sortedCopy(build)); } public static Iterable<Duration> getDefaultDurations() { return defaultDurations; } public static Iterable<Duration> durationIterator(Duration upto) { return filter(durations, atMost(upto)); } }