All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.intelie.pipes.time.PeriodUnit Maven / Gradle / Ivy

There is a newer version: 0.25.5
Show newest version
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" : "");
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy