Package org.apache.sling.event.impl.discovery

# Class InitDelayingTopologyEventListener

java.lang.Object
org.apache.sling.event.impl.discovery.InitDelayingTopologyEventListener

All Implemented Interfaces:
  `org.apache.sling.discovery.TopologyEventListener`

public class InitDelayingTopologyEventListener extends Object implements org.apache.sling.discovery.TopologyEventListener
This listener facade applies a 'startup delay' to a topology event handler, that is, it allows to specify a startup time during which any topology events will be queued and processing only starts after this time. What happens aFter the startup time depends on what was received during the delay:

- if no events were received then this is a no-op
- if the last event received was a CHANGING then this facade waits until it receives the next non-CHANGING event (which should be the very next), to then simulate an INIT event (as the discovery API says the first event received is an INIT event).
- if the last event received was not a CHANGING event (ie it was an INIT, CHANGED or PROPERTIES), then as soon as the startup time passes this facade will simulate an INIT event (again, as the discovery API says the first event received is an INIT event)

Note that users of this facade must call dispose to avoid any async calls to the delegate after startup, in case they themselves are deactivated! This class is a cleaned copy of `InitDelayingTopologyEventListener` from discovery commons.

## Constructor Summary

Constructors
Constructor
Description
`InitDelayingTopologyEventListener(long startupDelay, org.apache.sling.discovery.TopologyEventListener delegate)`
Creates a new init-delaying listener with the given delay and delegate.

## Method Summary

Modifier and Type
Method
Description
`void`
`dispose()`
Marks this listener as no longer active - ensures that it doesn't call the delegate via any potentially pending scheduler callback.
`void`
`handleTopologyEvent(org.apache.sling.discovery.TopologyEvent event)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### InitDelayingTopologyEventListener

public InitDelayingTopologyEventListener(long startupDelay, org.apache.sling.discovery.TopologyEventListener delegate)
Creates a new init-delaying listener with the given delay and delegate.

For properly disposing the caller should use the dispose method!

Parameters:
  `startupDelay` - The startup delay in seconds
  `delegate` - The topology event listener
See Also:
  - `dispose()`

## Method Details

### handleTopologyEvent

public void handleTopologyEvent(org.apache.sling.discovery.TopologyEvent event)

Specified by:
  `handleTopologyEvent` in interface `org.apache.sling.discovery.TopologyEventListener`

### dispose

public void dispose()
Marks this listener as no longer active - ensures that it doesn't call the delegate via any potentially pending scheduler callback.

Note that after dispose you can *still* call handleTopologyEvent and the events are passed to the delegate - but those are expected to be 'late' events and not really part of the normal game. Hence, the caller must also ensure that the handleTopologyEvent method isn't called anymore (which typically is automatically guaranteed since the caller is typically an osgi service that gets unregistered anyway)