// Copyright (C) 2006 Google Inc. // // 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.google.ical.values; /** * represents a day of the week in a month or year such as the * third monday of the month. A negative num indicates it counts from the * end of the month or year. * * <blockquote> * Each BYDAY value can also be preceded by a positive (+n) or negative * (-n) integer. If present, this indicates the nth occurrence of the * specific day within the MONTHLY or YEARLY RRULE. For example, within * a MONTHLY rule, +1MO (or simply 1MO) represents the first Monday * within the month, whereas -1MO represents the last Monday of the * month. If an integer modifier is not present, it means all days of * this type within the specified frequency. For example, within a * MONTHLY rule, MO represents all Mondays within the month. * </blockquote> * * @author mikesamuel+svn@gmail.com (Mike Samuel) */ public class WeekdayNum { public final int num; public final Weekday wday; /** * @param num in -53,53 * @param wday non null. */ public WeekdayNum(int num, Weekday wday) { if (!(-53 <= num && 53 >= num && null != wday)) { throw new IllegalArgumentException(); } this.num = num; this.wday = wday; } public String toIcal() { return (0 != this.num) ? String.valueOf(this.num) + this.wday : this.wday.toString(); } @Override public String toString() { return toIcal(); } @Override public boolean equals(Object o) { if (!(o instanceof WeekdayNum)) { return false; } WeekdayNum wdn = (WeekdayNum) o; return this.num == wdn.num && this.wday == wdn.wday; } @Override public int hashCode() { return num ^ (53 * wday.hashCode()); } }