package io.trygvis.queue; import java.util.*; import static java.util.Collections.unmodifiableList; /** * TODO: next run on failures. A default strategy from the queue, let the task be able to re-schedule itself. */ public class Task { public final long id; public final String queue; public final Date scheduled; public final Date lastRun; public final int runCount; public final Date completed; public final List arguments; Task(long id, String queue, Date scheduled, Date lastRun, int runCount, Date completed, List arguments) { this.id = id; this.queue = queue; this.scheduled = scheduled; this.lastRun = lastRun; this.runCount = runCount; this.completed = completed; this.arguments = unmodifiableList(new ArrayList<>(arguments)); } public Task registerRun() { return new Task(id, queue, scheduled, new Date(), runCount + 1, completed, arguments); } public Task registerComplete(Date completed) { return new Task(id, queue, scheduled, lastRun, runCount, new Date(), arguments); } public String toString() { return "Task{" + "id=" + id + ", queue=" + queue + ", scheduled=" + scheduled + ", lastRun=" + lastRun + ", runCount=" + runCount + ", completed=" + completed + ", arguments='" + arguments + '\'' + '}'; } public boolean isDone() { return completed != null; } }