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}