org.projectforge.address.BirthdayAddress.java Source code

Java tutorial

Introduction

Here is the source code for org.projectforge.address.BirthdayAddress.java

Source

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2013 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition 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 General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.address;

import java.io.Serializable;
import java.util.Date;

import org.apache.commons.lang.builder.HashCodeBuilder;
import org.projectforge.common.DateHolder;
import org.projectforge.common.StringHelper;

public class BirthdayAddress implements Comparable<BirthdayAddress>, Serializable {
    private static final long serialVersionUID = -611024181799550736L;

    private final String dateOfYear;

    private final String compareString;

    private final int month;

    private final int dayOfMonth;

    private boolean isFavorite;

    private int age = -1;

    AddressDO address;

    public BirthdayAddress(final AddressDO address) {
        this.address = address;
        if (address.getBirthday() == null) {
            throw new UnsupportedOperationException("Birthday not given!");
        }
        final DateHolder day = new DateHolder(address.getBirthday());
        month = day.getMonth();
        dayOfMonth = day.getDayOfMonth();
        dateOfYear = getDateOfYear(month, dayOfMonth);
        compareString = dateOfYear + " " + address.getName() + ", " + address.getFirstName();
    }

    @Override
    public boolean equals(final Object obj) {
        return compareString.equals(((BirthdayAddress) obj).compareString);
    }

    @Override
    public int hashCode() {
        final HashCodeBuilder hcb = new HashCodeBuilder();
        hcb.append(this.compareString);
        return hcb.toHashCode();
    }

    public int compareTo(final BirthdayAddress o) {
        return this.compareString.compareTo(o.compareString);
    }

    /**
     * Ignores the year!
     * @see #getDateOfYear(Date)
     */
    public boolean isSameDay(final Date date) {
        return this.dateOfYear.equals(getDateOfYear(date));
    }

    /** Sets and gets the age of the person at the given date. */
    public int setAge(final Date date) {
        final DateHolder dh = new DateHolder(date);
        final DateHolder birthday = new DateHolder(address.getBirthday());
        age = dh.getYear() - birthday.getYear();
        return age;
    }

    /** Gets the age of the person at the date of the last call of getAge(Date). */
    public int getAge() {
        return age;
    }

    public AddressDO getAddress() {
        return address;
    }

    /**
     * Format {mmdd} (month, day of month)
     */
    public String getDateOfYear() {
        return dateOfYear;
    }

    /**
     * Format {mmdd name, firstname} (month, day of month, ...)
     */
    public String getCompareString() {
        return compareString;
    }

    public boolean isFavorite() {
        return isFavorite;
    }

    public void setFavorite(final boolean isFavorite) {
        this.isFavorite = isFavorite;
    }

    /**
     * 0 - January, 1 - February...
     */
    public int getMonth() {
        return month;
    }

    /**
     * Java calendar style.
     */
    public int getDayOfMonth() {
        return dayOfMonth;
    }

    @Override
    public String toString() {
        return compareString;
    }

    /**
     * Gets the date of year as string (without year) in format {mmdd}.
     * @param date
     */
    public static String getDateOfYear(final Date date) {
        if (date == null) {
            throw new UnsupportedOperationException("Date not given!");
        }
        final DateHolder dh = new DateHolder(date);
        return getDateOfYear(dh.getMonth(), dh.getDayOfMonth());
    }

    public static String getDateOfYear(final int month, final int dayOfMonth) {
        return StringHelper.format2DigitNumber(month) + StringHelper.format2DigitNumber(dayOfMonth);
    }
}