in src/main/java/org/apache/sling/event/impl/jobs/scheduling/ScheduledJobHandler.java [413:456]
private void handleAddOrUpdate(final Map<String, Holder> newScheduledJobs, final Resource rsrc) {
final String id = ResourceHelper.filterName(rsrc.getName());
final Holder scheduled = this.scheduledJobs.remove(id);
boolean read = false;
if ( scheduled != null ) {
// check if loading failed and we can retry
if ( scheduled.info == null || scheduled.read < this.lastBundleActivity.get() ) {
read = true;
}
// check if this is an update
if ( scheduled.info != null ) {
final ValueMap vm = ResourceUtil.getValueMap(rsrc);
final Calendar changed = (Calendar) vm.get(Job.PROPERTY_JOB_CREATED);
if ( changed != null && scheduled.created.compareTo(changed) < 0 ) {
read = true;
}
}
if ( !read ) {
// nothing changes
newScheduledJobs.put(id, scheduled);
}
} else {
read = true;
}
if ( read ) {
// read
final Holder holder = new Holder();
holder.read = System.currentTimeMillis();
final Map<String, Object> properties = this.readScheduledJob(rsrc);
if ( properties != null ) {
holder.created = (Calendar) properties.get(Job.PROPERTY_JOB_CREATED);
holder.info = this.addOrUpdateScheduledJob(properties, scheduled != null ? scheduled.info : null);
}
newScheduledJobs.put(id, holder);
if ( holder.info == null && scheduled != null && scheduled.info != null ) {
this.jobScheduler.unscheduleJob(scheduled.info);
}
if ( holder.info != null ) {
this.jobScheduler.scheduleJob(holder.info);
}
}
}