public InitDelayingTopologyEventListener()

in src/main/java/org/apache/sling/discovery/commons/InitDelayingTopologyEventListener.java [98:147]


    public InitDelayingTopologyEventListener(final long startupDelay,
            final TopologyEventListener delegate,
            final Logger loggerOrNull) {

        if ( delegate == null ) {
            throw new IllegalArgumentException("delegate must not be null");
        }
        if ( startupDelay <= 0) {
            throw new IllegalArgumentException("startupDelay must be greater than 0, not " + startupDelay);
        }
        this.delegate = delegate;
        if ( loggerOrNull != null ) {
            this.logger = loggerOrNull;
        } else {
            this.logger = LoggerFactory.getLogger(this.getClass());
        }
        final Runnable r = new Runnable() {

            @Override
            public void run() {
                if (InitDelayingTopologyEventListener.this.active.get()) {
                    // only call afterStartupDelay if we're active
                    // (to avoid this call if disposed in the meantime)

                    // and since after disposing this listener is no longer
                    // used - ie it is a throw-away - you can create
                    // such a listener on each activate and dispose it on
                    // deactivate and you'll be fine.

                    // in any case - time for calling afterStartupDelay here:
                    afterStartupDelay();
                }
            }
        };

        // mark this listener as active
        this.active.set(true);

        // schedule me
        final Timer timer = new Timer();
        final TimerTask task = new TimerTask() {

            @Override
            public void run() {
                r.run();
            }
        };
        timer.schedule(task, startupDelay * 1000);
        // SLING-5560 : at this point either r is invoked immediately or scheduled after the delay
    }