JAL-3878 Separate gui elements from operations.
[jalview.git] / src / jalview / ws2 / WebServiceInfoUpdater.java
1 package jalview.ws2;
2
3 import java.beans.PropertyChangeEvent;
4 import java.beans.PropertyChangeListener;
5 import java.util.Objects;
6
7 import jalview.gui.WebserviceInfo;
8
9 public class WebServiceInfoUpdater implements PropertyChangeListener
10 {
11   private final WebServiceWorkerI worker;
12   private final WebserviceInfo wsInfo;
13
14   private String outputHeader = "";
15
16   public WebServiceInfoUpdater(WebServiceWorkerI worker, WebserviceInfo wsInfo)
17   {
18     this.worker = worker;
19     this.wsInfo = wsInfo;
20   }
21
22   public String getOutputHeader()
23   {
24     return outputHeader;
25   }
26
27   public void setOutputHeader(String header)
28   {
29     this.outputHeader = header;
30   }
31
32   @Override
33   public void propertyChange(PropertyChangeEvent evt)
34   {
35     switch (evt.getPropertyName())
36     {
37     case "status":
38       statusChanged(evt);
39       break;
40     case "log":
41       logChanged(evt);
42       break;
43     case "errorLog":
44       errorLogChanged(evt);
45       break;
46     }
47   }
48
49   private void statusChanged(PropertyChangeEvent evt)
50   {
51     WSJob job = (WSJob) evt.getSource();
52     WSJobStatus status = (WSJobStatus) evt.getNewValue();
53     int wsInfoStatus = 0;
54     switch (status)
55     {
56     case READY:
57     case SUBMITTED:
58     case QUEUED:
59       wsInfoStatus = WebserviceInfo.STATE_QUEUING;
60       break;
61     case RUNNING:
62       wsInfoStatus = WebserviceInfo.STATE_RUNNING;
63       break;
64     case FINISHED:
65       wsInfoStatus = WebserviceInfo.STATE_STOPPED_OK;
66       break;
67     case CANCELLED:
68       wsInfoStatus = WebserviceInfo.STATE_CANCELLED_OK;
69       break;
70     case INVALID:
71     case BROKEN:
72     case FAILED:
73     case UNKNOWN:
74       wsInfoStatus = WebserviceInfo.STATE_STOPPED_ERROR;
75       break;
76     case SERVER_ERROR:
77       wsInfoStatus = WebserviceInfo.STATE_STOPPED_SERVERERROR;
78       break;
79     }
80     wsInfo.setStatus(job.getJobNum(), wsInfoStatus);
81     updateWSInfoGlobalStatus();
82   }
83
84   private void logChanged(PropertyChangeEvent evt)
85   {
86     WSJob job = (WSJob) evt.getSource();
87     String oldLog = (String) evt.getOldValue();
88     String newLog = (String) evt.getNewValue();
89     wsInfo.appendProgressText(job.getJobNum(),
90             newLog.substring(oldLog.length()));
91   }
92
93   private void errorLogChanged(PropertyChangeEvent evt)
94   {
95     WSJob job = (WSJob) evt.getSource();
96     String oldLog = (String) evt.getOldValue();
97     String newLog = (String) evt.getNewValue();
98     wsInfo.appendProgressText(job.getJobNum(),
99             newLog.substring(oldLog.length()));
100   }
101
102
103   private void updateWSInfoGlobalStatus()
104   {
105     var jobs = worker.getJobs();
106     if (jobs.countRunning() > 0)
107     {
108       wsInfo.setStatus(WebserviceInfo.STATE_RUNNING);
109     }
110     else if (jobs.countQueuing() > 0
111             || jobs.countSubmitted() < jobs.size())
112     {
113       wsInfo.setStatus(WebserviceInfo.STATE_QUEUING);
114     }
115     else
116     {
117       if (jobs.countSuccessful() > 0)
118       {
119         wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_OK);
120       }
121       else if (jobs.countCancelled() > 0)
122       {
123         wsInfo.setStatus(WebserviceInfo.STATE_CANCELLED_OK);
124       }
125       else if (jobs.countFailed() > 0)
126       {
127         wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR);
128       }
129     }
130   }
131 }