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.net; 033 034import java.io.IOException; 035import java.net.URL; 036 037import org.graphstream.stream.Source; 038 039/** 040 * Graph event input source from an URL. 041 */ 042public interface URLSource extends Source { 043 /** 044 * Read the whole URL in one big non-interruptible operation. 045 * 046 * @param url 047 * The URL to fetch. 048 * @throws IOException 049 * If an I/O error occurs while fetching the URL. 050 */ 051 void fetchAll(URL url) throws IOException; 052 053 /** 054 * Begin fetching the URL stopping as soon as possible. Next graph events 055 * from the URL will be send by calling {@link #nextEvents()}. Once begin() 056 * as been called, you must finish the reading process using {@link #end()}. 057 * You cannot call begin() twice without having called {@link #end()} in 058 * between. 059 * 060 * @param url 061 * The URL to fetch. 062 * @throws IOException 063 * If an I/O error occurs while reading. 064 */ 065 void begin(URL url) throws IOException; 066 067 /** 068 * Try to process one graph event, or as few as possible, if more must be 069 * read at once. For this method to work, you must have called 070 * {@link #begin(URL)}. This method return true while there are still events 071 * to read. 072 * 073 * @return true if there are still events to read, false as soon as the file 074 * is finished. 075 * @throws IOException 076 * If an I/O error occurs while reading. 077 */ 078 boolean nextEvents() throws IOException; 079 080 /** 081 * Finish the reading process (even if {@link #nextEvents()} did not 082 * returned false). You must call this method after reading. 083 * 084 * @throws IOException 085 * If an I/O error occurs while closing the file. 086 */ 087 void end() throws IOException; 088}