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.sync; 033 034import java.security.AccessControlException; 035import java.util.HashMap; 036 037public class SinkTime { 038 /** 039 * Key used to disable synchro. Just run : java -DSYNC_DISABLE_KEY ... 040 */ 041 public static final String SYNC_DISABLE_KEY = "org.graphstream.stream.sync.disable"; 042 /** 043 * Flag used to disable sync. 044 */ 045 protected static final boolean disableSync; 046 047 /* 048 * The following code is used to prevent AccessControlException to be thrown 049 * when trying to get the value of the property (in applets for example). 050 */ 051 static { 052 boolean off; 053 054 try { 055 off = System.getProperty(SYNC_DISABLE_KEY) != null; 056 } catch (AccessControlException ex) { 057 off = false; 058 } 059 060 disableSync = off; 061 } 062 063 /** 064 * Map storing times of sources. 065 */ 066 protected HashMap<String, Long> times = new HashMap<String, Long>(); 067 068 /** 069 * Update timeId for a source. 070 * 071 * @param sourceId 072 * @param timeId 073 * @return true if time has been updated 074 */ 075 protected boolean setTimeFor(String sourceId, long timeId) { 076 Long knownTimeId = times.get(sourceId); 077 078 if (knownTimeId == null) { 079 times.put(sourceId, timeId); 080 return true; 081 } else if (timeId > knownTimeId) { 082 times.put(sourceId, timeId); 083 return true; 084 } 085 086 return false; 087 } 088 089 /** 090 * Allow to know if event is new for this source. This updates the timeId 091 * mapped to the source. 092 * 093 * @param sourceId 094 * @param timeId 095 * @return true if event is new for the source 096 */ 097 public boolean isNewEvent(String sourceId, long timeId) { 098 return disableSync || setTimeFor(sourceId, timeId); 099 } 100}