001/*
002 * Copyright 2006 - 2013
003 *     Stefan Balev     <stefan.balev@graphstream-project.org>
004 *     Julien Baudry    <julien.baudry@graphstream-project.org>
005 *     Antoine Dutot    <antoine.dutot@graphstream-project.org>
006 *     Yoann Pigné      <yoann.pigne@graphstream-project.org>
007 *     Guilhelm Savin   <guilhelm.savin@graphstream-project.org>
008 * 
009 * This file is part of GraphStream <http://graphstream-project.org>.
010 * 
011 * GraphStream is a library whose purpose is to handle static or dynamic
012 * graph, create them from scratch, file or any source and display them.
013 * 
014 * This program is free software distributed under the terms of two licenses, the
015 * CeCILL-C license that fits European law, and the GNU Lesser General Public
016 * License. You can  use, modify and/ or redistribute the software under the terms
017 * of the CeCILL-C license as circulated by CEA, CNRS and INRIA at the following
018 * URL <http://www.cecill.info> or under the terms of the GNU LGPL as published by
019 * the Free Software Foundation, either version 3 of the License, or (at your
020 * option) any later version.
021 * 
022 * This program is distributed in the hope that it will be useful, but WITHOUT ANY
023 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
024 * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
025 * 
026 * You should have received a copy of the GNU Lesser General Public License
027 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
028 * 
029 * The fact that you are presently reading this means that you have had
030 * knowledge of the CeCILL-C and LGPL licenses and that you accept their terms.
031 */
032package org.graphstream.stream;
033
034/**
035 * Source of graph events.
036 * 
037 * <p>
038 * An source is something that produces graph events (attributes and elements),
039 * but does not contain a graph instance.
040 * </p>
041 * 
042 * @see Sink
043 * @see Pipe
044 */
045public interface Source {
046        /**
047         * Add a sink for all graph events (attributes and graph elements) coming
048         * from this source. This is similar to registering a sink for attributes an
049         * another for elements.
050         * 
051         * @param sink
052         *            The sink to register.
053         */
054        void addSink(Sink sink);
055
056        /**
057         * Remove a sink.
058         * 
059         * @param sink
060         *            The sink to remove, if it does not exist, this is ignored
061         *            silently.
062         */
063        void removeSink(Sink sink);
064
065        /**
066         * Add a sink for attribute events only. Attribute events include attribute
067         * addition change and removal.
068         * 
069         * @param sink
070         *            The sink to register.
071         */
072        void addAttributeSink(AttributeSink sink);
073
074        /**
075         * Remove an attribute sink.
076         * 
077         * @param sink
078         *            The sink to remove, if it does not exist, this is ignored
079         *            silently.
080         */
081        void removeAttributeSink(AttributeSink sink);
082
083        /**
084         * Add a sink for elements events only. Elements events include, addition
085         * and removal of nodes and edges, as well as step events.
086         * 
087         * @param sink
088         *            The sink to register.
089         */
090        void addElementSink(ElementSink sink);
091
092        /**
093         * Remove an element sink.
094         * 
095         * @param sink
096         *            The sink to remove, if it does not exist, this is ignored
097         *            silently.
098         */
099        void removeElementSink(ElementSink sink);
100
101        /**
102         * Remove all listener element sinks.
103         */
104        void clearElementSinks();
105
106        /**
107         * Remove all listener attribute sinks.
108         */
109        void clearAttributeSinks();
110
111        /**
112         * Remove all listener sinks.
113         */
114        void clearSinks();
115}