in src/main/java/org/apache/sling/event/impl/jobs/JobTopicTraverser.java [112:175]
private static void traverse(final Logger logger,
final Resource topicResource,
final JobCallback jobHandler,
final ResourceCallback resourceHandler) {
logger.debug("Processing topic {}", topicResource.getName().replace('.', '/'));
// now years
for(final Resource yearResource: Utility.getSortedChildren(logger, "year", topicResource)) {
logger.debug("Processing year {}", yearResource.getName());
// now months
for(final Resource monthResource: Utility.getSortedChildren(logger, "month", yearResource)) {
logger.debug("Processing month {}", monthResource.getName());
// now days
for(final Resource dayResource: Utility.getSortedChildren(logger, "day", monthResource)) {
logger.debug("Processing day {}", dayResource.getName());
// now hours
for(final Resource hourResource: Utility.getSortedChildren(logger, "hour", dayResource)) {
logger.debug("Processing hour {}", hourResource.getName());
// now minutes
for(final Resource minuteResource: Utility.getSortedChildren(logger, "minute", hourResource)) {
logger.debug("Processing minute {}", minuteResource.getName());
// now jobs
final List<JobImpl> jobs = new ArrayList<JobImpl>();
// we use an iterator to skip removed entries
// see SLING-4073
final Iterator<Resource> jobIter = minuteResource.listChildren();
while ( jobIter.hasNext() ) {
final Resource jobResource = jobIter.next();
if ( resourceHandler != null ) {
if ( !resourceHandler.handle(jobResource) ) {
return;
}
} else {
final JobImpl job = Utility.readJob(logger, jobResource);
if ( job != null ) {
logger.debug("Found job {}", jobResource.getName());
jobs.add(job);
}
}
}
if ( jobHandler != null ) {
Collections.sort(jobs);
boolean stop = false;
for(final JobImpl job : jobs) {
if ( !jobHandler.handle(job) ) {
stop = true;
}
}
if ( stop ) {
return;
}
}
}
}
}
}
}
}