in src/main/java/org/apache/sling/discovery/commons/providers/base/ViewStateManagerImpl.java [672:710]
private void doHandleConsistent(BaseTopologyView newView) {
logger.trace("doHandleConsistent: start");
// unset the isChanging flag
logger.trace("doHandleConsistent: setting isChanging to false");
isChanging = false;
if (previousView==null) {
// this is the first time handleNewTopologyView is called
if (eventListeners.size()>0) {
logger.info("doHandleConsistent: no previous view available even though listeners already got CHANGED event");
} else {
logger.debug("doHandleConsistent: no previous view and there are no event listeners yet. very quiet.");
}
// otherwise this is the normal case where there are uninitialized event listeners waiting below
} else {
logger.debug("doHandleConsistent: sending TOPOLOGY_CHANGED to initialized listeners");
previousView.setNotCurrent();
enqueueForAll(eventListeners, EventHelper.newChangedEvent(previousView, newView));
}
if (unInitializedEventListeners.size()>0) {
// then there were bindTopologyEventListener calls coming in while
// we were in CHANGING state - so we must send those the INIT they were
// waiting for oh so long
logger.debug("doHandleConsistent: sending TOPOLOGY_INIT to uninitialized listeners ({})",
unInitializedEventListeners.size());
enqueueForAll(unInitializedEventListeners, EventHelper.newInitEvent(newView));
eventListeners.addAll(unInitializedEventListeners);
unInitializedEventListeners.clear();
}
logger.trace("doHandleConsistent: setting previousView to {}", newView);
previousView = newView;
logger.trace("doHandleConsistent: end");
}