| 1 2 18 19 22 package org.quartz; 23 24 import java.util.Calendar ; 25 import java.util.Date ; 26 import java.util.LinkedList ; 27 import java.util.List ; 28 import java.util.TimeZone ; 29 30 47 public class TriggerUtils { 48 49 56 57 public static final int SUNDAY = 1; 58 59 public static final int MONDAY = 2; 60 61 public static final int TUESDAY = 3; 62 63 public static final int WEDNESDAY = 4; 64 65 public static final int THURSDAY = 5; 66 67 public static final int FRIDAY = 6; 68 69 public static final int SATURDAY = 7; 70 71 public static final int LAST_DAY_OF_MONTH = -1; 72 73 public static final long MILLISECONDS_IN_MINUTE = 60l * 1000l; 74 75 public static final long MILLISECONDS_IN_HOUR = 60l * 60l * 1000l; 76 77 public static final long SECONDS_IN_DAY = 24l * 60l * 60L; 78 79 public static final long MILLISECONDS_IN_DAY = SECONDS_IN_DAY * 1000l; 80 81 84 private TriggerUtils() { 85 } 86 87 94 95 private static void validateDayOfWeek(int dayOfWeek) { 96 if (dayOfWeek < SUNDAY || dayOfWeek > SATURDAY) { 97 throw new IllegalArgumentException ("Invalid day of week."); 98 } 99 } 100 101 private static void validateHour(int hour) { 102 if (hour < 0 || hour > 23) { 103 throw new IllegalArgumentException ( 104 "Invalid hour (must be >= 0 and <= 23)."); 105 } 106 } 107 108 private static void validateMinute(int minute) { 109 if (minute < 0 || minute > 59) { 110 throw new IllegalArgumentException ( 111 "Invalid minute (must be >= 0 and <= 59)."); 112 } 113 } 114 115 private static void validateSecond(int second) { 116 if (second < 0 || second > 59) { 117 throw new IllegalArgumentException ( 118 "Invalid second (must be >= 0 and <= 59)."); 119 } 120 } 121 122 private static void validateDayOfMonth(int day) { 123 if ((day < 1 || day > 31) && day != LAST_DAY_OF_MONTH) { 124 throw new IllegalArgumentException ("Invalid day of month."); 125 } 126 } 127 128 private static void validateMonth(int month) { 129 if (month < 1 || month > 12) { 130 throw new IllegalArgumentException ( 131 "Invalid month (must be >= 1 and <= 12."); 132 } 133 } 134 135 private static void validateYear(int year) { 136 if (year < 1970 || year > 2099) { 137 throw new IllegalArgumentException ( 138 "Invalid year (must be >= 1970 and <= 2099."); 139 } 140 } 141 142 151 public static void setTriggerIdentity(Trigger trig, String name) { 152 setTriggerIdentity(trig, name, Scheduler.DEFAULT_GROUP); 153 } 154 155 165 public static void setTriggerIdentity( 166 Trigger trig, String name, String group) { 167 trig.setName(name); 168 trig.setGroup(group); 169 } 170 171 185 public static Trigger makeDailyTrigger(int hour, int minute) { 186 validateHour(hour); 187 validateMinute(minute); 188 189 CronTrigger trig = new CronTrigger(); 190 191 try { 192 trig.setCronExpression("0 " + minute + " " + hour + " ? * *"); 193 } catch (Exception ignore) { 194 return null; 195 } 196 197 trig.setStartTime(new Date ()); 198 199 return trig; 200 } 201 202 217 public static Trigger makeDailyTrigger( 218 String trigName, int hour, int minute) { 219 Trigger trig = makeDailyTrigger(hour, minute); 220 trig.setName(trigName); 221 return trig; 222 } 223 224 247 public static Trigger makeWeeklyTrigger( 248 int dayOfWeek, int hour, int minute) { 249 validateDayOfWeek(dayOfWeek); 250 validateHour(hour); 251 validateMinute(minute); 252 253 CronTrigger trig = new CronTrigger(); 254 255 try { 256 trig.setCronExpression("0 " + minute + " " + hour + " ? * " 257 + dayOfWeek); 258 } catch (Exception ignore) { 259 return null; 260 } 261 262 trig.setStartTime(new Date ()); 263 264 return trig; 265 } 266 267 291 public static Trigger makeWeeklyTrigger( 292 String trigName, int dayOfWeek, int hour, int minute) { 293 Trigger trig = makeWeeklyTrigger(dayOfWeek, hour, minute); 294 trig.setName(trigName); 295 return trig; 296 } 297 298 299 321 public static Trigger makeMonthlyTrigger( 322 int dayOfMonth, int hour, int minute) { 323 validateDayOfMonth(dayOfMonth); 324 validateHour(hour); 325 validateMinute(minute); 326 327 CronTrigger trig = new CronTrigger(); 328 329 try { 330 if (dayOfMonth != LAST_DAY_OF_MONTH) { 331 trig.setCronExpression("0 " + minute + " " + hour + " " + dayOfMonth + " * ?"); 332 } else { 333 trig.setCronExpression("0 " + minute + " " + hour + " L * ?"); 334 } 335 } catch (Exception ignore) { 336 return null; 337 } 338 339 trig.setStartTime(new Date ()); 340 341 return trig; 342 } 343 344 367 public static Trigger makeMonthlyTrigger( 368 String trigName, int dayOfMonth, int hour, int minute) { 369 Trigger trig = makeMonthlyTrigger(dayOfMonth, hour, minute); 370 trig.setName(trigName); 371 return trig; 372 } 373 374 393 394 409 public static Trigger makeImmediateTrigger( 410 int repeatCount, long repeatInterval) { 411 SimpleTrigger trig = new SimpleTrigger(); 412 trig.setStartTime( new Date () ); 413 trig.setRepeatCount(repeatCount); 414 trig.setRepeatInterval(repeatInterval); 415 return trig; 416 } 417 418 434 public static Trigger makeImmediateTrigger( 435 String trigName, int repeatCount, long repeatInterval) { 436 Trigger trig = makeImmediateTrigger(repeatCount, repeatInterval); 437 trig.setName(trigName); 438 return trig; 439 } 440 441 452 public static Trigger makeSecondlyTrigger() { 453 return makeSecondlyTrigger(1, SimpleTrigger.REPEAT_INDEFINITELY); 454 } 455 456 469 public static Trigger makeSecondlyTrigger(String trigName) { 470 return makeSecondlyTrigger( 471 trigName, 1, SimpleTrigger.REPEAT_INDEFINITELY); 472 } 473 474 475 488 public static Trigger makeSecondlyTrigger(int intervalInSeconds) { 489 return makeSecondlyTrigger( 490 intervalInSeconds, SimpleTrigger.REPEAT_INDEFINITELY); 491 } 492 493 508 public static Trigger makeSecondlyTrigger( 509 int intervalInSeconds, int repeatCount) { 510 SimpleTrigger trig = new SimpleTrigger(); 511 512 trig.setRepeatInterval(intervalInSeconds * 1000l); 513 trig.setRepeatCount(repeatCount); 514 trig.setStartTime(new Date ()); 515 516 return trig; 517 } 518 519 535 public static Trigger makeSecondlyTrigger( 536 String trigName, int intervalInSeconds, int repeatCount) { 537 Trigger trig = makeSecondlyTrigger(intervalInSeconds, repeatCount); 538 trig.setName(trigName); 539 return trig; 540 } 541 542 554 public static Trigger makeMinutelyTrigger() { 555 return makeMinutelyTrigger(1, SimpleTrigger.REPEAT_INDEFINITELY); 556 } 557 558 571 public static Trigger makeMinutelyTrigger(String trigName) { 572 return makeMinutelyTrigger( 573 trigName, 1, SimpleTrigger.REPEAT_INDEFINITELY); 574 } 575 576 589 public static Trigger makeMinutelyTrigger(int intervalInMinutes) { 590 return makeMinutelyTrigger( 591 intervalInMinutes, SimpleTrigger.REPEAT_INDEFINITELY); 592 } 593 594 609 public static Trigger makeMinutelyTrigger( 610 int intervalInMinutes, int repeatCount) { 611 SimpleTrigger trig = new SimpleTrigger(); 612 613 trig.setRepeatInterval(intervalInMinutes * MILLISECONDS_IN_MINUTE); 614 trig.setRepeatCount(repeatCount); 615 616 trig.setStartTime(new Date ()); 617 618 return trig; 619 } 620 621 637 public static Trigger makeMinutelyTrigger( 638 String trigName, int intervalInMinutes, int repeatCount) { 639 Trigger trig = makeMinutelyTrigger(intervalInMinutes, repeatCount); 640 trig.setName(trigName); 641 return trig; 642 } 643 644 656 public static Trigger makeHourlyTrigger() { 657 return makeHourlyTrigger(1, SimpleTrigger.REPEAT_INDEFINITELY); 658 } 659 660 673 public static Trigger makeHourlyTrigger(String trigName) { 674 return makeHourlyTrigger( 675 trigName, 1, SimpleTrigger.REPEAT_INDEFINITELY); 676 } 677 678 691 public static Trigger makeHourlyTrigger(int intervalInHours) { 692 return makeHourlyTrigger( 693 intervalInHours, SimpleTrigger.REPEAT_INDEFINITELY); 694 } 695 696 711 public static Trigger makeHourlyTrigger( 712 int intervalInHours, int repeatCount) { 713 SimpleTrigger trig = new SimpleTrigger(); 714 715 trig.setRepeatInterval(intervalInHours * MILLISECONDS_IN_HOUR); 716 trig.setRepeatCount(repeatCount); 717 718 trig.setStartTime(new Date ()); 719 720 return trig; 721 } 722 723 739 public static Trigger makeHourlyTrigger( 740 String trigName, int intervalInHours, int repeatCount) { 741 Trigger trig =makeHourlyTrigger(intervalInHours, repeatCount); 742 trig.setName(trigName); 743 return trig; 744 } 745 746 763 public static Date getEvenHourDate(Date date) { 764 if (date == null) { 765 date = new Date (); 766 } 767 768 Calendar c = Calendar.getInstance(); 769 c.setTime(date); 770 c.setLenient(true); 771 772 c.set(Calendar.HOUR_OF_DAY, c.get(Calendar.HOUR_OF_DAY) + 1); 773 c.set(Calendar.MINUTE, 0); 774 c.set(Calendar.SECOND, 0); 775 c.set(Calendar.MILLISECOND, 0); 776 777 return c.getTime(); 778 } 779 780 796 public static Date getEvenHourDateBefore(Date date) { 797 if (date == null) { 798 date = new Date (); 799 } 800 801 Calendar c = Calendar.getInstance(); 802 c.setTime(date); 803 804 c.set(Calendar.MINUTE, 0); 805 c.set(Calendar.SECOND, 0); 806 c.set(Calendar.MILLISECOND, 0); 807 808 return c.getTime(); 809 } 810 811 828 public static Date getEvenMinuteDate(Date date) { 829 if (date == null) { 830 date = new Date (); 831 } 832 833 Calendar c = Calendar.getInstance(); 834 c.setTime(date); 835 c.setLenient(true); 836 837 c.set(Calendar.MINUTE, c.get(Calendar.MINUTE) + 1); 838 c.set(Calendar.SECOND, 0); 839 c.set(Calendar.MILLISECOND, 0); 840 841 return c.getTime(); 842 } 843 844 860 public static Date getEvenMinuteDateBefore(Date date) { 861 if (date == null) { 862 date = new Date (); 863 } 864 865 Calendar c = Calendar.getInstance(); 866 c.setTime(date); 867 868 c.set(Calendar.SECOND, 0); 869 c.set(Calendar.MILLISECOND, 0); 870 871 return c.getTime(); 872 } 873 874 885 public static Date getEvenSecondDate(Date date) { 886 if (date == null) { 887 date = new Date (); 888 } 889 890 Calendar c = Calendar.getInstance(); 891 c.setTime(date); 892 c.setLenient(true); 893 894 c.set(Calendar.SECOND, c.get(Calendar.SECOND) + 1); 895 c.set(Calendar.MILLISECOND, 0); 896 897 return c.getTime(); 898 } 899 900 916 public static Date getEvenSecondDateBefore(Date date) { 917 if (date == null) { 918 date = new Date (); 919 } 920 921 Calendar c = Calendar.getInstance(); 922 c.setTime(date); 923 924 c.set(Calendar.MILLISECOND, 0); 925 926 return c.getTime(); 927 } 928 929 1022 public static Date getNextGivenMinuteDate(Date date, int minuteBase) { 1023 if (minuteBase < 0 || minuteBase > 59) { 1024 throw new IllegalArgumentException ( 1025 "minuteBase must be >=0 and <= 59"); 1026 } 1027 1028 if (date == null) { 1029 date = new Date (); 1030 } 1031 1032 Calendar c = Calendar.getInstance();
|