Merge branch 'JAL-3878_web_services_overhaul' into try-to-update-slivka-jar
[jalview.git] / src / jalview / ws2 / WSJob.java
diff --git a/src/jalview/ws2/WSJob.java b/src/jalview/ws2/WSJob.java
new file mode 100755 (executable)
index 0000000..0de6b22
--- /dev/null
@@ -0,0 +1,195 @@
+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);
+  }
+}