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