in src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java [432:477]
public void onChange(final List<ResourceChange> changes) {
final boolean inStartup = !vph.isReady();
final AtomicBoolean resolverRefreshed = new AtomicBoolean(false);
// send the change event only once
boolean sendEvent = false;
// the config needs to be reloaded only once
final AtomicBoolean hasReloadedConfig = new AtomicBoolean(false);
for (final ResourceChange rc : changes) {
final ResourceChange.ChangeType type = rc.getType();
final String path = rc.getPath();
log.debug("onChange, type={}, path={}", rc.getType(), path);
// don't care for system area
if (path.startsWith(JCR_SYSTEM_PREFIX)) {
continue;
}
// during startup: just enqueue the events
if (inStartup) {
if (type == ResourceChange.ChangeType.REMOVED
|| type == ResourceChange.ChangeType.ADDED
|| type == ResourceChange.ChangeType.CHANGED) {
Map.Entry<String, ResourceChange.ChangeType> entry = new SimpleEntry<>(path, type);
log.trace("enqueue: {}", entry);
resourceChangeQueue.add(entry);
}
} else {
boolean changed = handleResourceChange(type, path, resolverRefreshed, hasReloadedConfig);
if (changed) {
sendEvent = true;
}
}
}
if (sendEvent) {
this.sendChangeEvent();
}
}