--- /dev/null
+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());
+ }
+ }
+}