package dk.daoas.adressevedligehold.tasks; import dk.daoas.adressevedligehold.util.TimingHelper; public abstract class Task implements Runnable { public enum TaskState { STATE_QUEUED, STATE_RUNNING, STATE_DONE, STATE_ABORTED; } public static class TaskBean { public String description; public String detail; public double percentCompleted; public String state; } protected boolean abort = false; protected TaskState state = TaskState.STATE_QUEUED; protected TaskManager manager; public void setManager(TaskManager manager) { this.manager = manager; } @Override public final void run() { TimingHelper timing = new TimingHelper(); System.out.println("Starting " + this.getDescription() ); this.state = TaskState.STATE_RUNNING; manager.setCurrentTask(this); try { taskRun(); this.state = TaskState.STATE_DONE; } catch (Exception e) { this.state = TaskState.STATE_ABORTED; } manager.setCurrentTask(null); System.out.println("Done " + this.getDescription() + " " + timing.getElapsed() + "ms"); } public TaskState getState() { return this.state; } public void doAbort() { this.abort = true; } public TaskBean getTaskBean() { TaskBean bean = new TaskBean(); bean.description = this.getDescription(); bean.detail = this.getDetail(); bean.percentCompleted = this.getPercentCompleted(); bean.state = this.state.toString(); return bean; } protected abstract void taskRun(); public abstract String getDescription(); public abstract String getDetail(); public abstract short getPercentCompleted(); }