| Duration.java |
1 /**
2 * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20 * SOFTWARE.
21 */
22
23 /*
24 * Copyright (c) 2000, Columbia University. All rights reserved.
25 *
26 * Redistribution and use in source and binary forms, with or without
27 * modification, are permitted provided that the following conditions are met:
28 *
29 * 1. Redistributions of source code must retain the above copyright
30 * notice, this list of conditions and the following disclaimer.
31 *
32 * 2. Redistributions in binary form must reproduce the above copyright
33 * notice, this list of conditions and the following disclaimer in the
34 * documentation and/or other materials provided with the distribution.
35 *
36 * 3. Neither the name of the University nor the names of its contributors
37 * may be used to endorse or promote products derived from this software
38 * without specific prior written permission.
39 *
40 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
41 * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
42 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
44 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
45 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
46 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
47 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
48 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
49 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
50 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
51 */
52
53 package com.liferay.util.cal;
54
55 import java.io.Serializable;
56
57 /**
58 * <a href="Duration.java.html"><b><i>View Source</i></b></a>
59 *
60 * @author Jonathan Lennox
61 *
62 * @deprecated This class has been repackaged at
63 * <code>com.liferay.portal.kernel.cal</code>.
64 *
65 */
66 public class Duration implements Cloneable, Serializable {
67
68 /**
69 * Field weeks
70 */
71 private int weeks;
72
73 /**
74 * Field days
75 */
76 private int days;
77
78 /**
79 * Field hours
80 */
81 private int hours;
82
83 /**
84 * Field minutes
85 */
86 private int minutes;
87
88 /**
89 * Field seconds
90 */
91 private int seconds;
92
93 /**
94 * Field SECONDS_PER_MINUTE
95 */
96 private final static int SECONDS_PER_MINUTE = 60;
97
98 /**
99 * Field MINUTES_PER_HOUR
100 */
101 private final static int MINUTES_PER_HOUR = 60;
102
103 /**
104 * Field HOURS_PER_DAY
105 */
106 private final static int HOURS_PER_DAY = 24;
107
108 /**
109 * Field DAYS_PER_WEEK
110 */
111 private final static int DAYS_PER_WEEK = 7;
112
113 /**
114 * Field MILLIS_PER_SECOND
115 */
116 private final static int MILLIS_PER_SECOND = 1000;
117
118 /**
119 * Field MILLIS_PER_MINUTE
120 */
121 private final static int MILLIS_PER_MINUTE = SECONDS_PER_MINUTE
122 * MILLIS_PER_SECOND;
123
124 /**
125 * Field MILLIS_PER_HOUR
126 */
127 private final static int MILLIS_PER_HOUR = MINUTES_PER_HOUR
128 * MILLIS_PER_MINUTE;
129
130 /**
131 * Field MILLIS_PER_DAY
132 */
133 private final static int MILLIS_PER_DAY = HOURS_PER_DAY * MILLIS_PER_HOUR;
134
135 /**
136 * Field MILLIS_PER_WEEK
137 */
138 private final static int MILLIS_PER_WEEK = DAYS_PER_WEEK * MILLIS_PER_DAY;
139
140 /**
141 * Constructor Duration
142 *
143 *
144 */
145 public Duration() {
146
147 /* Zero-initialization of all fields happens by default */
148
149 }
150
151 /**
152 * Constructor Duration
153 *
154 *
155 * @param d
156 * @param h
157 * @param m
158 * @param s
159 *
160 */
161 public Duration(int d, int h, int m, int s) {
162 days = d;
163 hours = h;
164 minutes = m;
165 seconds = s;
166 }
167
168 /**
169 * Constructor Duration
170 *
171 *
172 * @param h
173 * @param m
174 * @param s
175 *
176 */
177 public Duration(int h, int m, int s) {
178 this(0, h, m, s);
179 }
180
181 /**
182 * Constructor Duration
183 *
184 *
185 * @param w
186 *
187 */
188 public Duration(int w) {
189 weeks = w;
190 }
191
192 /**
193 * Method clear
194 *
195 *
196 */
197 public void clear() {
198 weeks = 0;
199 days = 0;
200 hours = 0;
201 minutes = 0;
202 seconds = 0;
203 }
204 ;
205
206 /**
207 * Method getWeeks
208 *
209 *
210 * @return int
211 *
212 */
213 public int getWeeks() {
214 return weeks;
215 }
216
217 /**
218 * Method setWeeks
219 *
220 *
221 * @param w
222 *
223 */
224 public void setWeeks(int w) {
225 if (w < 0) {
226 throw new IllegalArgumentException("Week value out of range");
227 }
228
229 checkWeeksOkay(w);
230
231 weeks = w;
232 }
233
234 /**
235 * Method getDays
236 *
237 *
238 * @return int
239 *
240 */
241 public int getDays() {
242 return days;
243 }
244
245 /**
246 * Method setDays
247 *
248 *
249 * @param d
250 *
251 */
252 public void setDays(int d) {
253 if (d < 0) {
254 throw new IllegalArgumentException("Day value out of range");
255 }
256
257 checkNonWeeksOkay(d);
258
259 days = d;
260
261 normalize();
262 }
263
264 /**
265 * Method getHours
266 *
267 *
268 * @return int
269 *
270 */
271 public int getHours() {
272 return hours;
273 }
274
275 /**
276 * Method setHours
277 *
278 *
279 * @param h
280 *
281 */
282 public void setHours(int h) {
283 if (h < 0) {
284 throw new IllegalArgumentException("Hour value out of range");
285 }
286
287 checkNonWeeksOkay(h);
288
289 hours = h;
290
291 normalize();
292 }
293
294 /**
295 * Method getMinutes
296 *
297 *
298 * @return int
299 *
300 */
301 public int getMinutes() {
302 return minutes;
303 }
304
305 /**
306 * Method setMinutes
307 *
308 *
309 * @param m
310 *
311 */
312 public void setMinutes(int m) {
313 if (m < 0) {
314 throw new IllegalArgumentException("Minute value out of range");
315 }
316
317 checkNonWeeksOkay(m);
318
319 minutes = m;
320
321 normalize();
322 }
323
324 /**
325 * Method getSeconds
326 *
327 *
328 * @return int
329 *
330 */
331 public int getSeconds() {
332 return seconds;
333 }
334
335 /**
336 * Method setSeconds
337 *
338 *
339 * @param s
340 *
341 */
342 public void setSeconds(int s) {
343 if (s < 0) {
344 throw new IllegalArgumentException("Second value out of range");
345 }
346
347 checkNonWeeksOkay(s);
348
349 seconds = s;
350
351 normalize();
352 }
353
354 /**
355 * Method getInterval
356 *
357 *
358 * @return long
359 *
360 */
361 public long getInterval() {
362 return seconds * MILLIS_PER_SECOND + minutes * MILLIS_PER_MINUTE
363 + hours * MILLIS_PER_HOUR + days * MILLIS_PER_DAY
364 + weeks * MILLIS_PER_WEEK;
365 }
366
367 /**
368 * Method setInterval
369 *
370 *
371 * @param millis
372 *
373 */
374 public void setInterval(long millis) {
375 if (millis < 0) {
376 throw new IllegalArgumentException("Negative-length interval");
377 }
378
379 clear();
380
381 days = (int)(millis / MILLIS_PER_DAY);
382 seconds = (int)((millis % MILLIS_PER_DAY) / MILLIS_PER_SECOND);
383
384 normalize();
385 }
386
387 /**
388 * Method normalize
389 *
390 *
391 */
392 protected void normalize() {
393 minutes += seconds / SECONDS_PER_MINUTE;
394 seconds %= SECONDS_PER_MINUTE;
395 hours += minutes / MINUTES_PER_HOUR;
396 minutes %= MINUTES_PER_HOUR;
397 days += hours / HOURS_PER_DAY;
398 hours %= HOURS_PER_DAY;
399 }
400
401 /**
402 * Method checkWeeksOkay
403 *
404 *
405 * @param f
406 *
407 */
408 protected void checkWeeksOkay(int f) {
409 if ((f != 0)
410 && ((days != 0) || (hours != 0) || (minutes != 0)
411 || (seconds != 0))) {
412 throw new IllegalStateException(
413 "Weeks and non-weeks are incompatible");
414 }
415 }
416
417 /**
418 * Method checkNonWeeksOkay
419 *
420 *
421 * @param f
422 *
423 */
424 protected void checkNonWeeksOkay(int f) {
425 if ((f != 0) && (weeks != 0)) {
426 throw new IllegalStateException(
427 "Weeks and non-weeks are incompatible");
428 }
429 }
430
431 /**
432 * Method clone
433 *
434 *
435 * @return Object
436 *
437 */
438 public Object clone() {
439 try {
440 Duration other = (Duration)super.clone();
441
442 other.weeks = weeks;
443 other.days = days;
444 other.hours = hours;
445 other.minutes = minutes;
446 other.seconds = seconds;
447
448 return other;
449 }
450 catch (CloneNotSupportedException e) {
451 throw new InternalError();
452 }
453 }
454
455 /**
456 * Method toString
457 *
458 *
459 * @return String
460 *
461 */
462 public String toString() {
463 StringBuilder sb = new StringBuilder();
464
465 sb.append(getClass().getName());
466 sb.append("[weeks=");
467 sb.append(weeks);
468 sb.append(",days=");
469 sb.append(days);
470 sb.append(",hours=");
471 sb.append(hours);
472 sb.append(",minutes=");
473 sb.append(minutes);
474 sb.append(",seconds=");
475 sb.append(seconds);
476 sb.append("]");
477
478 return sb.toString();
479 }
480
481 }