in src/main/java/org/apache/sling/discovery/commons/providers/base/ViewStateManagerImpl.java [184:222]
public void bind(final TopologyEventListener eventListener) {
logger.trace("bind: start {}", eventListener);
lock.lock();
try{
logger.debug("bind: Binding TopologyEventListener {}",
eventListener);
if (eventListeners.contains(eventListener) || unInitializedEventListeners.contains(eventListener)) {
logger.info("bind: TopologyEventListener already registered: "+eventListener);
return;
}
if (activated) {
// check to see in which state we are
if (isChanging || (previousView==null)) {
// then we cannot send the TOPOLOGY_INIT at this point - need to delay this
if (logger.isDebugEnabled()) {
logger.debug("bind: view is not yet/currently not defined (isChanging: "+isChanging+
", previousView==null: "+(previousView==null)+
", delaying INIT to "+eventListener);
}
unInitializedEventListeners.add(eventListener);
} else {
// otherwise we can send the TOPOLOGY_INIT now
logger.debug("bind: view is defined, sending INIT now to {}",
eventListener);
enqueue(eventListener, EventHelper.newInitEvent(previousView), true);
eventListeners.add(eventListener);
}
} else {
logger.debug("bind: not yet activated, delaying INIT to {}",
eventListener);
unInitializedEventListeners.add(eventListener);
}
} finally {
lock.unlock();
logger.trace("bind: end");
}
}