in src/main/java/org/apache/sling/event/impl/support/ScheduleInfoImpl.java [313:363]
public Date getNextScheduledExecution() {
final Calendar now = Calendar.getInstance();
switch ( this.scheduleType ) {
case DATE : return this.at;
case DAILY : final Calendar next = Calendar.getInstance();
next.set(Calendar.HOUR_OF_DAY, this.hourOfDay);
next.set(Calendar.MINUTE, this.minuteOfHour);
if ( next.before(now) ) {
next.add(Calendar.DAY_OF_WEEK, 1);
}
return next.getTime();
case WEEKLY : final Calendar nextW = Calendar.getInstance();
nextW.set(Calendar.HOUR_OF_DAY, this.hourOfDay);
nextW.set(Calendar.MINUTE, this.minuteOfHour);
nextW.set(Calendar.DAY_OF_WEEK, this.dayOfWeek);
if ( nextW.before(now) ) {
nextW.add(Calendar.WEEK_OF_YEAR, 1);
}
return nextW.getTime();
case HOURLY : final Calendar nextH = Calendar.getInstance();
nextH.set(Calendar.MINUTE, this.minuteOfHour);
if ( nextH.before(now) ) {
nextH.add(Calendar.HOUR_OF_DAY, 1);
}
return nextH.getTime();
case MONTHLY : final Calendar nextM = Calendar.getInstance();
nextM.set(Calendar.HOUR_OF_DAY, this.hourOfDay);
nextM.set(Calendar.MINUTE, this.minuteOfHour);
nextM.set(Calendar.DAY_OF_MONTH, this.dayOfWeek);
if ( nextM.before(now) ) {
nextM.add(Calendar.MONTH, 1);
}
return nextM.getTime();
case YEARLY : final Calendar nextY = Calendar.getInstance();
nextY.set(Calendar.HOUR_OF_DAY, this.hourOfDay);
nextY.set(Calendar.MINUTE, this.minuteOfHour);
nextY.set(Calendar.DAY_OF_MONTH, this.dayOfWeek);
nextY.set(Calendar.MONTH, this.monthOfYear - 1);
if ( nextY.before(now) ) {
nextY.add(Calendar.YEAR, 1);
}
return nextY.getTime();
case CRON : try {
final CronExpression exp = new CronExpression(this.expression);
return exp.getNextValidTimeAfter(new Date());
} catch (final ParseException e) {
// as we check the expression in check() everything should be fine here
}
}
return null;
}