package net.frontlinesms.events.impl; import java.util.concurrent.CopyOnWriteArrayList; import net.frontlinesms.events.EventBus; import net.frontlinesms.events.EventObserver; import net.frontlinesms.events.FrontlineEventNotification; /** * Implementation of the event bus. * This class uses CopyOnWriteArrayList, so it * is thread safe. * @author Dieterich Lawson <dieterich@medic.frontlinesms.com> * @author Alex Anderson <alex@frontlinesms.com> */ public class FrontlineEventBus implements EventBus{ /** the observers that receive event notifications */ private CopyOnWriteArrayList<EventObserver> observers; public FrontlineEventBus(){ observers = new CopyOnWriteArrayList<EventObserver>(); } /** @see net.frontlinesms.events.EventBus#registerObserver(net.frontlinesms.events.EventObserver) */ public void registerObserver(EventObserver observer){ observers.addIfAbsent(observer); } /** @see net.frontlinesms.events.EventBus#unregisterObserver(net.frontlinesms.events.EventObserver) */ public void unregisterObserver(EventObserver observer){ observers.remove(observer); } /** @see net.frontlinesms.events.EventBus#triggerEvent(net.frontlinesms.events.FrontlineEvent) */ public void notifyObservers(FrontlineEventNotification event){ for(EventObserver observer: observers){ observer.notify(event); } } }