in src/main/java/org/apache/sling/event/impl/jobs/tasks/CleanUpTask.java [216:273]
private void simpleEmptyFolderCleanup(final TopologyCapabilities caps, final String basePath) {
this.logger.debug("Cleaning up job resource tree: looking for empty folders");
final ResourceResolver resolver = this.configuration.createResourceResolver();
try {
final Calendar cleanUpDate = getCalendarInstance();
// go back five minutes
cleanUpDate.add(Calendar.MINUTE, -5);
final Resource baseResource = resolver.getResource(basePath);
// sanity check - should never be null
if ( baseResource != null ) {
final Iterator<Resource> topicIter = baseResource.listChildren();
while ( caps.isActive() && topicIter.hasNext() ) {
final Resource topicResource = topicIter.next();
for(int i = 0; i < 10; i++) {
if ( caps.isActive() ) {
final StringBuilder sb = new StringBuilder(topicResource.getPath());
sb.append('/');
sb.append(cleanUpDate.get(Calendar.YEAR));
sb.append('/');
sb.append(cleanUpDate.get(Calendar.MONTH) + 1);
sb.append('/');
sb.append(cleanUpDate.get(Calendar.DAY_OF_MONTH));
sb.append('/');
sb.append(cleanUpDate.get(Calendar.HOUR_OF_DAY));
sb.append('/');
sb.append(cleanUpDate.get(Calendar.MINUTE));
final String path = sb.toString();
final Resource dateResource = resolver.getResource(path);
if ( dateResource != null && !dateResource.listChildren().hasNext() ) {
resolver.delete(dateResource);
resolver.commit();
}
// check hour folder
if ( path.endsWith("59") ) {
final String hourPath = path.substring(0, path.length() - 3);
final Resource hourResource = resolver.getResource(hourPath);
if ( hourResource != null && !hourResource.listChildren().hasNext() ) {
resolver.delete(hourResource);
resolver.commit();
}
}
// go back another minute in time
cleanUpDate.add(Calendar.MINUTE, -1);
}
}
}
}
} catch (final PersistenceException pe) {
// in the case of an error, we just log this as a warning
this.logger.warn("Exception during job resource tree cleanup.", pe);
} finally {
resolver.close();
}
}