/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.toolkit.modules.objectbindings.api; /** * A service providing a registry of object "bindings" for a class, and consumers consuming these bindings. Bindings are simply instances of * the binding class (for example, a listener interface). There can be multiple instances for the same class. * <p> * A typical use case would be a service providing a listener interface for notifications about its state. This service would register * itself as a consumer for the listener interface class, and any listener would register itself as a binding for the listener interface. * The service will then receive all listener implementations (regardless of whether they were registered before or after the service) via * {@link ObjectBindingsConsumer#addInstance(Object)}. * <p> * The advantages of this service over direct listener registration are: * * <ul> * <li>less coupling between the participants of the binding (implementation/consumer) * <li>bindings/listeners can always be registered regardless of the consumer's lifecycle * <li>the ability to replace the consumer for a certain binding class while maintaining the bindings setup * <li>better support for centralized deregistration (via {@link #removeAllBindingsOfOwner(Object)} * </ul> * . * * @author Robert Mischke * */ public interface ObjectBindingsService { /** * @param <T> see "bindingClass" parameter * @param bindingClass the "binding class"; usually a service or listener interface that allows multiple instances at once to be * registered * @param implementation the binding class implementation to register * @param owner the "owner" of this binding, which is typically the object performing the {@link #addBinding()} call; can be used to * simplify deregistration of listeners or plugins by simply calling {@link #removeAllBindingsOfOwner(this)} on shutdown */ <T> void addBinding(Class<T> bindingClass, T implementation, Object owner); /** * @param <T> see "bindingClass" parameter * @param bindingClass the "binding class"; usually a service or listener interface that allows multiple instances at once to be * registered * @param implementation the binding class implementation to register */ <T> void removeBinding(Class<T> bindingClass, T implementation); /** * NOTE: this method is not implemented yet. * * @param owner the "owner" for which all registered bindings should be removed/unregistered */ void removeAllBindingsOfOwner(Object owner); /** * Sets the consumer for a certain binding class. All registered instances (or their removal) for a binding class will be reported to * its registered consumer, regardless or whether the binding or the consumer was added first. Similarly, unregistered bindings will be * deregistered from a consumer, and the same happens when the consumer itself is deregistered. * * @param <T> see "bindingClass" parameter * @param bindingClass the "binding class"; usually a service or listener interface that allows multiple instances at once to be * registered * @param consumer the consumer to which all registered bindings are reported */ <T> void setConsumer(Class<T> bindingClass, ObjectBindingsConsumer<T> consumer); }