JAL-3878 Separate gui elements from operations.
[jalview.git] / src / jalview / ws2 / WebServiceInfoUpdater.java
index eb3e350..c9557c6 100644 (file)
@@ -8,25 +8,32 @@ import jalview.gui.WebserviceInfo;
 
 public class WebServiceInfoUpdater implements PropertyChangeListener
 {
+  private final WebServiceWorkerI worker;
   private final WebserviceInfo wsInfo;
+
   private String outputHeader = "";
 
-  public WebServiceInfoUpdater(WebserviceInfo wsInfo) {
+  public WebServiceInfoUpdater(WebServiceWorkerI worker, WebserviceInfo wsInfo)
+  {
+    this.worker = worker;
     this.wsInfo = wsInfo;
   }
 
-  public String getOutputHeader() {
+  public String getOutputHeader()
+  {
     return outputHeader;
   }
 
-  public void setOutputHeader(String header) {
+  public void setOutputHeader(String header)
+  {
     this.outputHeader = header;
   }
 
   @Override
   public void propertyChange(PropertyChangeEvent evt)
   {
-    switch (evt.getPropertyName()) {
+    switch (evt.getPropertyName())
+    {
     case "status":
       statusChanged(evt);
       break;
@@ -39,11 +46,13 @@ public class WebServiceInfoUpdater implements PropertyChangeListener
     }
   }
 
-  private void statusChanged(PropertyChangeEvent evt) {
+  private void statusChanged(PropertyChangeEvent evt)
+  {
     WSJob job = (WSJob) evt.getSource();
     WSJobStatus status = (WSJobStatus) evt.getNewValue();
     int wsInfoStatus = 0;
-    switch (status) {
+    switch (status)
+    {
     case READY:
     case SUBMITTED:
     case QUEUED:
@@ -69,21 +78,54 @@ public class WebServiceInfoUpdater implements PropertyChangeListener
       break;
     }
     wsInfo.setStatus(job.getJobNum(), wsInfoStatus);
+    updateWSInfoGlobalStatus();
   }
 
-  private void logChanged(PropertyChangeEvent evt) {
+  private void logChanged(PropertyChangeEvent evt)
+  {
     WSJob job = (WSJob) evt.getSource();
     String oldLog = (String) evt.getOldValue();
     String newLog = (String) evt.getNewValue();
-    wsInfo.appendProgressText(job.getJobNum(), newLog.substring(oldLog.length()));
+    wsInfo.appendProgressText(job.getJobNum(),
+            newLog.substring(oldLog.length()));
   }
 
-  private void errorLogChanged(PropertyChangeEvent evt) {
+  private void errorLogChanged(PropertyChangeEvent evt)
+  {
     WSJob job = (WSJob) evt.getSource();
     String oldLog = (String) evt.getOldValue();
     String newLog = (String) evt.getNewValue();
-    wsInfo.appendProgressText(job.getJobNum(), newLog.substring(oldLog.length()));
+    wsInfo.appendProgressText(job.getJobNum(),
+            newLog.substring(oldLog.length()));
   }
 
 
+  private void updateWSInfoGlobalStatus()
+  {
+    var jobs = worker.getJobs();
+    if (jobs.countRunning() > 0)
+    {
+      wsInfo.setStatus(WebserviceInfo.STATE_RUNNING);
+    }
+    else if (jobs.countQueuing() > 0
+            || jobs.countSubmitted() < jobs.size())
+    {
+      wsInfo.setStatus(WebserviceInfo.STATE_QUEUING);
+    }
+    else
+    {
+      if (jobs.countSuccessful() > 0)
+      {
+        wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_OK);
+      }
+      else if (jobs.countCancelled() > 0)
+      {
+        wsInfo.setStatus(WebserviceInfo.STATE_CANCELLED_OK);
+      }
+      else if (jobs.countFailed() > 0)
+      {
+        wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR);
+      }
+    }
+  }
 }