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

com.ardikars.common.util.DateTimePattern Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2017-2019 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.ardikars.common.util;

import com.ardikars.common.annotation.Helper;
import com.ardikars.common.annotation.Immutable;
import java.util.HashMap;
import java.util.Map;

/**
 * Date and time pattern.
 *
 * @author Ardika Rommy Sanjaya
 * @since 1.0.0
 */
@Helper
@Immutable
public final class DateTimePattern {

    private static String SPACE_DELIMITER = " ";

    public static final String DEFAULT_PATTERN = DatePattern.DD_MM_YYYY_WITH_SPACE_AS_DELIMITER.getValue()
            + SPACE_DELIMITER
            + TimePattern.HH_MM_SS_WITH_SPACE_AS_DELIMITER.getValue();

    public static final class DatePattern extends NamedObject {

        public static final DatePattern YYYY_MM_DD_WITH_MINUS_AS_DELIMITER = new DatePattern("yyyy-MM-dd", "Year-Month-Day");
        public static final DatePattern DD_MM_YYYY_WITH_MINUS_AS_DELIMITER = new DatePattern("dd-MM-yyyy", "Day-Month-Year");

        public static final DatePattern YYYY_MM_WITH_MINUS_AS_DELIMITER = new DatePattern("yyyy-MM", "Year-Month");
        public static final DatePattern MM_YYYY_WITH_MINUS_AS_DELIMITER = new DatePattern("MM-yyyy", "Month-Year");

        public static final DatePattern YYYY_MM_DD_WITH_SLASH_AS_DELIMITER = new DatePattern("yyyy/MM/dd", "Year/Month/Day");
        public static final DatePattern DD_MM_YYYY_WITH_SLASH_AS_DELIMITER = new DatePattern("dd/MM/yyyy", "Day/Month/Year");

        public static final DatePattern YYYY_MM_WITH_SLASH_AS_DELIMITER = new DatePattern("yyyy/MM", "Year/Month");
        public static final DatePattern MM_YYYY_WITH_SLASH_AS_DELIMITER = new DatePattern("MM/yyyy", "Month/Year");

        public static final DatePattern YYYY_MM_DD_WITH_SPACE_AS_DELIMITER = new DatePattern("yyyy MM dd", "Year Month Day");
        public static final DatePattern DD_MM_YYYY_WITH_SPACE_AS_DELIMITER = new DatePattern("dd MM yyyy", "Day Month Year");

        public static final DatePattern YYYY_MM_WITH_SPACE_AS_DELIMITER = new DatePattern("yyyy MM", "Year Month");
        public static final DatePattern MM_YYYY_WITH_SPACE_AS_DELIMITER = new DatePattern("MM yyyy", "Month Year");

        private static final Map registry = new HashMap();

        public DatePattern(String value, String name) {
            super(value, name);
        }

        public static DatePattern register(DatePattern datePattern) {
            registry.put(datePattern.getValue(), datePattern);
            return datePattern;
        }

        public static DatePattern getDatePattern(String stringDatePattern) {
            return registry.getOrDefault(stringDatePattern, DD_MM_YYYY_WITH_SPACE_AS_DELIMITER);
        }

        static {
            registry.put(YYYY_MM_DD_WITH_MINUS_AS_DELIMITER.getValue(), YYYY_MM_DD_WITH_MINUS_AS_DELIMITER);
            registry.put(DD_MM_YYYY_WITH_MINUS_AS_DELIMITER.getValue(), DD_MM_YYYY_WITH_MINUS_AS_DELIMITER);
            registry.put(YYYY_MM_WITH_MINUS_AS_DELIMITER.getValue(), YYYY_MM_WITH_MINUS_AS_DELIMITER);
            registry.put(MM_YYYY_WITH_MINUS_AS_DELIMITER.getValue(), MM_YYYY_WITH_MINUS_AS_DELIMITER);
            registry.put(YYYY_MM_DD_WITH_SLASH_AS_DELIMITER.getValue(), YYYY_MM_DD_WITH_SLASH_AS_DELIMITER);
            registry.put(DD_MM_YYYY_WITH_SLASH_AS_DELIMITER.getValue(), DD_MM_YYYY_WITH_SLASH_AS_DELIMITER);
            registry.put(YYYY_MM_WITH_SLASH_AS_DELIMITER.getValue(), YYYY_MM_WITH_SLASH_AS_DELIMITER);
            registry.put(MM_YYYY_WITH_SLASH_AS_DELIMITER.getValue(), MM_YYYY_WITH_SLASH_AS_DELIMITER);
            registry.put(YYYY_MM_DD_WITH_SPACE_AS_DELIMITER.getValue(), YYYY_MM_DD_WITH_SPACE_AS_DELIMITER);
            registry.put(DD_MM_YYYY_WITH_SPACE_AS_DELIMITER.getValue(), DD_MM_YYYY_WITH_SPACE_AS_DELIMITER);
            registry.put(YYYY_MM_WITH_SPACE_AS_DELIMITER.getValue(), YYYY_MM_WITH_SPACE_AS_DELIMITER);
            registry.put(MM_YYYY_WITH_SPACE_AS_DELIMITER.getValue(), MM_YYYY_WITH_SPACE_AS_DELIMITER);
        }

    }

