package org.limewire.swarm.impl;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.limewire.swarm.SwarmSource;
import org.limewire.swarm.SwarmSourceDownloader;
import org.limewire.swarm.SwarmSourceListener;
import org.limewire.swarm.SwarmStatus;
/**
* Acts as a delegate for dispatching events received in the SwarmSource to all added listeners.
*/
public class SwarmSourceListenerList implements SwarmSourceListener {
private final List<SwarmSourceListener> listeners;
public SwarmSourceListenerList() {
this.listeners = new CopyOnWriteArrayList<SwarmSourceListener>();
}
@Override
public void connectFailed(SwarmSourceDownloader swarmSourceHandler, SwarmSource source) {
for (SwarmSourceListener listener : listeners) {
listener.connectFailed(swarmSourceHandler, source);
}
}
@Override
public void connected(SwarmSourceDownloader swarmSourceHandler, SwarmSource source) {
for (SwarmSourceListener listener : listeners) {
listener.connected(swarmSourceHandler, source);
}
}
@Override
public void connectionClosed(SwarmSourceDownloader swarmSourceHandler, SwarmSource source) {
for (SwarmSourceListener listener : listeners) {
listener.connectionClosed(swarmSourceHandler, source);
}
}
@Override
public void finished(SwarmSourceDownloader swarmSourceHandler, SwarmSource source) {
for (SwarmSourceListener listener : listeners) {
listener.finished(swarmSourceHandler, source);
}
}
@Override
public void responseProcessed(SwarmSourceDownloader swarmSourceHandler, SwarmSource source,
SwarmStatus status) {
for (SwarmSourceListener listener : listeners) {
listener.responseProcessed(swarmSourceHandler, source, status);
}
}
/**
* Adds a listener to this list for event updates.
*/
public void addListener(SwarmSourceListener listener) {
listeners.add(listener);
}
/**
* Removes a listener from the event updates of this list.
*/
public void removeListener(SwarmSourceListener listener) {
listeners.remove(listener);
}
}