in src/main/java/org/apache/sling/event/impl/jobs/scheduling/JobSchedulerImpl.java [286:321]
public void execute(final JobContext context) {
if ( !active.get() ) {
// not active anymore, simply return
return;
}
final ScheduledJobInfoImpl info = (ScheduledJobInfoImpl) context.getConfiguration().get(PROPERTY_READ_JOB);
if ( info.isSuspended() ) {
return;
}
this.jobManager.addJob(info.getJobTopic(), info.getJobProperties());
final int index = (Integer)context.getConfiguration().get(PROPERTY_SCHEDULE_INDEX);
final Iterator<ScheduleInfo> iter = info.getSchedules().iterator();
ScheduleInfo si = iter.next();
for(int i=0; i<index; i++) {
si = iter.next();
}
// if scheduled once (DATE), remove from schedule
if ( si.getType() == ScheduleType.DATE ) {
if ( index == 0 && info.getSchedules().size() == 1 ) {
// remove
this.scheduledJobHandler.remove(info);
} else {
// update schedule list
final List<ScheduleInfo> infos = new ArrayList<>();
for(final ScheduleInfo i : info.getSchedules() ) {
if ( i != si ) { // no need to use equals
infos.add(i);
}
}
info.update(infos);
this.scheduledJobHandler.updateSchedule(info.getName(), infos);
}
}
}