d13422c2538428965be764b0a01104a8e9aa24f9
[aquarium] / src / main / scala / gr / grnet / aquarium / logic / accounting / dsl / DSLTimeSpec.scala
1 /*
2  * Copyright 2011-2012 GRNET S.A. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or
5  * without modification, are permitted provided that the following
6  * conditions are met:
7  *
8  *   1. Redistributions of source code must retain the above
9  *      copyright notice, this list of conditions and the following
10  *      disclaimer.
11  *
12  *   2. Redistributions in binary form must reproduce the above
13  *      copyright notice, this list of conditions and the following
14  *      disclaimer in the documentation and/or other materials
15  *      provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  *
30  * The views and conclusions contained in the software and
31  * documentation are those of the authors and should not be
32  * interpreted as representing official policies, either expressed
33  * or implied, of GRNET S.A.
34  */
35
36 package gr.grnet.aquarium.logic.accounting.dsl
37
38 import java.util.Calendar
39
40 /**
41  * Represents an instance of an expanded cronstring declaration. Enforces,
42  * at object creation time, the following conditions:
43  *
44  *  - 0 < `min` < 60
45  *  - 0 < `hour` < 24
46  *  - -1 < `dom` < 31 and `dom` not equal to 0
47  *  - -1 < `mon` < 12 and `mon` not equal to 0
48  *  - -1 < `dow` < 7
49  * 
50  * A value of -1 for the fields `dom`,`mon` and `dow` means that the defined
51  * time moment can be repeated within a timeframe.
52  * `min` and `hour` fields cannot be used to define repetitive time moments.
53  *
54  * @author Georgios Gousios <gousiosg@gmail.com>
55  */
56 case class DSLTimeSpec(
57   min: Int,
58   hour: Int,
59   dom: Int,
60   mon: Int,
61   dow: Int
62 ) extends DSLItem {
63   //Preconditions to force correct values on object creation
64   assert(0 <= min && 60 > min)
65   assert(0 <= hour && 24 > hour)
66   assert(-1 <= dom && 31 > dom && dom != 0)
67   assert(-1 <= mon && 12 > mon && mon != 0)
68   assert(-1 <= dow && 7 > dow)
69
70   /** Day of week conversions to stay compatible with [[java.util.Calendar]] */
71   def getCalendarDow(): Int = dow match {
72     case 0 => Calendar.SUNDAY
73     case 1 => Calendar.MONDAY
74     case 2 => Calendar.TUESDAY
75     case 3 => Calendar.WEDNESDAY
76     case 4 => Calendar.THURSDAY
77     case 5 => Calendar.FRIDAY
78     case 6 => Calendar.SATURDAY
79     case 7 => Calendar.SUNDAY
80   }
81
82   /** Month conversions to stay compatible with [[java.util.Calendar]] */
83   def getCalendarMonth(): Int = mon match {
84     case 1 => Calendar.JANUARY
85     case 2 => Calendar.FEBRUARY
86     case 3 => Calendar.MARCH
87     case 4 => Calendar.APRIL
88     case 5 => Calendar.MAY
89     case 6 => Calendar.JUNE
90     case 7 => Calendar.JULY
91     case 8 => Calendar.AUGUST
92     case 9 => Calendar.SEPTEMBER
93     case 10 => Calendar.OCTOBER
94     case 11 => Calendar.NOVEMBER
95     case 12 => Calendar.DECEMBER
96   }
97 }
98
99 object DSLTimeSpec {
100   val emtpyTimeSpec = DSLTimeSpec(0, 0, 0, 0, 0)
101 }