001: /* ========================================================================
002: * JCommon : a free general purpose class library for the Java(tm) platform
003: * ========================================================================
004: *
005: * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
006: *
007: * Project Info: http://www.jfree.org/jcommon/index.html
008: *
009: * This library is free software; you can redistribute it and/or modify it
010: * under the terms of the GNU Lesser General Public License as published by
011: * the Free Software Foundation; either version 2.1 of the License, or
012: * (at your option) any later version.
013: *
014: * This library is distributed in the hope that it will be useful, but
015: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
016: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
017: * License for more details.
018: *
019: * You should have received a copy of the GNU Lesser General Public
020: * License along with this library; if not, write to the Free Software
021: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
022: * USA.
023: *
024: * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
025: * in the United States and other countries.]
026: *
027: * --------------------
028: * DayAndMonthRule.java
029: * --------------------
030: * (C) Copyright 2000-2003, by Object Refinery Limited.
031: *
032: * Original Author: David Gilbert (for Object Refinery Limited);
033: * Contributor(s): -;
034: *
035: * $Id: DayAndMonthRule.java,v 1.6 2005/11/16 15:58:40 taqua Exp $
036: *
037: * Changes (from 26-Oct-2001)
038: * --------------------------
039: * 26-Oct-2001 : Changed package to com.jrefinery.date.* (DG);
040: * 12-Nov-2001 : Added some argument checks (DG);
041: * 03-Oct-2002 : Fixed errors reported by Checkstyle (DG);
042: * 01-Jun-2005 : Removed the explicit clonable declaration, it is declared
043: * in the super class.
044: */
045:
046: package org.jfree.date;
047:
048: /**
049: * An annual date rule where the generated date always falls on the same day
050: * and month each year.
051: * <P>
052: * An example is ANZAC Day in Australia and New Zealand: it is observed on
053: * 25 April of every year.
054: *
055: * @author David Gilbert
056: */
057: public class DayAndMonthRule extends AnnualDateRule {
058:
059: /** The day of the month. */
060: private int dayOfMonth;
061:
062: /** The month (uses 1 to 12 in the obvious way). */
063: private int month;
064:
065: /**
066: * Default constructor: builds a DayAndMonthRule for 1 January.
067: */
068: public DayAndMonthRule() {
069: this (1, MonthConstants.JANUARY);
070: }
071:
072: /**
073: * Standard constructor: builds a DayAndMonthRule for the given
074: * day-of-the-month and month.
075: * <P>
076: * For the month parameter, use SerialDate.JANUARY, etc. Note that there
077: * are no checks to prevent you from entering an invalid combination (such
078: * as 31 February).
079: *
080: * @param dayOfMonth the day of the month (in the range 1 to 31).
081: * @param month the month (use SerialDate.JANUARY, SerialDate.FEBRUARY etc.);
082: */
083: public DayAndMonthRule(final int dayOfMonth, final int month) {
084:
085: // check arguments delegated to setter methods...
086: setMonth(month);
087: setDayOfMonth(dayOfMonth);
088:
089: }
090:
091: /**
092: * Returns the day of the month.
093: *
094: * @return the day of the month.
095: */
096: public int getDayOfMonth() {
097: return this .dayOfMonth;
098: }
099:
100: /**
101: * Sets the day-of-the-month for this rule.
102: *
103: * @param dayOfMonth the day-of-the-month.
104: */
105: public void setDayOfMonth(final int dayOfMonth) {
106:
107: // check arguments...
108: if ((dayOfMonth < 1)
109: || (dayOfMonth > SerialDate.LAST_DAY_OF_MONTH[this .month])) {
110: throw new IllegalArgumentException(
111: "DayAndMonthRule(): dayOfMonth outside valid range.");
112: }
113:
114: // make the change...
115: this .dayOfMonth = dayOfMonth;
116:
117: }
118:
119: /**
120: * Returns an integer code representing the month.
121: * <P>
122: * The codes JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST,
123: * SEPTEMBER, OCTOBER, NOVEMBER and DECEMBER are defined in the SerialDate
124: * class.
125: *
126: * @return an integer code representing the month.
127: */
128: public int getMonth() {
129: return this .month;
130: }
131:
132: /**
133: * Sets the month for this rule.
134: *
135: * @param month the month for this rule.
136: */
137: public void setMonth(final int month) {
138:
139: // check arguments...
140: if (!SerialDate.isValidMonthCode(month)) {
141: throw new IllegalArgumentException(
142: "DayAndMonthRule(): month code not valid.");
143: }
144:
145: // make the change...
146: this .month = month;
147:
148: }
149:
150: /**
151: * Returns the date, given the year.
152: *
153: * @param yyyy the year.
154: *
155: * @return the date generated by this rule for the specified year (null permitted).
156: */
157: public SerialDate getDate(final int yyyy) {
158: return SerialDate.createInstance(this.dayOfMonth, this.month,
159: yyyy);
160: }
161: }
|