public void bind()

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