1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  /*
16   * Copyright (c) 2000, Columbia University.  All rights reserved.
17   *
18   * Redistribution and use in source and binary forms, with or without
19   * modification, are permitted provided that the following conditions are met:
20   *
21   * 1. Redistributions of source code must retain the above copyright
22   *    notice, this list of conditions and the following disclaimer.
23   *
24   * 2. Redistributions in binary form must reproduce the above copyright
25   *    notice, this list of conditions and the following disclaimer in the
26   *    documentation and/or other materials provided with the distribution.
27   *
28   * 3. Neither the name of the University nor the names of its contributors
29   *    may be used to endorse or promote products derived from this software
30   *    without specific prior written permission.
31   *
32   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
33   * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
34   * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
35   * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
36   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
37   * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
38   * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
39   * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
40   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
41   * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
42   * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43   */
44  
45  package com.liferay.portal.kernel.cal;
46  
47  import com.liferay.portal.kernel.util.HashCode;
48  import com.liferay.portal.kernel.util.HashCodeFactoryUtil;
49  import com.liferay.portal.kernel.util.StringBundler;
50  
51  import java.io.Serializable;
52  
53  import java.util.Calendar;
54  
55  /**
56   * <a href="DayAndPosition.java.html"><b><i>View Source</i></b></a>
57   *
58   * @author Jonathan Lennox
59   */
60  public class DayAndPosition implements Cloneable, Serializable {
61  
62      /**
63       * Field day
64       */
65      private int day;
66  
67      /**
68       * Field position
69       */
70      private int position;
71  
72      /**
73       * Field NO_WEEKDAY
74       */
75      public static final int NO_WEEKDAY = 0;
76  
77      /**
78       * Constructor DayAndPosition
79       */
80      public DayAndPosition() {
81          day = NO_WEEKDAY;
82          position = 0;
83      }
84  
85      /**
86       * Constructor DayAndPosition
87       */
88      public DayAndPosition(int d, int p) {
89          if (!isValidDayOfWeek(d)) {
90              throw new IllegalArgumentException("Invalid day of week");
91          }
92  
93          if (!isValidDayPosition(p)) {
94              throw new IllegalArgumentException("Invalid day position");
95          }
96  
97          day = d;
98          position = p;
99      }
100 
101     /**
102      * Method getDayOfWeek
103      *
104      * @return int
105      */
106     public int getDayOfWeek() {
107         return day;
108     }
109 
110     /**
111      * Method setDayOfWeek
112      */
113     public void setDayOfWeek(int d) {
114         if (!isValidDayOfWeek(d)) {
115             throw new IllegalArgumentException("Invalid day of week");
116         }
117 
118         day = d;
119     }
120 
121     /**
122      * Method getDayPosition
123      *
124      * @return int
125      */
126     public int getDayPosition() {
127         return position;
128     }
129 
130     /**
131      * Method setDayPosition
132      */
133     public void setDayPosition(int p) {
134         if (!isValidDayPosition(p)) {
135             throw new IllegalArgumentException();
136         }
137 
138         position = p;
139     }
140 
141     /**
142      * Method equals
143      *
144      * @return boolean
145      */
146     public boolean equals(Object obj) {
147         if (obj == null) {
148             return false;
149         }
150 
151         if (this == obj) {
152             return true;
153         }
154 
155         if (!(obj instanceof DayAndPosition)) {
156             return false;
157         }
158 
159         DayAndPosition that = (DayAndPosition)obj;
160 
161         return (getDayOfWeek() == that.getDayOfWeek())
162                && (getDayPosition() == that.getDayPosition());
163     }
164 
165     public int hashCode() {
166         HashCode hashCode = HashCodeFactoryUtil.getHashCode();
167 
168         hashCode.append(day);
169         hashCode.append(position);
170 
171         return hashCode.toHashCode();
172     }
173 
174     /**
175      * Method isValidDayOfWeek
176      *
177      * @return boolean
178      */
179     public static boolean isValidDayOfWeek(int d) {
180         switch (d) {
181 
182             case NO_WEEKDAY :
183             case Calendar.SUNDAY :
184             case Calendar.MONDAY :
185             case Calendar.TUESDAY :
186             case Calendar.WEDNESDAY :
187             case Calendar.THURSDAY :
188             case Calendar.FRIDAY :
189             case Calendar.SATURDAY :
190                 return true;
191 
192             default :
193                 return false;
194         }
195     }
196 
197     /**
198      * Method isValidDayPosition
199      *
200      * @return boolean
201      */
202     public static boolean isValidDayPosition(int p) {
203         return ((p >= -53) && (p <= 53));
204     }
205 
206     /**
207      * Method clone
208      *
209      * @return Object
210      */
211     public Object clone() {
212         try {
213             DayAndPosition other = (DayAndPosition)super.clone();
214 
215             other.day = day;
216             other.position = position;
217 
218             return other;
219         }
220         catch (CloneNotSupportedException e) {
221             throw new InternalError();
222         }
223     }
224 
225     /**
226      * Method toString
227      *
228      * @return String
229      */
230     public String toString() {
231         StringBundler sb = new StringBundler(6);
232 
233         sb.append(getClass().getName());
234         sb.append("[day=");
235         sb.append(day);
236         sb.append(",position=");
237         sb.append(position);
238         sb.append("]");
239 
240         return sb.toString();
241     }
242 
243 }