org.jpmml.evaluator.SecondsSinceMidnight.java Source code

Java tutorial

Introduction

Here is the source code for org.jpmml.evaluator.SecondsSinceMidnight.java

Source

/*
 * Copyright (c) 2013 Villu Ruusmann
 *
 * This file is part of JPMML-Evaluator
 *
 * JPMML-Evaluator is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * JPMML-Evaluator is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with JPMML-Evaluator.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.jpmml.evaluator;

import org.joda.time.*;
import org.joda.time.field.*;
import org.joda.time.format.*;

public class SecondsSinceMidnight implements Comparable<SecondsSinceMidnight> {

    private Seconds seconds = null;

    public SecondsSinceMidnight(Seconds seconds) {
        setSeconds(seconds);
    }

    @Override
    public int compareTo(SecondsSinceMidnight that) {
        return (this.getSeconds()).compareTo(that.getSeconds());
    }

    @Override
    public int hashCode() {
        return getSeconds().hashCode();
    }

    @Override
    public boolean equals(Object object) {

        if (object instanceof SecondsSinceMidnight) {
            SecondsSinceMidnight that = (SecondsSinceMidnight) object;

            return (this.getSeconds()).equals(that.getSeconds());
        }

        return false;
    }

    public int intValue() {
        return getSeconds().getSeconds();
    }

    public Seconds getSeconds() {
        return this.seconds;
    }

    private void setSeconds(Seconds seconds) {
        this.seconds = seconds;
    }

    static public DateTimeFormatter getFormat() {

        if (SecondsSinceMidnight.format == null) {
            SecondsSinceMidnight.format = createFormat();
        }

        return SecondsSinceMidnight.format;
    }

    static private DateTimeFormatter createFormat() {
        DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
        builder = builder.appendSignedDecimal(HoursOfEpochFieldType.getInstance(), 1, 4).appendLiteral(':')
                .appendFixedDecimal(DateTimeFieldType.minuteOfHour(), 2).appendLiteral(':')
                .appendFixedDecimal(DateTimeFieldType.secondOfMinute(), 2);

        return builder.toFormatter();
    }

    private static DateTimeFormatter format = null;

    static private class HoursOfEpochFieldType extends DateTimeFieldType {

        private HoursOfEpochFieldType() {
            super("hoursOfEpoch");
        }

        @Override
        public DurationFieldType getDurationType() {
            return DurationFieldType.hours();
        }

        @Override
        public DurationFieldType getRangeDurationType() {
            return null;
        }

        @Override
        public DateTimeField getField(Chronology chronology) {
            chronology = DateTimeUtils.getChronology(chronology);

            return new PreciseDurationDateTimeField(this, chronology.hours()) {

                @Override
                public int get(long millis) {
                    long hours = (millis / HoursOfEpochFieldType.millisInHour);

                    return FieldUtils.safeToInt(hours);
                }

                @Override
                public DurationField getRangeDurationField() {
                    return null;
                }

                @Override
                public int getMinimumValue() {
                    return 0;
                }

                @Override
                public int getMaximumValue() {
                    return Integer.MAX_VALUE;
                }
            };
        }

        @Override
        public int hashCode() {
            return getName().hashCode();
        }

        @Override
        public boolean equals(Object object) {

            if (object instanceof HoursOfEpochFieldType) {
                HoursOfEpochFieldType that = (HoursOfEpochFieldType) object;

                return (this.getName()).equals(that.getName());
            }

            return false;
        }

        static public HoursOfEpochFieldType getInstance() {

            if (HoursOfEpochFieldType.instance == null) {
                HoursOfEpochFieldType.instance = new HoursOfEpochFieldType();
            }

            return HoursOfEpochFieldType.instance;
        }

        private static HoursOfEpochFieldType instance;

        private static final long millisInHour = (60L * 60L * 1000L);
    }
}