TVShowTimelineMaker.util.DayOfYear.java Source code

Java tutorial

Introduction

Here is the source code for TVShowTimelineMaker.util.DayOfYear.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package TVShowTimelineMaker.util;

import TVShowTimelineMaker.util.XML.XMLWriterImp;
import java.util.Set;
import java.util.logging.Logger;
import org.jdom2.Element;
import org.joda.time.DateTime;
import org.joda.time.Interval;

/**
 *
 * @author Steven Owens
 */
public final class DayOfYear implements Comparable<DayOfYear> {

    public static final Set<DayOfYear> fullYear;

    public static final DayOfYear startOfYear = new DayOfYear(1, 1);
    public static final DayOfYear endOfYear = new DayOfYear(12, 31);
    private static final Logger LOG = Logger.getLogger(DayOfYear.class.getName());

    static {
        java.util.Set<DayOfYear> tempFullYear = new java.util.HashSet<>(365);
        for (DayOfYear curDay = new DayOfYear(1, 1); curDay != null; curDay = curDay.plusDaysNoWrap(1)) {
            tempFullYear.add(curDay);
        }
        fullYear = java.util.Collections.unmodifiableSet(tempFullYear);
    }

    public static DayOfYear fromDateTime(DateTime inDateTime) {
        return new DayOfYear(inDateTime.getMonthOfYear(), inDateTime.getDayOfMonth());
    }

    private final int mMonth;
    private final int mDay;

    public DayOfYear(int inMonth, int inDay) {
        this.mMonth = inMonth;
        this.mDay = inDay;
    }

    /**
     * @return the Month
     */
    public int getMonth() {
        return this.mMonth;
    }

    /**
     * @return the Day
     */
    public int getDay() {
        return this.mDay;
    }

    public boolean isBefore(DayOfYear inDayOfYear) {
        if (this.mMonth < inDayOfYear.mMonth) {
            return true;
        } else if (this.mMonth > inDayOfYear.mMonth) {
            return false;
        } else if (this.mDay < inDayOfYear.mDay) {
            return true;
        } else {
            return false;
        }
    }

    public boolean isEqualOrBefore(DayOfYear inDayOfYear) {
        return this.isBefore(inDayOfYear) || this.equals(inDayOfYear);
    }

    public boolean isAfter(DayOfYear inDayOfYear) {
        if (this.mMonth < inDayOfYear.mMonth) {
            return false;
        } else if (this.mMonth > inDayOfYear.mMonth) {
            return true;
        } else if (this.mDay < inDayOfYear.mDay) {
            return false;
        } else if (this.mDay > inDayOfYear.mDay) {
            return true;
        } else {
            return false;
        }
    }

    public boolean isEqualOrAfter(DayOfYear inDayOfYear) {
        return this.isAfter(inDayOfYear) || this.equals(inDayOfYear);
    }

    @Override
    public boolean equals(Object o) {
        if (o instanceof DayOfYear) {
            DayOfYear inO = (DayOfYear) o;
            return (this.mMonth == inO.mMonth) && (this.mDay == inO.mDay);
        } else {
            return false;
        }
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 41 * hash + this.mMonth;
        hash = 41 * hash + this.mDay;
        return hash;
    }

    public DayOfYear plusDays(int i) {
        DateTime curDateTime = this.toDateTime();
        curDateTime = curDateTime.plusDays(i);
        return fromDateTime(curDateTime);
    }

    public DayOfYear plusDaysNoWrap(int i) {
        DateTime curDateTime = this.toDateTime();
        curDateTime = curDateTime.plusDays(i);
        if (curDateTime.getYear() == 0) {
            return fromDateTime(curDateTime);
        } else {
            return null;
        }
    }

    public DateTime toDateTime() {
        return new DateTime(0, this.mMonth, this.mDay, 12, 0);
    }

    @Override
    public int compareTo(DayOfYear o) {
        int cValue = java.lang.Integer.compare(this.mMonth, o.mMonth);
        if (cValue != 0) {
            return cValue;
        }
        cValue = java.lang.Integer.compare(this.mDay, o.mDay);
        return cValue;
    }

    public int diff(DayOfYear inDayOfYear) {
        int rValue;
        if (this.equals(inDayOfYear)) {
            rValue = 0;
        } else if (this.isBefore(inDayOfYear)) {
            rValue = new Interval(this.toDateTime(), inDayOfYear.toDateTime())
                    .toPeriod(org.joda.time.PeriodType.days()).getDays();
        } else if (this.isAfter(inDayOfYear)) {
            rValue = new Interval(this.toDateTime(), inDayOfYear.toDateTime().withYear(1))
                    .toPeriod(org.joda.time.PeriodType.days()).getDays();
        } else {
            rValue = 366;
        }
        return rValue;
    }

    @Override
    public String toString() {
        return this.mMonth + "\\" + this.mDay;
    }

    public static class DayOfYearXMLWriter extends XMLWriterImp<DayOfYear> {

        @com.civprod.dynamicClassLoading.ClassInitalizer
        public static final void init() {
            XMLWriterImp.addXMLWriter(DayOfYear.class, new DayOfYearXMLWriter());
        }

        @Override
        public Element writeElements(DayOfYear ObjectToWrite) {
            Element newElement = new Element("DayOfYear");
            Element MonthElement = new Element("Month");
            MonthElement.setText(java.lang.Integer.toString(ObjectToWrite.mMonth));
            newElement.addContent(MonthElement);
            Element DayElement = new Element("Day");
            DayElement.setText(java.lang.Integer.toString(ObjectToWrite.mDay));
            newElement.addContent(DayElement);
            return newElement;
        }

        @Override
        public DayOfYear readElements(Element root) {
            Element MonthElement = root.getChild("Month");
            if (MonthElement == null) {
                int a = 1 + 2;
            }
            int tempMonth = java.lang.Integer.parseInt(MonthElement.getTextNormalize());
            Element DayElement = root.getChild("Day");
            int tempDay = java.lang.Integer.parseInt(DayElement.getTextNormalize());
            return new DayOfYear(tempMonth, tempDay);
        }
    }

}