--- /dev/null
+package jalview.ws2;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.function.Consumer;
+
+public class WebServiceWorkerListenersList
+{
+ private WebServiceWorkerI owner;
+ private List<WebServiceWorkerListener> listeners = new CopyOnWriteArrayList<>();
+
+ public WebServiceWorkerListenersList(WebServiceWorkerI worker)
+ {
+ this.owner = worker;
+ }
+
+ public void addListener(WebServiceWorkerListener listener)
+ {
+ listeners.add(listener);
+ }
+
+ public void removeListener(WebServiceWorkerListener listener)
+ {
+ listeners.remove(listener);
+ }
+
+ public void fireWorkerStarted()
+ {
+ for (var listener : listeners)
+ listener.workerStarted(owner);
+ }
+
+ public void fireWorkerNotStarted()
+ {
+ for (var listener : listeners)
+ listener.workerNotStarted(owner);
+ }
+
+ public void fireJobCreated(WSJob job)
+ {
+ for (var listener : listeners)
+ listener.jobCreated(owner, job);
+ }
+
+ public void firePollException(WSJob job, Exception e)
+ {
+ for (var listener : listeners)
+ listener.pollException(owner, job, e);
+ }
+
+ public void fireWorkerCompleting()
+ {
+ for (var listener : listeners)
+ listener.workerCompleting(owner);
+ }
+
+ public void fireWorkerCompleted()
+ {
+ for (var listener : listeners)
+ listener.workerCompleted(owner);
+ }
+
+ public List<WebServiceWorkerListener> getListeners()
+ {
+ return listeners;
+ }
+
+ public void forEach(Consumer<WebServiceWorkerListener> consumer)
+ {
+ for (var listener : listeners)
+ consumer.accept(listener);
+ }
+}