package tc.oc.time; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalUnit; import java.util.Map; import java.util.Set; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; /** * Units that we want to display to users */ public class FriendlyUnits { private static final Set<FriendlyUnits> DESC = ImmutableSet.of( new FriendlyUnits(ChronoUnit.YEARS, "year"), new FriendlyUnits(ChronoUnit.MONTHS, "month"), new FriendlyUnits(ChronoUnit.WEEKS, "week"), new FriendlyUnits(ChronoUnit.DAYS, "day"), new FriendlyUnits(ChronoUnit.HOURS, "hour"), new FriendlyUnits(ChronoUnit.MINUTES, "minute"), new FriendlyUnits(ChronoUnit.SECONDS, "second"), new FriendlyUnits(ChronoUnit.MILLIS, "millisecond") ); public static Set<FriendlyUnits> descending() { return DESC; } private static final FriendlyUnits LARGEST = DESC.iterator().next(); private static final FriendlyUnits SMALLEST = Iterables.getLast(DESC); public static FriendlyUnits largest() { return LARGEST; } public static FriendlyUnits smallest() { return SMALLEST; } private static final Map<TemporalUnit, FriendlyUnits> MAP = Maps.uniqueIndex(DESC, unit -> unit.unit); public static FriendlyUnits get(TemporalUnit type) { return MAP.get(type); } public final TemporalUnit unit; public final String singularKey, pluralKey; private FriendlyUnits(TemporalUnit unit, String key) { this.unit = unit; this.singularKey = "time.interval." + key; this.pluralKey = this.singularKey + "s"; } public String key(boolean plural) { return plural ? pluralKey : singularKey; } public String key(long quantity) { return key(quantity != 1); } }