import java.util.concurrent.TimeUnit;
import jalview.bin.Cache;
+import jalview.util.ArrayUtils;
+import jalview.util.MathUtils;
import jalview.ws.params.ArgumentI;
import jalview.ws2.actions.api.TaskEventListener;
import jalview.ws2.actions.api.TaskI;
*/
public abstract class AbstractPollableTask<T extends BaseJob, R> implements TaskI<R>
{
+ private final long uid = MathUtils.getUID();
+
protected final WebServiceClientI client;
protected final List<ArgumentI> args;
this.eventHandler = new TaskEventSupport<R>(this, eventListener);
}
+ public long getUid()
+ {
+ return uid;
+ }
+
/**
* Start the task using provided scheduled executor service. It creates a
* polling loop running at set intervals.
*/
private void updateGlobalStatus()
{
- JobStatus newStatus = taskStatus;
- int currentPrecedence = getPrecedenceOf(newStatus);
+ int precedence = -1;
for (BaseJob job : jobs)
{
JobStatus status = job.getStatus();
- int jobPrecedence = getPrecedenceOf(status);
- if (currentPrecedence < jobPrecedence)
- {
- currentPrecedence = jobPrecedence;
- newStatus = status;
- }
+ int jobPrecedence = ArrayUtils.indexOf(JobStatus.statusPrecedence, status);
+ if (precedence < jobPrecedence)
+ precedence = jobPrecedence;
}
- setStatus(newStatus);
- }
-
- /**
- * A precedence order of job statuses used to compute the overall task status.
- */
- private static JobStatus[] statusPrecedence = {
- JobStatus.INVALID, // all must be invalid for task to be invalid
- JobStatus.COMPLETED, // all but invalid must be completed for task to be
- // completed
- JobStatus.UNKNOWN, // unknown prevents successful completion but not
- // running or failure
- JobStatus.READY,
- JobStatus.SUBMITTED,
- JobStatus.QUEUED,
- JobStatus.RUNNING,
- JobStatus.CANCELLED, // if any is terminated unsuccessfully, the task is
- // failed
- JobStatus.FAILED,
- JobStatus.SERVER_ERROR
- };
-
- /**
- * @param status
- * status to find the precedence of
- * @return precedence of the status
- */
- private static int getPrecedenceOf(JobStatus status)
- {
- final int len = statusPrecedence.length;
- for (int i = 0; i < len; i++)
+ if (precedence >= 0)
{
- if (statusPrecedence[i] == status)
- {
- return i;
- }
+ setStatus(JobStatus.statusPrecedence[precedence]);
}
- return -1;
}
@Override