1 package org.codehaus.mojo.dashboard.report.plugin.configuration;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import java.util.Calendar;
20 import java.util.Date;
21
22
23
24
25
26 public class PeriodUtils
27 {
28 private static final int PATTERN_MINUS_SUBSTR_LENGTH = 5;
29
30 private static final int PATTERN_PLUS_SUBSTR_LENGTH = 4;
31
32 private static final int DELTA_NEXT_WEEK = 7;
33
34 private static final int DELTA_PREVIOUS_WEEK = -DELTA_NEXT_WEEK;
35
36 private static final int MILLISECOND_END_OF_DAY = 999;
37
38 private static final int SECOND_END_OF_DAY = 59;
39
40 private static final int MINUTE_END_OF_DAY = 59;
41
42 private static final int HOUR_END_OF_DAY = 23;
43
44 public static final String NOW = "Now";
45
46 public static final String STARTOF_TODAY = "Startof_today";
47
48 public static final String ENDOF_TODAY = "Endof_today";
49
50 public static final String STARTOF_TOMORROW = "Startof_tomorrow";
51
52 public static final String ENDOF_TOMORROW = "Endof_tomorrow";
53
54 public static final String STARTOF_YESTERDAY = "Startof_yesterday";
55
56 public static final String ENDOF_YESTERDAY = "Endof_yesterday";
57
58 public static final String STARTOF_THISWEEK = "Startof_thisweek";
59
60 public static final String ENDOF_THISWEEK = "Endof_thisweek";
61
62 public static final String STARTOF_NEXTWEEK = "Startof_nextweek";
63
64 public static final String ENDOF_NEXTWEEK = "Endof_nextweek";
65
66 public static final String STARTOF_LASTWEEK = "Startof_lastweek";
67
68 public static final String ENDOF_LASTWEEK = "Endof_lastweek";
69
70 public static final String STARTOF_THISMONTH = "Startof_thismonth";
71
72 public static final String ENDOF_THISMONTH = "Endof_thismonth";
73
74 public static final String STARTOF_LASTMONTH = "Startof_lastmonth";
75
76 public static final String ENDOF_LASTMONTH = "Endof_lastmonth";
77
78 public static final String STARTOF_NEXTMONTH = "Startof_nextmonth";
79
80 public static final String ENDOF_NEXTMONTH = "Endof_nextmonth";
81
82 public static final String STARTOF_THISYEAR = "Startof_thisyear";
83
84 public static final String ENDOF_THISYEAR = "Endof_thisyear";
85
86 public static final String STARTOF_LASTYEAR = "Startof_lastyear";
87
88 public static final String ENDOF_LASTYEAR = "Endof_lastyear";
89
90 public static final String STARTOF_NEXTYEAR = "Startof_nextyear";
91
92 public static final String ENDOF_NEXTYEAR = "Endof_nextyear";
93
94
95
96
97 public static final String PATTERN_PLUS = "Plus";
98
99
100
101
102 public static final String PATTERN_MINUS = "Minus";
103
104
105
106
107
108 public static Date getDateFromPattern( String pattern )
109 {
110 return getDateFromPattern( pattern, new Date( System.currentTimeMillis() ) );
111 }
112
113
114
115
116
117
118 public static Date getDateFromPattern( String pattern, Date currentDate )
119 {
120
121 Date returnDate = null;
122 if ( pattern != null && pattern.length() > 0 )
123 {
124 Calendar cal = Calendar.getInstance();
125 cal.setFirstDayOfWeek( Calendar.MONDAY );
126 cal.setTime( currentDate );
127
128
129 if ( NOW.equals( pattern ) )
130 {
131 returnDate = currentDate;
132 }
133 else if ( STARTOF_TODAY.equals( pattern ) )
134 {
135 cal.set( Calendar.HOUR_OF_DAY, 0 );
136 cal.set( Calendar.MINUTE, 0 );
137 cal.set( Calendar.SECOND, 0 );
138 cal.set( Calendar.MILLISECOND, 0 );
139 returnDate = cal.getTime();
140 }
141 else if ( ENDOF_TODAY.equals( pattern ) )
142 {
143 cal.set( Calendar.HOUR_OF_DAY, HOUR_END_OF_DAY );
144 cal.set( Calendar.MINUTE, MINUTE_END_OF_DAY );
145 cal.set( Calendar.SECOND, SECOND_END_OF_DAY );
146 cal.set( Calendar.MILLISECOND, MILLISECOND_END_OF_DAY );
147 returnDate = cal.getTime();
148 }
149 else if ( STARTOF_TOMORROW.equals( pattern ) )
150 {
151 cal.add( Calendar.DAY_OF_MONTH, 1 );
152 cal.set( Calendar.HOUR_OF_DAY, 0 );
153 cal.set( Calendar.MINUTE, 0 );
154 cal.set( Calendar.SECOND, 0 );
155 cal.set( Calendar.MILLISECOND, 0 );
156 returnDate = cal.getTime();
157 }
158 else if ( ENDOF_TOMORROW.equals( pattern ) )
159 {
160 cal.add( Calendar.DAY_OF_MONTH, 1 );
161 cal.set( Calendar.HOUR_OF_DAY, HOUR_END_OF_DAY );
162 cal.set( Calendar.MINUTE, MINUTE_END_OF_DAY );
163 cal.set( Calendar.SECOND, SECOND_END_OF_DAY );
164 cal.set( Calendar.MILLISECOND, MILLISECOND_END_OF_DAY );
165 returnDate = cal.getTime();
166 }
167 else if ( STARTOF_YESTERDAY.equals( pattern ) )
168 {
169 cal.add( Calendar.DAY_OF_MONTH, -1 );
170 cal.set( Calendar.HOUR_OF_DAY, 0 );
171 cal.set( Calendar.MINUTE, 0 );
172 cal.set( Calendar.SECOND, 0 );
173 cal.set( Calendar.MILLISECOND, 0 );
174 returnDate = cal.getTime();
175 }
176 else if ( ENDOF_YESTERDAY.equals( pattern ) )
177 {
178 cal.add( Calendar.DAY_OF_MONTH, -1 );
179 cal.set( Calendar.HOUR_OF_DAY, HOUR_END_OF_DAY );
180 cal.set( Calendar.MINUTE, MINUTE_END_OF_DAY );
181 cal.set( Calendar.SECOND, SECOND_END_OF_DAY );
182 cal.set( Calendar.MILLISECOND, MILLISECOND_END_OF_DAY );
183 returnDate = cal.getTime();
184 }
185 else if ( STARTOF_THISWEEK.equals( pattern ) )
186 {
187 cal.set( Calendar.DAY_OF_WEEK, Calendar.MONDAY );
188 cal.set( Calendar.HOUR_OF_DAY, 0 );
189 cal.set( Calendar.MINUTE, 0 );
190 cal.set( Calendar.SECOND, 0 );
191 cal.set( Calendar.MILLISECOND, 0 );
192 returnDate = cal.getTime();
193 }
194 else if ( ENDOF_THISWEEK.equals( pattern ) )
195 {
196 cal.set( Calendar.DAY_OF_WEEK, Calendar.SATURDAY );
197 cal.add( Calendar.DAY_OF_MONTH, 1 );
198 cal.set( Calendar.HOUR_OF_DAY, HOUR_END_OF_DAY );
199 cal.set( Calendar.MINUTE, MINUTE_END_OF_DAY );
200 cal.set( Calendar.SECOND, SECOND_END_OF_DAY );
201 cal.set( Calendar.MILLISECOND, MILLISECOND_END_OF_DAY );
202 returnDate = cal.getTime();
203 }
204 else if ( STARTOF_NEXTWEEK.equals( pattern ) )
205 {
206 cal.add( Calendar.DAY_OF_MONTH, DELTA_NEXT_WEEK );
207 cal.set( Calendar.DAY_OF_WEEK, Calendar.MONDAY );
208 cal.set( Calendar.HOUR_OF_DAY, 0 );
209 cal.set( Calendar.MINUTE, 0 );
210 cal.set( Calendar.SECOND, 0 );
211 cal.set( Calendar.MILLISECOND, 0 );
212 returnDate = cal.getTime();
213 }
214 else if ( ENDOF_NEXTWEEK.equals( pattern ) )
215 {
216 cal.add( Calendar.DAY_OF_MONTH, DELTA_NEXT_WEEK );
217 cal.set( Calendar.DAY_OF_WEEK, Calendar.SATURDAY );
218 cal.add( Calendar.DAY_OF_MONTH, 1 );
219 cal.set( Calendar.HOUR_OF_DAY, HOUR_END_OF_DAY );
220 cal.set( Calendar.MINUTE, MINUTE_END_OF_DAY );
221 cal.set( Calendar.SECOND, SECOND_END_OF_DAY );
222 cal.set( Calendar.MILLISECOND, MILLISECOND_END_OF_DAY );
223 returnDate = cal.getTime();
224 }
225 else if ( STARTOF_LASTWEEK.equals( pattern ) )
226 {
227 cal.add( Calendar.DAY_OF_MONTH, DELTA_PREVIOUS_WEEK );
228 cal.set( Calendar.DAY_OF_WEEK, Calendar.MONDAY );
229 cal.set( Calendar.HOUR_OF_DAY, 0 );
230 cal.set( Calendar.MINUTE, 0 );
231 cal.set( Calendar.SECOND, 0 );
232 cal.set( Calendar.MILLISECOND, 0 );
233 returnDate = cal.getTime();
234 }
235 else if ( ENDOF_LASTWEEK.equals( pattern ) )
236 {
237 cal.add( Calendar.DAY_OF_MONTH, DELTA_PREVIOUS_WEEK );
238 cal.set( Calendar.DAY_OF_WEEK, Calendar.SATURDAY );
239 cal.add( Calendar.DAY_OF_MONTH, 1 );
240 cal.set( Calendar.HOUR_OF_DAY, HOUR_END_OF_DAY );
241 cal.set( Calendar.MINUTE, MINUTE_END_OF_DAY );
242 cal.set( Calendar.SECOND, SECOND_END_OF_DAY );
243 cal.set( Calendar.MILLISECOND, MILLISECOND_END_OF_DAY );
244 returnDate = cal.getTime();
245 }
246 else if ( STARTOF_THISMONTH.equals( pattern ) )
247 {
248 cal.set( Calendar.DAY_OF_MONTH, 1 );
249 cal.set( Calendar.HOUR_OF_DAY, 0 );
250 cal.set( Calendar.MINUTE, 0 );
251 cal.set( Calendar.SECOND, 0 );
252 cal.set( Calendar.MILLISECOND, 0 );
253 returnDate = cal.getTime();
254 }
255 else if ( ENDOF_THISMONTH.equals( pattern ) )
256 {
257 cal.set( Calendar.DAY_OF_MONTH, cal.getActualMaximum( Calendar.DAY_OF_MONTH ) );
258 cal.set( Calendar.HOUR_OF_DAY, HOUR_END_OF_DAY );
259 cal.set( Calendar.MINUTE, MINUTE_END_OF_DAY );
260 cal.set( Calendar.SECOND, SECOND_END_OF_DAY );
261 cal.set( Calendar.MILLISECOND, MILLISECOND_END_OF_DAY );
262 returnDate = cal.getTime();
263 }
264 else if ( STARTOF_LASTMONTH.equals( pattern ) )
265 {
266 cal.set( Calendar.DAY_OF_MONTH, 1 );
267 cal.add( Calendar.MONTH, -1 );
268 cal.set( Calendar.HOUR_OF_DAY, 0 );
269 cal.set( Calendar.MINUTE, 0 );
270 cal.set( Calendar.SECOND, 0 );
271 cal.set( Calendar.MILLISECOND, 0 );
272 returnDate = cal.getTime();
273 }
274 else if ( ENDOF_LASTMONTH.equals( pattern ) )
275 {
276 cal.add( Calendar.MONTH, -1 );
277 cal.set( Calendar.DAY_OF_MONTH, cal.getActualMaximum( Calendar.DAY_OF_MONTH ) );
278 cal.set( Calendar.HOUR_OF_DAY, HOUR_END_OF_DAY );
279 cal.set( Calendar.MINUTE, MINUTE_END_OF_DAY );
280 cal.set( Calendar.SECOND, SECOND_END_OF_DAY );
281 cal.set( Calendar.MILLISECOND, MILLISECOND_END_OF_DAY );
282 returnDate = cal.getTime();
283 }
284 else if ( STARTOF_NEXTMONTH.equals( pattern ) )
285 {
286 cal.set( Calendar.DAY_OF_MONTH, 1 );
287 cal.add( Calendar.MONTH, 1 );
288 cal.set( Calendar.HOUR_OF_DAY, 0 );
289 cal.set( Calendar.MINUTE, 0 );
290 cal.set( Calendar.SECOND, 0 );
291 cal.set( Calendar.MILLISECOND, 0 );
292 returnDate = cal.getTime();
293 }
294 else if ( ENDOF_NEXTMONTH.equals( pattern ) )
295 {
296 cal.add( Calendar.MONTH, 1 );
297 cal.set( Calendar.DAY_OF_MONTH, cal.getActualMaximum( Calendar.DAY_OF_MONTH ) );
298 cal.set( Calendar.HOUR_OF_DAY, HOUR_END_OF_DAY );
299 cal.set( Calendar.MINUTE, MINUTE_END_OF_DAY );
300 cal.set( Calendar.SECOND, SECOND_END_OF_DAY );
301 cal.set( Calendar.MILLISECOND, MILLISECOND_END_OF_DAY );
302 returnDate = cal.getTime();
303 }
304 else if ( STARTOF_THISYEAR.equals( pattern ) )
305 {
306 cal.set( Calendar.DAY_OF_MONTH, 1 );
307 cal.set( Calendar.MONTH, Calendar.JANUARY );
308 cal.set( Calendar.HOUR_OF_DAY, 0 );
309 cal.set( Calendar.MINUTE, 0 );
310 cal.set( Calendar.SECOND, 0 );
311 cal.set( Calendar.MILLISECOND, 0 );
312 returnDate = cal.getTime();
313 }
314 else if ( ENDOF_THISYEAR.equals( pattern ) )
315 {
316 cal.set( Calendar.MONTH, Calendar.DECEMBER );
317 cal.set( Calendar.DAY_OF_MONTH, cal.getActualMaximum( Calendar.DAY_OF_MONTH ) );
318 cal.set( Calendar.HOUR_OF_DAY, HOUR_END_OF_DAY );
319 cal.set( Calendar.MINUTE, MINUTE_END_OF_DAY );
320 cal.set( Calendar.SECOND, SECOND_END_OF_DAY );
321 cal.set( Calendar.MILLISECOND, MILLISECOND_END_OF_DAY );
322 returnDate = cal.getTime();
323 }
324 else if ( STARTOF_LASTYEAR.equals( pattern ) )
325 {
326 cal.set( Calendar.DAY_OF_MONTH, 1 );
327 cal.set( Calendar.MONTH, Calendar.JANUARY );
328 cal.add( Calendar.YEAR, -1 );
329 cal.set( Calendar.HOUR_OF_DAY, 0 );
330 cal.set( Calendar.MINUTE, 0 );
331 cal.set( Calendar.SECOND, 0 );
332 cal.set( Calendar.MILLISECOND, 0 );
333 returnDate = cal.getTime();
334 }
335 else if ( ENDOF_LASTYEAR.equals( pattern ) )
336 {
337 cal.set( Calendar.MONTH, Calendar.DECEMBER );
338 cal.add( Calendar.YEAR, -1 );
339 cal.set( Calendar.DAY_OF_MONTH, cal.getActualMaximum( Calendar.DAY_OF_MONTH ) );
340 cal.set( Calendar.HOUR_OF_DAY, HOUR_END_OF_DAY );
341 cal.set( Calendar.MINUTE, MINUTE_END_OF_DAY );
342 cal.set( Calendar.SECOND, SECOND_END_OF_DAY );
343 cal.set( Calendar.MILLISECOND, MILLISECOND_END_OF_DAY );
344 returnDate = cal.getTime();
345 }
346 else if ( STARTOF_NEXTYEAR.equals( pattern ) )
347 {
348 cal.set( Calendar.DAY_OF_MONTH, 1 );
349 cal.set( Calendar.MONTH, Calendar.JANUARY );
350 cal.add( Calendar.YEAR, 1 );
351 cal.set( Calendar.HOUR_OF_DAY, 0 );
352 cal.set( Calendar.MINUTE, 0 );
353 cal.set( Calendar.SECOND, 0 );
354 cal.set( Calendar.MILLISECOND, 0 );
355 returnDate = cal.getTime();
356 }
357 else if ( ENDOF_NEXTYEAR.equals( pattern ) )
358 {
359 cal.set( Calendar.MONTH, Calendar.DECEMBER );
360 cal.add( Calendar.YEAR, 1 );
361 cal.set( Calendar.DAY_OF_MONTH, cal.getActualMaximum( Calendar.DAY_OF_MONTH ) );
362 cal.set( Calendar.HOUR_OF_DAY, HOUR_END_OF_DAY );
363 cal.set( Calendar.MINUTE, MINUTE_END_OF_DAY );
364 cal.set( Calendar.SECOND, SECOND_END_OF_DAY );
365 cal.set( Calendar.MILLISECOND, MILLISECOND_END_OF_DAY );
366 returnDate = cal.getTime();
367 }
368 else if ( pattern.startsWith( PATTERN_PLUS ) )
369 {
370 String strDelta = pattern.substring( PATTERN_PLUS_SUBSTR_LENGTH, pattern.length() );
371 int delta = Integer.parseInt( strDelta );
372 cal.add( Calendar.DAY_OF_MONTH, delta );
373 returnDate = cal.getTime();
374 }
375 else if ( pattern.startsWith( PATTERN_MINUS ) )
376 {
377 String strDelta = pattern.substring( PATTERN_MINUS_SUBSTR_LENGTH, pattern.length() );
378 int delta = Integer.parseInt( strDelta );
379 cal.add( Calendar.DAY_OF_MONTH, -( delta ) );
380 returnDate = cal.getTime();
381 }
382 }
383 return returnDate;
384
385 }
386 }