View Javadoc

1   package org.codehaus.mojo.dashboard.report.plugin.configuration;
2   
3   /*
4    * Copyright 2007 David Vicente
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   *      http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  import java.util.Calendar;
20  import java.util.Date;
21  
22  /**
23   * @author <a href="dvicente72@gmail.com">David Vicente</a>
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       * Plus[0-9]{1,3}
96       */
97      public static final String PATTERN_PLUS = "Plus";
98  
99      /**
100      * Minus[0-9]{1,3}
101      */
102     public static final String PATTERN_MINUS = "Minus";
103     /**
104      *
105      * @param pattern
106      * @return
107      */
108     public static Date getDateFromPattern( String pattern )
109     {
110         return getDateFromPattern( pattern, new Date( System.currentTimeMillis() ) );
111     }
112     /**
113      *
114      * @param pattern
115      * @param currentDate
116      * @return
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 }