private static void traverse()

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;
                                }
                            }
                        }
                    }
                }
            }
        }
    }