001package org.javasimon.callback;
002
003import java.util.List;
004
005/**
006 * Composite {@link Callback} can hold more callbacks which allows to form callback trees where events are passed to
007 * sub-callbacks. Events can be filtered using {@link FilterCallback} which may be set up to pass only specific
008 * events under certain circumstances.
009 * This can be configured via Manager configuration facility. (Configuration part is still rather WIP.)
010 * <p/>
011 * Callback tree has no correlation with Simon tree in the {@link org.javasimon.Manager}).
012 *
013 * @author <a href="mailto:virgo47@gmail.com">Richard "Virgo" Richter</a>
014 * @since 3.2
015 */
016public interface CompositeCallback extends Callback {
017
018        /**
019         * Returns the list of all child-callbacks.
020         *
021         * @return children list
022         */
023        List<Callback> callbacks();
024
025        /**
026         * Adds another callback as a child to this callback.
027         *
028         * @param callback added callback
029         */
030        void addCallback(Callback callback);
031
032        /**
033         * Removes specified callback from this callback.
034         *
035         * @param callback removed child-callback
036         */
037        void removeCallback(Callback callback);
038
039        /** Removes all callbacks from this callback. */
040        void removeAllCallbacks();
041}