JAL-3878 Refactoring SeqAnnotationServiceCalcWorker.
[jalview.git] / src / jalview / ws2 / gui / ProgressBarUpdater.java
diff --git a/src/jalview/ws2/gui/ProgressBarUpdater.java b/src/jalview/ws2/gui/ProgressBarUpdater.java
new file mode 100644 (file)
index 0000000..476308c
--- /dev/null
@@ -0,0 +1,47 @@
+package jalview.ws2.gui;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import jalview.gui.AlignFrame;
+import jalview.gui.IProgressIndicator;
+import jalview.ws2.WSJob;
+import jalview.ws2.WSJobStatus;
+
+public class ProgressBarUpdater implements PropertyChangeListener
+{
+  private IProgressIndicator progressIndicator;
+  
+  public ProgressBarUpdater(IProgressIndicator progressIndicator)
+  {
+    this.progressIndicator = progressIndicator;
+  }
+  
+  @Override
+  public void propertyChange(PropertyChangeEvent evt)
+  {
+    switch (evt.getPropertyName())
+    {
+    case "status":
+      statusChanged(evt);
+      break;
+    }
+  }
+
+  private void statusChanged(PropertyChangeEvent evt)
+  {
+    var job = (WSJob) evt.getSource();
+    var oldStatus = (WSJobStatus) evt.getOldValue();
+    var newStatus = (WSJobStatus) evt.getNewValue();
+    boolean wasRunning = oldStatus.isRunning() || oldStatus.isSubmitted();
+    boolean isRunning = newStatus.isRunning() || newStatus.isSubmitted();
+    if (!wasRunning && isRunning)
+    {
+      progressIndicator.setProgressBar(job.getServiceName(), job.getUid());
+    }
+    else if (wasRunning && !isRunning)
+    {
+      progressIndicator.removeProgressBar(job.getUid());
+    }
+  }
+}