in src/main/java/org/apache/sling/resourceresolver/impl/observation/ResourceChangeListenerWhiteboard.java [57:105]
public void activate(
final BundleContext bundleContext,
final ResourceProviderTracker resourceProviderTracker,
final List<String> searchPath) {
this.searchPath = searchPath;
this.resourceProviderTracker = resourceProviderTracker;
this.resourceProviderTracker.setObservationReporterGenerator(this);
this.tracker = new ServiceTracker<>(
bundleContext,
ResourceChangeListener.class,
new ServiceTrackerCustomizer<ResourceChangeListener, ServiceReference<ResourceChangeListener>>() {
@Override
public void removedService(
final ServiceReference<ResourceChangeListener> reference,
final ServiceReference<ResourceChangeListener> service) {
final ResourceChangeListenerInfo info = listeners.remove(reference);
if (info != null) {
updateProviderTracker();
}
}
@Override
public void modifiedService(
final ServiceReference<ResourceChangeListener> reference,
final ServiceReference<ResourceChangeListener> service) {
removedService(reference, service);
addingService(reference);
}
@Override
public ServiceReference<ResourceChangeListener> addingService(
final ServiceReference<ResourceChangeListener> reference) {
final ResourceChangeListenerInfo info = new ResourceChangeListenerInfo(reference, searchPath);
if (info.isValid()) {
final ResourceChangeListener listener = bundleContext.getService(reference);
if (listener != null) {
info.setListener(listener);
listeners.put(reference, info);
updateProviderTracker();
}
} else {
logger.warn("Ignoring invalid resource change listener {}", reference);
}
return reference;
}
});
this.tracker.open();
}