JAL-3878 Separate gui elements from operations.
[jalview.git] / src / jalview / ws2 / WebServiceWorkerListenersList.java
diff --git a/src/jalview/ws2/WebServiceWorkerListenersList.java b/src/jalview/ws2/WebServiceWorkerListenersList.java
new file mode 100644 (file)
index 0000000..a09c958
--- /dev/null
@@ -0,0 +1,73 @@
+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);
+  }
+}