package rmblworx.tools.timey.event; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; /* * Copyright 2014-2015 Christian Raue * MIT License http://opensource.org/licenses/mit-license.php */ /** * Verwaltet die Listener und verteilt die Events. * * @author mmatthies */ public class TimeyEventDispatcher { /** * Liste aller registrierten Event-Listener. */ private final List<TimeyEventListener> listener = new LinkedList<>(); /** * Registriert bei Dispatcher eine Listener-Implementierung. * * @param timeyEventListener * Referenz auf die Listener-Implementierung * @return true wenn erfolgreich sonst false */ public synchronized boolean addEventListener(final TimeyEventListener timeyEventListener) { boolean result = false; try { this.listener.add(timeyEventListener); result = true; } catch (final Exception e) { // momentan ignorieren } return result; } /** * Verteilt/ benachrichtigt alle registrierten Listener ueber das uebergebene Event. * * @param timeyEvent * das Event */ public synchronized void dispatchEvent(final TimeyEvent timeyEvent) { final Iterator<TimeyEventListener> it = this.listener.iterator(); while (it.hasNext()) { it.next().handleEvent(timeyEvent); } } /** * Liefert alle von der Implementierung verwalteten Listener zurück. * * @return unveränderliche Liste mit allen verwalteten Listenern. */ public synchronized List<TimeyEventListener> getRegisteredListeners() { return Collections.unmodifiableList(this.listener); } /** * Macht die Registrierung einer Listener-Implementierung wieder rueckgängig. Der Listener wird fortan nicht mehr * benachrichtigt. * * @param timeyEventListener * Referenz auf die Listener-Implementierung */ public synchronized void removeEventListener(final TimeyEventListener timeyEventListener) { this.listener.remove(timeyEventListener); } }