--- /dev/null
+package jalview.ws2;
+
+import java.io.Serializable;
+import java.net.URI;
+import java.util.Date;
+
+import jalview.util.MathUtils;
+
+import static java.lang.String.format;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+
+/**
+ * An id handler to the external job running on the server. This is the smallest
+ * job unit which might me a part of a larger multi-stage or parallel task
+ * handled by the WebServiceWorker. Jobs are created by the JalviewWebService on
+ * job submission and are used to identify that job during its lifetime. It can
+ * be serialized and used between application launches.
+ *
+ * @author mmwarowny
+ *
+ */
+public final class WSJob implements Serializable
+{
+ private static final long serialVersionUID = -4600214977954333787L;
+
+ /* Client-side identifier */
+ public final long uid = MathUtils.getUID();
+
+ private int jobNum = 0;
+
+ /* Shortened server name e.g. "slivka" or "jabaws" */
+ private String serviceProvider = "";
+
+ /* Name of the service e.g. "ClustalW2" */
+ private String serviceName = "";
+
+ /* Server-side identifier */
+ private String jobId = "";
+
+ private WSJobStatus status = WSJobStatus.UNKNOWN;
+
+ private String log = "";
+
+ private String errorLog = "";
+
+ /* Base url of the server associated with the job */
+ private String hostName = "";
+
+ private Date creationTime = new Date();
+
+ public PropertyChangeSupport pcs = new PropertyChangeSupport(this);
+
+ public WSJob()
+ {
+ }
+
+ public WSJob(String serviceProvider, String serviceName, String hostName)
+ {
+ this.serviceProvider = serviceProvider;
+ this.serviceName = serviceName;
+ this.hostName = hostName;
+ }
+
+ @Override
+ public String toString()
+ {
+ return format("%s:%s [%s] Created %s", serviceProvider, serviceName,
+ jobId, creationTime);
+ }
+
+ public int getJobNum()
+ {
+ return jobNum;
+ }
+
+ public void setJobNum(int jobNum)
+ {
+ this.jobNum = jobNum;
+ }
+
+ public WSJobStatus getStatus()
+ {
+ return status;
+ }
+
+ public void setStatus(WSJobStatus status)
+ {
+ var oldStatus = this.status;
+ this.status = status;
+ pcs.firePropertyChange("status", oldStatus, status);
+ }
+
+ public String getLog()
+ {
+ return log;
+ }
+
+ public void setLog(String log)
+ {
+ var oldLog = this.log;
+ this.log = log;
+ pcs.firePropertyChange("log", oldLog, log);
+ }
+
+ public String getErrorLog()
+ {
+ return errorLog;
+ }
+
+ public void setErrorLog(String log)
+ {
+ String oldErrorLog = this.errorLog;
+ this.errorLog = log;
+ pcs.firePropertyChange("errorLog", oldErrorLog, this.errorLog);
+ }
+
+ public long getUid()
+ {
+ return uid;
+ }
+
+ public String getServiceProvider()
+ {
+ return serviceProvider;
+ }
+
+ public void setServiceProvider(String serviceProvider)
+ {
+ this.serviceProvider = serviceProvider;
+ }
+
+ public String getServiceName()
+ {
+ return serviceName;
+ }
+
+ public void setServiceName(String serviceName)
+ {
+ this.serviceName = serviceName;
+ }
+
+ public String getJobId()
+ {
+ return jobId;
+ }
+
+ public void setJobId(String jobID)
+ {
+ this.jobId = jobID;
+ }
+
+ public String getHostName()
+ {
+ return hostName;
+ }
+
+ public void setHostName(String hostName)
+ {
+ this.hostName = hostName;
+ }
+
+ public Date getCreationTime()
+ {
+ return creationTime;
+ }
+
+ public void setCreationTime(Date creationTime)
+ {
+ this.creationTime = creationTime;
+ }
+
+ public void addPropertyChangeListener(PropertyChangeListener listener)
+ {
+ pcs.addPropertyChangeListener(listener);
+ }
+
+ public void addPropertyChangeListener(String propertyName,
+ PropertyChangeListener listener)
+ {
+ pcs.addPropertyChangeListener(propertyName, listener);
+ }
+
+ public void removePropertyChangeListener(PropertyChangeListener listener)
+ {
+ pcs.removePropertyChangeListener(listener);
+ }
+
+ public void removePropertyChagneListener(String propertyName,
+ PropertyChangeListener listener)
+ {
+ pcs.removePropertyChangeListener(propertyName, listener);
+ }
+}