]> WPIA git - gigi.git/blobdiff - lib/jetty/org/eclipse/jetty/util/component/Container.java
Importing upstream Jetty jetty-9.2.1.v20140609
[gigi.git] / lib / jetty / org / eclipse / jetty / util / component / Container.java
diff --git a/lib/jetty/org/eclipse/jetty/util/component/Container.java b/lib/jetty/org/eclipse/jetty/util/component/Container.java
new file mode 100644 (file)
index 0000000..a5a4c75
--- /dev/null
@@ -0,0 +1,92 @@
+//
+//  ========================================================================
+//  Copyright (c) 1995-2014 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;
+
+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)
+     * @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
+     */
+    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)}.
+     * @return whether the bean was removed
+     */
+    public boolean removeBean(Object o);
+    
+    /**
+     * Add an event listener. 
+     * @see Container#addBean(Object)
+     * @param listener
+     */
+    public void addEventListener(Listener listener);
+    
+    /**
+     * Remove an event listener. 
+     * @see Container#removeBean(Object)
+     * @param listener
+     */
+    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
+    {
+    }
+}