    public static final class TimePattern extends NamedObject {

        public static final TimePattern HH_MM_SS_WITH_COLON_AS_DELIMITER = new TimePattern("hh:mm:ss", "Hour:Munite:Second");
        public static final TimePattern HH_MM_WITH_COLON_AS_DELIMITER = new TimePattern("hh:mm", "Hour:Munite");
        public static final TimePattern HH_MM_SS_WITH_MINUS_AS_DELIMITER = new TimePattern("hh-mm-ss", "Hour-Munite-Second");
        public static final TimePattern HH_MM_WITH_MINUS_AS_DELIMITER = new TimePattern("hh-mm", "Hour-Munite");
        public static final TimePattern HH_MM_SS_WITH_SLASH_AS_DELIMITER = new TimePattern("hh/mm/ss", "Hour/Munite/Second");
        public static final TimePattern HH_MM_WITH_SLASH_AS_DELIMITER = new TimePattern("hh/mm", "Hour/Munite");
        public static final TimePattern HH_MM_SS_WITH_SPACE_AS_DELIMITER = new TimePattern("hh mm ss", "Hour Munite Second");
        public static final TimePattern HH_MM_WITH_SPACE_AS_DELIMITER = new TimePattern("hh mm", "Hour Munite");

        private static final Map registry = new HashMap();

        public TimePattern(String value, String name) {
            super(value, name);
        }

        public static TimePattern register(TimePattern timePattern) {
            registry.put(timePattern.getValue(), timePattern);
            return timePattern;
        }

        public static TimePattern getTimePattern(String stringTimePattern) {
            return registry.getOrDefault(stringTimePattern, HH_MM_SS_WITH_SPACE_AS_DELIMITER);
        }

        static {
            registry.put(HH_MM_SS_WITH_COLON_AS_DELIMITER.getValue(), HH_MM_SS_WITH_COLON_AS_DELIMITER);
            registry.put(HH_MM_WITH_COLON_AS_DELIMITER.getValue(), HH_MM_SS_WITH_COLON_AS_DELIMITER);
            registry.put(HH_MM_SS_WITH_MINUS_AS_DELIMITER.getValue(), HH_MM_SS_WITH_COLON_AS_DELIMITER);
            registry.put(HH_MM_WITH_MINUS_AS_DELIMITER.getValue(), HH_MM_SS_WITH_COLON_AS_DELIMITER);
            registry.put(HH_MM_SS_WITH_SLASH_AS_DELIMITER.getValue(), HH_MM_SS_WITH_COLON_AS_DELIMITER);
            registry.put(HH_MM_WITH_SLASH_AS_DELIMITER.getValue(), HH_MM_SS_WITH_COLON_AS_DELIMITER);
            registry.put(HH_MM_SS_WITH_SPACE_AS_DELIMITER.getValue(), HH_MM_SS_WITH_COLON_AS_DELIMITER);
            registry.put(HH_MM_WITH_SPACE_AS_DELIMITER.getValue(), HH_MM_SS_WITH_COLON_AS_DELIMITER);
        }

    }

    private String pattern;

    private DateTimePattern(Builder builder) {

        Validate.nullPointer(builder, new NullPointerException("DateTime builder should be not null."));

        if (builder.datePattern == null && builder.timePattern == null) {
            this.pattern = DEFAULT_PATTERN;
        } else if (builder.datePattern != null && builder.timePattern != null) {
            if (builder.timeBeforeDate == false) {
                this.pattern = builder.datePattern.getValue()
                        + SPACE_DELIMITER
                        + builder.timePattern.getValue();
            } else {
                this.pattern = builder.timePattern.getValue()
                        + SPACE_DELIMITER
                        + builder.datePattern.getValue();
            }
        } else if (builder.datePattern != null && builder.timePattern == null) {
            this.pattern = builder.datePattern.getValue();
        } else if (builder.datePattern == null && builder.timePattern != null) {
            this.pattern = builder.timePattern.getValue();
        } else {
            this.pattern = DEFAULT_PATTERN;
        }

    }

    public String getPattern() {
        return pattern;
    }

    public static Builder builder() {
        return new Builder();
    }

    public static class Builder implements com.ardikars.common.util.Builder {

        private DatePattern datePattern;
        private TimePattern timePattern;
        private boolean timeBeforeDate;

        public Builder datePattern(DatePattern datePattern) {
            this.datePattern = datePattern;
            return this;
        }

        public Builder timePattern(TimePattern timePattern) {
            this.timePattern = timePattern;
            return this;
        }

        public Builder timeBeforeDate(boolean timeBeforeDate) {
            this.timeBeforeDate = timeBeforeDate;
            return this;
        }

        @Override
        public DateTimePattern build() {
            return new DateTimePattern(this);
        }

        @Override
        public DateTimePattern build(Void value) {
            throw new UnsupportedOperationException("");
        }

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy