text: /*
   * Copyright (c) 2000, Columbia University.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   *
   * 3. Neither the name of the University nor the names of its contributors
   *    may be used to endorse or promote products derived from this software
   *    without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
   * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
   * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
   * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
   * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
   * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   */
  
  package com.liferay.util.cal;
  
  import java.io.Serializable;
  import java.util.Calendar;
  
  /**
   * <a href="DayAndPosition.java.html"><b><i>View Source</i></b></a>
   *
   * @author  Jonathan Lennox
   * @version $Revision: 1.3 $
   *
   */
  public class DayAndPosition implements Cloneable, Serializable {
  
  	/**
  	 * Field day
  	 */
  	private int day;
  
  	/**
  	 * Field position
  	 */
  	private int position;
  
  	/**
  	 * Field NO_WEEKDAY
  	 */
  	public final static int NO_WEEKDAY = 0;
  
  	/**
  	 * Constructor DayAndPosition
  	 *
  	 *
  	 */
  	public DayAndPosition() {
  		day = NO_WEEKDAY;
  		position = 0;
  	}
  
  	/**
  	 * Constructor DayAndPosition
  	 *
  	 *
  	 * @param	d
  	 * @param	p
  	 *
  	 */
  	public DayAndPosition(int d, int p) {
  		if (!isValidDayOfWeek(d)) {
  			throw new IllegalArgumentException("Invalid day of week");
  		}
  
  		if (!isValidDayPosition(p)) {
  			throw new IllegalArgumentException("Invalid day position");
  		}
  
  		day = d;
  		position = p;
  	}
  
  	/**
  	 * Method getDayOfWeek
  	 *
  	 *
  	 * @return	int
  	 *
  	 */
  	public int getDayOfWeek() {
  		return day;
  	}
  
  	/**
  	 * Method setDayOfWeek
  	 *
  	 *
  	 * @param	d
  	 *
  	 */
  	public void setDayOfWeek(int d) {
  		if (!isValidDayOfWeek(d)) {
  			throw new IllegalArgumentException("Invalid day of week");
  		}
  
  		day = d;
  	}
  
  	/**
  	 * Method getDayPosition
  	 *
  	 *
  	 * @return	int
  	 *
  	 */
  	public int getDayPosition() {
  		return position;
  	}
  
  	/**
  	 * Method setDayPosition
  	 *
  	 *
  	 * @param	p
  	 *
  	 */
  	public void setDayPosition(int p) {
  		if (!isValidDayPosition(p)) {
  			throw new IllegalArgumentException();
  		}
  
  		position = p;
  	}
  
  	/**
  	 * Method equals
  	 *
  	 *
  	 * @param	obj
  	 *
  	 * @return	boolean
  	 *
  	 */
  	public boolean equals(Object obj) {
  		if (obj == null) {
  			return false;
  		}
  
  		if (this == obj) {
  			return true;
  		}
  
  		if (!(obj instanceof DayAndPosition)) {
  			return false;
  		}
  
  		DayAndPosition that = (DayAndPosition)obj;
  
  		return (getDayOfWeek() == that.getDayOfWeek())
  			   && (getDayPosition() == that.getDayPosition());
  	}
  
  	/**
  	 * Method isValidDayOfWeek
  	 *
  	 *
  	 * @param	d
  	 *
  	 * @return	boolean
  	 *
  	 */
  	public static boolean isValidDayOfWeek(int d) {
  		switch (d) {
  
  			case NO_WEEKDAY :
  			case Calendar.SUNDAY :
  			case Calendar.MONDAY :
  			case Calendar.TUESDAY :
  			case Calendar.WEDNESDAY :
  			case Calendar.THURSDAY :
  			case Calendar.FRIDAY :
  			case Calendar.SATURDAY :
  				return true;
  
  			default :
  				return false;
  		}
  	}
  
  	/**
  	 * Method isValidDayPosition
  	 *
  	 *
  	 * @param	p
  	 *
  	 * @return	boolean
  	 *
  	 */
  	public static boolean isValidDayPosition(int p) {
  		return ((p >= -53) && (p <= 53));
  	}
  
  	/**
  	 * Method clone
  	 *
  	 *
  	 * @return	Object
  	 *
  	 */
  	public Object clone() {
  		try {
  			DayAndPosition other = (DayAndPosition)super.clone();
  
  			other.day = day;
  			other.position = position;
  
  			return other;
  		}
  		catch (CloneNotSupportedException e) {
  			throw new InternalError();
  		}
  	}
  
  	/**
  	 * Method toString
  	 *
  	 *
  	 * @return	String
  	 *
  	 */
  	public String toString() {
  		StringBuffer buffer = new StringBuffer();
  
  		buffer.append(getClass().getName());
  		buffer.append("[day=");
  		buffer.append(day);
  		buffer.append(",position=");
  		buffer.append(position);
  		buffer.append("]");
  
  		return buffer.toString();
  	}
  
  }