package org.prevayler.implementation.publishing; import org.prevayler.Clock; import org.prevayler.implementation.TransactionTimestamp; import java.util.Iterator; import java.util.LinkedList; import java.util.List; /** * This class provides basic subscriber addition and notification. */ public abstract class AbstractPublisher implements TransactionPublisher { protected final Clock _clock; private final List _subscribers=new LinkedList(); public AbstractPublisher( Clock clock){ _clock=clock; } public Clock clock(){ return _clock; } public synchronized void addSubscriber( TransactionSubscriber subscriber){ _subscribers.add(subscriber); } public synchronized void cancelSubscription( TransactionSubscriber subscriber){ _subscribers.remove(subscriber); } protected synchronized void notifySubscribers( TransactionTimestamp transactionTimestamp){ Iterator i=_subscribers.iterator(); while (i.hasNext()) ((TransactionSubscriber)i.next()).receive(transactionTimestamp); } }