package org.limewire.swarm.impl; import java.util.concurrent.CopyOnWriteArrayList; import org.limewire.collection.Range; import org.limewire.swarm.SwarmCoordinator; import org.limewire.swarm.SwarmCoordinatorListener; import org.limewire.swarm.SwarmFileSystem; /** * Wrapper class to help fire various events to the SwarmCoordinatorListeners */ public class SwarmCoordinatorListenerList { /** Coordinator Listeners are attached to. */ private final SwarmCoordinator swarmCoordinator; /** List of listeners. */ private final CopyOnWriteArrayList<SwarmCoordinatorListener> listeners = new CopyOnWriteArrayList<SwarmCoordinatorListener>(); /** * Constructor for SwarmCoordinatorListenerList * * @param swarmCoordinator coordinator listeners are attached to. */ public SwarmCoordinatorListenerList(SwarmCoordinator swarmCoordinator) { assert swarmCoordinator != null; this.swarmCoordinator = swarmCoordinator; } /** * Fires the downloadCompleted event to the attached listeners. */ public void downloadCompleted(SwarmFileSystem swarmFilesystem) { for (SwarmCoordinatorListener listener : listeners) { listener.downloadCompleted(swarmCoordinator, swarmFilesystem); } } /** * Fires the blockLeased event to the attached Listeners. */ public void blockLeased(Range block) { for (SwarmCoordinatorListener listener : listeners) { listener.blockLeased(swarmCoordinator, block); } } /** * Fires the blockUnleased event to the attached Listeners. */ public void blockUnleased(Range block) { for (SwarmCoordinatorListener listener : listeners) { listener.blockUnleased(swarmCoordinator, block); } } /** * Fires the blockPending event to the attached Listeners. */ public void blockPending(Range block) { for (SwarmCoordinatorListener listener : listeners) { listener.blockPending(swarmCoordinator, block); } } /** * Fires the blockUnpending event to the attached Listeners. */ public void blockUnpending(Range block) { for (SwarmCoordinatorListener listener : listeners) { listener.blockUnpending(swarmCoordinator, block); } } /** * Fires the blockWritten event to the attached Listeners. */ public void blockWritten(Range block) { for (SwarmCoordinatorListener listener : listeners) { listener.blockWritten(swarmCoordinator, block); } } /** * Fires the blockVerificationFailed event to the attached Listeners. */ public void blockVerificationFailed(Range failedRange) { for (SwarmCoordinatorListener listener : listeners) { listener.blockVerificationFailed(swarmCoordinator, failedRange); } } /** * Fires the blockVerified event to the attached Listeners. */ public void blockVerified(Range block) { for (SwarmCoordinatorListener listener : listeners) { listener.blockVerified(swarmCoordinator, block); } } /** * Added listener to the list of listeners listening to events on the swarm * Coordinator */ public void add(SwarmCoordinatorListener swarmListener) { listeners.add(swarmListener); } /** * Removes listener from this list. */ public void remove(SwarmCoordinatorListener swarmListener) { listeners.remove(swarmListener); } }