sync with tizen_2.0
[platform/framework/native/appfw.git] / src / locales / FLclTimeRule.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file            FLclTimeRule.cpp
20  * @brief           This file contains implementation of TimeRule class
21  */
22
23 #include <FLclTimeRule.h>
24 #include <FBaseResult.h>
25 #include <FBaseInteger.h>
26
27 using namespace Tizen::Base;
28 using namespace Tizen::Locales;
29 using namespace Tizen::System;
30
31 namespace Tizen { namespace Locales
32 {
33
34 /**
35  * @enum DstRuleMode
36  * Possible DST rule mode
37  */
38 enum DstRuleMode
39 {
40         EXACT_DAY = 0,
41         DAY_OF_WEEK_IN_MONTH,
42         AFTER_THE_SPECIFIED_DAY,
43         BEFORE_THE_SPECIFIED_DAY,
44         BACKWARD_FROM_END_OF_MONTH
45 };
46
47 TimeRule::TimeRule(const TimeRule& timeRule)
48         : __pTimeRuleImpl(null)
49 {
50         __month = timeRule.__month;
51         __day = timeRule.__day;
52         __week = timeRule.__week;
53         __dayOfWeek = timeRule.__dayOfWeek;
54         __hour = timeRule.__hour;
55         __minute = timeRule.__minute;
56         __timeMode = timeRule.__timeMode;
57         __onOrAfterDay = timeRule.__onOrAfterDay;
58 }
59
60
61 TimeRule::~TimeRule(void)
62 {
63 }
64
65
66 // Exact day
67 TimeRule::TimeRule(Month month, int day, int hour, int minute, TimeMode timeMode)
68         : __pTimeRuleImpl(null)
69 {
70         SetValue(month, day, WEEK_UNDEFINED, DAY_OF_WEEK_UNDEFINED, true, hour, minute, timeMode);
71 }
72
73
74 // The day of week of x-th week of month / The Last day of week of month
75 TimeRule::TimeRule(Month month, Week week, DayOfWeek dayOfWeek, int hour, int minute, TimeMode timeMode)
76         : __pTimeRuleImpl(null)
77 {
78         SetValue(month, DAY_UNDEFINED, week, dayOfWeek, true, hour, minute, timeMode);
79 }
80
81
82 // Day of week on or before/after day of month
83 TimeRule::TimeRule(Month month, int day, DayOfWeek dayOfWeek, bool onOrAfterDay, int hour, int minute, TimeMode timeMode)
84         : __pTimeRuleImpl(null)
85 {
86         SetValue(month, day, WEEK_UNDEFINED, dayOfWeek, onOrAfterDay, hour, minute, timeMode);
87 }
88
89
90 // Internal construction method
91 void
92 TimeRule::SetValue(Month month, int day, Week week, DayOfWeek dayOfWeek, bool onOrAfterDay, int hour, int minute,
93                                    TimeMode timeMode)
94 {
95         __month = month;
96         __day = day;
97         __week = week;
98         __dayOfWeek = dayOfWeek;
99         __hour = hour;
100         __minute = minute;
101         __timeMode = timeMode;
102         __onOrAfterDay = onOrAfterDay;
103 }
104
105
106 Month
107 TimeRule::GetMonth(void) const
108 {
109         return __month;
110 }
111
112
113 int
114 TimeRule::GetDay(void) const
115 {
116         return __day;
117 }
118
119
120 Week
121 TimeRule::GetWeek(void) const
122 {
123         return __week;
124 }
125
126
127 DayOfWeek
128 TimeRule::GetDayOfWeek(void) const
129 {
130         return __dayOfWeek;
131 }
132
133
134 int
135 TimeRule::GetHour(void) const
136 {
137         return __hour;
138 }
139
140 int
141 TimeRule::GetMinute(void) const
142 {
143         return __minute;
144 }
145
146
147 TimeMode
148 TimeRule::GetTimeMode(void) const
149 {
150         return __timeMode;
151 }
152
153
154 bool
155 TimeRule::IsOnOrAfterDay(void) const
156 {
157         return __onOrAfterDay;
158 }
159
160 TimeRule&
161 TimeRule::operator =(const TimeRule& timeRule)
162 {
163         if (&timeRule != this)
164         {
165                 __month = timeRule.__month;
166                 __day = timeRule.__day;
167                 __week = timeRule.__week;
168                 __dayOfWeek = timeRule.__dayOfWeek;
169                 __hour = timeRule.__hour;
170                 __minute = timeRule.__minute;
171                 __timeMode = timeRule.__timeMode;
172                 __onOrAfterDay = timeRule.__onOrAfterDay;
173         }
174         return *this;
175 }
176
177 int
178 TimeRule::GetRuleMode(void) const
179 {
180         DstRuleMode ruleMode;
181
182         if (DAY_UNDEFINED != __day)
183         {
184                 if (__dayOfWeek == DAY_OF_WEEK_UNDEFINED)
185                 {
186                         ruleMode = EXACT_DAY;
187                 }
188                 else
189                 {
190                         ruleMode = __onOrAfterDay ? AFTER_THE_SPECIFIED_DAY : BEFORE_THE_SPECIFIED_DAY;
191                 }
192         }
193         else
194         {
195                 ruleMode = DAY_OF_WEEK_IN_MONTH;
196         }
197
198         return static_cast< int >(ruleMode);
199 }
200
201 bool
202 TimeRule::Equals(const Object& obj) const
203 {
204         const TimeRule* pOtherTimeRule = dynamic_cast< const TimeRule* >(&obj);
205         if (pOtherTimeRule)
206         {
207                 if (__month == pOtherTimeRule->__month
208                         && __day == pOtherTimeRule->__day
209                         && __week == pOtherTimeRule->__week
210                         && __dayOfWeek == pOtherTimeRule->__dayOfWeek
211                         && __hour == pOtherTimeRule->__hour
212                         && __minute == pOtherTimeRule->__minute
213                         && __timeMode == pOtherTimeRule->__timeMode
214                         && __onOrAfterDay == pOtherTimeRule->__onOrAfterDay
215                         )
216                 {
217                         return true;
218                 }
219
220         }
221         return false;
222 }
223
224 int
225 TimeRule::GetHashCode(void) const
226 {
227         Integer value = __month + __day + __week + __dayOfWeek + __hour + __minute + __timeMode + __onOrAfterDay;
228         return value.GetHashCode();
229 }
230
231
232 }} // Tizen::Locales