net.intelie.pipes.time.PeriodUnit Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of pipes-api Show documentation
Show all versions of pipes-api Show documentation
Intelie Pipes' API classes and interfaces
package net.intelie.pipes.time;
import net.intelie.pipes.util.Preconditions;
import java.io.Serializable;
import java.time.ZoneId;
import java.time.temporal.ChronoField;
import java.util.Collections;
import java.util.Locale;
import java.util.Map;
import java.util.TreeMap;
public enum PeriodUnit implements Serializable {
MILLISECOND {
@Override
public PeriodBase create(int quantity, ZoneId zone) {
return new LongPeriodBase(quantity);
}
},
SECOND {
@Override
public PeriodBase create(int quantity, ZoneId zone) {
return new LongPeriodBase(quantity * 1000L);
}
},
MINUTE {
@Override
public PeriodBase create(int quantity, ZoneId zone) {
return new LongPeriodBase(quantity * 1000L * 60);
}
},
HOUR {
@Override
public PeriodBase create(int quantity, ZoneId zone) {
return new LongPeriodBase(quantity * 1000L * 60 * 60);
}
},
DAY {
@Override
public PeriodBase create(int quantity, ZoneId zone) {
return new CalendarPeriodBase(quantity, ChronoField.DAY_OF_MONTH, zone);
}
},
WEEK {
@Override
public PeriodBase create(int quantity, ZoneId zone) {
return new CalendarPeriodBase(quantity, ChronoField.ALIGNED_WEEK_OF_YEAR, zone);
}
},
MONTH {
@Override
public PeriodBase create(int quantity, ZoneId zone) {
return new CalendarPeriodBase(quantity, ChronoField.MONTH_OF_YEAR, zone);
}
},
BIMESTER {
@Override
public PeriodBase create(int quantity, ZoneId zone) {
return new CalendarPeriodBase(2 * quantity, ChronoField.MONTH_OF_YEAR, zone);
}
},
QUARTER {
@Override
public PeriodBase create(int quantity, ZoneId zone) {
return new CalendarPeriodBase(3 * quantity, ChronoField.MONTH_OF_YEAR, zone);
}
},
SEMESTER {
@Override
public PeriodBase create(int quantity, ZoneId zone) {
return new CalendarPeriodBase(6 * quantity, ChronoField.MONTH_OF_YEAR, zone);
}
},
YEAR {
@Override
public PeriodBase create(int quantity, ZoneId zone) {
return new CalendarPeriodBase(quantity, ChronoField.YEAR, zone);
}
};
private static final long serialVersionUID = 1L;
private static final Map units;
static {
Map temp = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
put(temp, PeriodUnit.MILLISECOND, "millisecond", "milli", "ms");
put(temp, PeriodUnit.SECOND, "sec", "second");
put(temp, PeriodUnit.MINUTE, "min", "minute");
put(temp, PeriodUnit.HOUR, "hour");
put(temp, PeriodUnit.DAY, "day");
put(temp, PeriodUnit.WEEK, "wk", "week");
put(temp, PeriodUnit.MONTH, "mon", "month");
put(temp, PeriodUnit.BIMESTER, "bimester");
put(temp, PeriodUnit.QUARTER, "quarter");
put(temp, PeriodUnit.SEMESTER, "semester");
put(temp, PeriodUnit.YEAR, "yr", "year");
units = Collections.unmodifiableMap(temp);
}
private static void put(Map units, PeriodUnit unit, String... names) {
for (String name : names) {
units.put(name, unit);
units.put(name + "s", unit);
}
}
public static PeriodUnit fromNameSafe(String name) {
return units.get(name);
}
public static PeriodUnit fromName(String name) {
PeriodUnit unit = fromNameSafe(name);
Preconditions.checkArgument(unit != null, "Unknown period unit: %s", name);
return unit;
}
public abstract PeriodBase create(int quantity, ZoneId zone);
public String toString(int quantity, boolean includeOne) {
return (quantity != 1 || includeOne ? quantity + " " : "") + this.name().toLowerCase(Locale.ROOT) + (quantity != 1 ? "s" : "");
}
}