/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.kernel.mixins;
import java.util.List;
/**
* Allow a service to be notified when other services change.
* This is useful for keeping an eye on changing providers, filters, and
* other services which drop in and out.
*
* @author Aaron Zeckoski (azeckoski @ gmail.com)
*/
public interface ServiceChangeListener {
/**
* Allows filtering so that notifications are only sent when classes
* implement one of the types specified. The listener method will
* only be called once regardless of how many types match.
* <p>
* Just return null or empty array to be notified for all service
* registrations.
*
* @return an array of classes OR null to be notified of all service registrations
*/
public Class<?>[] notifyForTypes();
/**
* This will be called when services are newly registered with the
* service manager. It will not be called when the core services
* are starting up though.
* <p>
* It is not called until the service is fully initialized.
* It is called once and only once per service that is registered.
*
* @param serviceName the name of the service
* @param service the service bean
* @param implementedTypes a list of all the class types which this service implements
*/
public void serviceRegistered(String serviceName, Object service, List<Class<?>> implementedTypes);
/**
* This will be called when services are removed from the service
* manager.
* Services which are replaced will not have this method called and
* will only receive
* {@link #serviceRegistered(String, Object, List)}.
* <p>
* It is called immediately before the service is completely destroyed
* so that the service object is still valid.
*
* @param serviceName the name of the service
* @param service the service bean
*/
public void serviceUnregistered(String serviceName, Object service);
}