// // ======================================================================== // Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // and Apache License v2.0 which accompanies this distribution. // // The Eclipse Public License is available at // http://www.eclipse.org/legal/epl-v10.html // // The Apache License v2.0 is available at // http://www.opensource.org/licenses/apache2.0.php // // You may elect to redistribute this code under either of these licenses. // ======================================================================== // package org.eclipse.jetty.util.component; import java.util.Collection; /** * A Container */ public interface Container { /* ------------------------------------------------------------ */ /** * Add a bean. If the bean is-a {@link Listener}, then also do an implicit {@link #addEventListener(Listener)}. * @param o the bean object to add * @return true if the bean was added, false if it was already present */ public boolean addBean(Object o); /** * @return the list of beans known to this aggregate * @see #getBean(Class) */ public Collection<Object> getBeans(); /** * @param clazz the class of the beans * @return the list of beans of the given class (or subclass) * @param <T> the Bean type * @see #getBeans() */ public <T> Collection<T> getBeans(Class<T> clazz); /** * @param clazz the class of the bean * @return the first bean of a specific class (or subclass), or null if no such bean exist * @param <T> the Bean type */ public <T> T getBean(Class<T> clazz); /** * Removes the given bean. * If the bean is-a {@link Listener}, then also do an implicit {@link #removeEventListener(Listener)}. * @param o the bean to remove * @return whether the bean was removed */ public boolean removeBean(Object o); /** * Add an event listener. * @see Container#addBean(Object) * @param listener the listener to add */ public void addEventListener(Listener listener); /** * Remove an event listener. * @see Container#removeBean(Object) * @param listener the listener to remove */ public void removeEventListener(Listener listener); /** * A listener for Container events. * If an added bean implements this interface it will receive the events * for this container. */ public interface Listener { void beanAdded(Container parent,Object child); void beanRemoved(Container parent,Object child); } /** * Inherited Listener. * If an added bean implements this interface, then it will * be added to all contained beans that are themselves Containers */ public interface InheritedListener extends Listener { } }