package co.codewizards.cloudstore.core; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.ListIterator; /** * Units based on <a target="_blank" href="http://en.wikipedia.org/wiki/ISO_31-1">ISO 31-1</a> (where it exists). * * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de */ public enum TimeUnit { /** * Millisecond. */ ms("Millisecond", 1L), /** * Second. */ s("Second", 1000L), /** * Minute. */ min("Minute", 60L * s.msec), /** * Hour. */ h("Hour", 60L * min.msec), /** * Day. */ d("Day", 24L * h.msec), /** * Year. <a target="_blank" href="http://en.wikipedia.org/wiki/Year">Abbreviation from latin "annus".</a> */ a("Year", 365L * d.msec), /** * Year (alternative for convenience). */ y("Year", 365L * d.msec) ; private final String displayName; private final long msec; private TimeUnit(String displayName, long msec) { this.displayName = displayName; this.msec = msec; } public long toMillis(long value) { return value * msec; } public long toMillis() { return msec; } public String getDisplayName() { return displayName; } public static String getAllUnitsWithDisplayName() { return getAllUnitsWithDisplayName(", "); } public static String getAllUnitsWithDisplayName(String separator) { return getAllUnitsWithDisplayName("%s (%s)", separator); } public static String getAllUnitsWithDisplayName(String unitFormat, String separator) { StringBuilder sb = new StringBuilder(); for (TimeUnit u : values()) { if (sb.length() > 0) sb.append(separator); sb.append(String.format(unitFormat, u.name(), u.getDisplayName())); } return sb.toString(); } public static List<TimeUnit> getUniqueTimeUnitsOrderedByLengthAsc() { final List<TimeUnit> result = new ArrayList<>(Arrays.asList(TimeUnit.values())); result.remove(TimeUnit.y); // "y" is redundant - using only "a" by default. return Collections.unmodifiableList(result); } public static List<TimeUnit> getUniqueTimeUnitsOrderedByLengthDesc() { final List<TimeUnit> asc = getUniqueTimeUnitsOrderedByLengthAsc(); final List<TimeUnit> desc = new ArrayList<TimeUnit>(asc.size()); for (final ListIterator<TimeUnit> it = asc.listIterator(asc.size()); it.hasPrevious();) { final TimeUnit timeUnit = it.previous(); desc.add(timeUnit); } return desc; } }