1 package com.atlassian.core.cron;
2
3 import com.atlassian.core.util.DateUtils;
4 import org.apache.commons.lang.StringUtils;
5
6 import java.util.*;
7
8
9
10
11 public class CronEditorBean
12 {
13
14
15 public static final String DAILY_SPEC_MODE = "daily";
16 public static final String DAYS_OF_WEEK_SPEC_MODE = "daysOfWeek";
17 public static final String DAYS_OF_MONTH_SPEC_MODE = "daysOfMonth";
18 public static final String ADVANCED_MODE = "advanced";
19 public static final String DOT = ".";
20
21
22 private static final String CRON_STRING = "cronString";
23 private static final String DAILY_WEEKLY_MONTHLY = "dailyWeeklyMonthly";
24 private static final String RUN_ONCE_MINS = "runOnceMins";
25 private static final String RUN_ONCE_HOURS = "runOnceHours";
26 private static final String RUN_ONCE_MERIDIAN = "runOnceMeridian";
27 private static final String RUN_FROM_HOURS = "runFromHours";
28 private static final String RUN_FROM_MERIDIAN = "runFromMeridian";
29 private static final String RUN_TO_HOURS = "runToHours";
30 private static final String RUN_TO_MERIDIAN = "runToMeridian";
31 private static final String WEEKDAY = "weekday";
32 private static final String DAY = "day";
33 private static final String WEEK = "week";
34 private static final String DAYS_OF_MONTH_OPT = "daysOfMonthOpt";
35 private static final String MONTH_DAY = "monthDay";
36 private static final String INTERVAL = "interval";
37 private static final String DAY_OF_WEEK_OF_MONTH = "dayOfWeekOfMonth";
38
39 private Map params;
40 private String cronString;
41 private String mode;
42 private boolean dayOfWeekOfMonth;
43 private String dayOfMonth;
44 private String minutes;
45 private String hoursRunOnce;
46 private String hoursRunOnceMeridian;
47 private String hoursFrom;
48 private String hoursFromMeridian;
49 private String hoursTo;
50 private String hoursToMeridian;
51 private String specifiedDaysOfWeek;
52 private String dayInMonthOrdinal;
53 private String incrementInMinutes;
54 private String seconds;
55
56 public CronEditorBean()
57 {
58 this.params = new HashMap();
59 }
60
61
62
63
64
65
66
67
68 public CronEditorBean(String paramPrefix,
69 {
70 this.params = params;
71 this.cronString = getParam(paramPrefix, CRON_STRING);
72 this.mode = getParam(paramPrefix, DAILY_WEEKLY_MONTHLY);
73
74 this.minutes = getParam(paramPrefix, RUN_ONCE_MINS);
75 this.hoursRunOnce = getParam(paramPrefix, RUN_ONCE_HOURS);
76 this.hoursRunOnceMeridian = getParam(paramPrefix, RUN_ONCE_MERIDIAN);
77 this.hoursFrom = getParam(paramPrefix, RUN_FROM_HOURS);
78 this.hoursFromMeridian = getParam(paramPrefix, RUN_FROM_MERIDIAN);
79 this.hoursTo = getParam(paramPrefix, RUN_TO_HOURS);
80 this.hoursToMeridian = getParam(paramPrefix, RUN_TO_MERIDIAN);
81 String[] daysOfWeek = (String[]) params.get(paramPrefix + DOT + WEEKDAY);
82 if (DAYS_OF_MONTH_SPEC_MODE.equals(mode))
83 {
84 this.specifiedDaysOfWeek = getParam(paramPrefix, DAY);
85 this.dayInMonthOrdinal = getParam(paramPrefix, WEEK);
86
87 String dayOfWeekOfMonthString = getParam(paramPrefix, DAYS_OF_MONTH_OPT);
88 this.dayOfWeekOfMonth = DAY_OF_WEEK_OF_MONTH.equals(dayOfWeekOfMonthString);
89 }
90 else if (DAYS_OF_WEEK_SPEC_MODE.equals(mode))
91 {
92 this.specifiedDaysOfWeek = StringUtils.join(daysOfWeek, ',');
93 }
94
95 this.dayOfMonth = getParam(paramPrefix, MONTH_DAY);
96 this.incrementInMinutes = getParam(paramPrefix, INTERVAL);
97 }
98
99
100
101
102
103
104
105
106 public boolean isRangeHoursValid()
107 {
108 if (hoursFrom != null && hoursFromMeridian != null && hoursTo != null && hoursToMeridian != null && incrementInMinutes != null && !incrementInMinutes.equals("0"))
109 {
110 try
111 {
112 int hoursFromInt = Integer.parseInt(hoursFrom);
113 int hoursToInt = Integer.parseInt(hoursTo);
114 return DateUtils.get24HourTime(hoursFromMeridian, hoursFromInt) <= DateUtils.get24HourTime(hoursToMeridian, hoursToInt);
115 }
116 catch (NumberFormatException e)
117 {
118
119 return false;
120 }
121 }
122 return true;
123 }
124
125
126
127
128
129
130 public boolean isRange()
131 {
132 return !incrementInMinutes.equals("0") && (isDailyMode() || isDayPerWeekMode());
133 }
134
135
136
137
138
139
140
141 public boolean is24HourRange()
142 {
143 boolean result = false;
144 if (isRange())
145 {
146 int hoursFromInt = Integer.parseInt(hoursFrom);
147 int hoursToInt = Integer.parseInt(hoursTo);
148 result = DateUtils.get24HourTime(hoursFromMeridian, hoursFromInt) == DateUtils.get24HourTime(hoursToMeridian, hoursToInt);
149 }
150 return result;
151 }
152
153
154
155
156
157
158
159 public String getCronString()
160 {
161 return cronString;
162 }
163
164 public String getMode()
165 {
166 return mode;
167 }
168
169
170
171
172
173
174 public boolean isAdvancedMode()
175 {
176 return ADVANCED_MODE.equals(mode);
177 }
178
179
180
181
182
183
184 public boolean isDailyMode()
185 {
186 return DAILY_SPEC_MODE.equals(mode);
187 }
188
189
190
191
192
193
194 public boolean isDayPerWeekMode()
195 {
196 return DAYS_OF_WEEK_SPEC_MODE.equals(mode);
197 }
198
199
200
201
202
203
204 public boolean isDaysPerMonthMode()
205 {
206 return DAYS_OF_MONTH_SPEC_MODE.equals(mode);
207 }
208
209
210
211
212
213 public boolean isDayOfWeekOfMonth()
214 {
215 return dayOfWeekOfMonth;
216 }
217
218 public boolean getDayOfWeekOfMonth()
219 {
220 return dayOfWeekOfMonth;
221 }
222
223
224
225
226 public String getDayOfMonth()
227 {
228 return dayOfMonth;
229 }
230
231
232
233
234 public String getMinutes()
235 {
236 return minutes;
237 }
238
239
240
241
242
243
244
245
246
247 public String getHoursFrom()
248 {
249 return hoursFrom;
250 }
251
252
253
254
255
256
257
258
259
260 public String getHoursTo()
261 {
262 return hoursTo;
263 }
264
265
266
267
268
269
270 public String getHoursFromMeridian()
271 {
272 return hoursFromMeridian;
273 }
274
275
276
277
278
279
280 public String getHoursToMeridian()
281 {
282 return hoursToMeridian;
283 }
284
285
286
287
288
289
290 public String getHoursRunOnce()
291 {
292 return hoursRunOnce;
293 }
294
295
296
297
298
299
300 public String getHoursRunOnceMeridian()
301 {
302 return hoursRunOnceMeridian;
303 }
304
305
306
307
308
309
310
311 public boolean isDaySpecified(String dayStr)
312 {
313 return specifiedDaysOfWeek != null && StringUtils.contains(specifiedDaysOfWeek, dayStr);
314 }
315
316
317
318
319
320
321 public String getDayInMonthOrdinal()
322 {
323 return dayInMonthOrdinal;
324 }
325
326
327
328
329
330
331 public String getSpecifiedDaysPerWeek()
332 {
333 return specifiedDaysOfWeek;
334 }
335
336
337
338
339
340
341
342
343 public String getIncrementInMinutes()
344 {
345 return incrementInMinutes;
346 }
347
348
349
350
351
352
353
354 public void setCronString(String cronString)
355 {
356 this.cronString = cronString;
357 }
358
359 public void setMode(String mode)
360 {
361 this.mode = mode;
362 }
363
364 public void setDayOfWeekOfMonth(boolean dayOfWeekOfMonth)
365 {
366 this.dayOfWeekOfMonth = dayOfWeekOfMonth;
367 }
368
369 public void setDayOfMonth(String dayOfMonth)
370 {
371 this.dayOfMonth = dayOfMonth;
372 }
373
374 public void setMinutes(String minutes)
375 {
376 this.minutes = minutes;
377 }
378
379 public void setHoursFrom(String hoursFrom)
380 {
381 this.hoursFrom = hoursFrom;
382 }
383
384 public void setHoursTo(String hoursTo)
385 {
386 this.hoursTo = hoursTo;
387 }
388
389 public void setHoursFromMeridian(String hoursFromMeridian)
390 {
391 this.hoursFromMeridian = hoursFromMeridian;
392 }
393
394 public void setHoursToMeridian(String hoursToMeridian)
395 {
396 this.hoursToMeridian = hoursToMeridian;
397 }
398
399 public void setHoursRunOnce(String hoursRunOnce)
400 {
401 this.hoursRunOnce = hoursRunOnce;
402 }
403
404 public void setHoursRunOnceMeridian(String hoursRunOnceMeridian)
405 {
406 this.hoursRunOnceMeridian = hoursRunOnceMeridian;
407 }
408
409 public void setSpecifiedDaysOfWeek(String specifiedDaysOfWeek)
410 {
411 this.specifiedDaysOfWeek = specifiedDaysOfWeek;
412 }
413
414 public void setDayInMonthOrdinal(String dayInMonthOrdinal)
415 {
416 this.dayInMonthOrdinal = dayInMonthOrdinal;
417 }
418
419
420
421
422
423
424 public void setIncrementInMinutes(String incrementInMinutes)
425 {
426 this.incrementInMinutes = incrementInMinutes;
427 }
428
429
430
431
432
433
434
435
436 private String getParam(String paramPrefix, String key)
437 {
438 String[] paramArr = (String[]) params.get(paramPrefix + DOT + key);
439 if (paramArr != null && paramArr.length == 1)
440 {
441 return paramArr[0];
442 }
443 return null;
444 }
445
446 public void setSeconds(String seconds)
447 {
448 this.seconds = seconds;
449 }
450
451 public String getSeconds()
452 {
453 return seconds;
454 }
455 }