--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/tasks/Task.java 2016/01/28 11:25:01 2864 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/tasks/Task.java 2016/02/04 09:22:05 2915 @@ -1,17 +1,19 @@ package dk.daoas.adressevedligehold.tasks; import dk.daoas.adressevedligehold.util.TimingHelper; - import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; public abstract class Task implements Runnable { + private TaskLogger logger = TaskLogger.getInstance(); + public enum TaskState { STATE_QUEUED, STATE_RUNNING, STATE_DONE, STATE_ABORTED; } @SuppressFBWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")//bliver læst via gson - og det forvirrer findbugs public static class TaskBean { + public int id; public String description; public String detail; public String errorMessage; @@ -19,26 +21,40 @@ public String state; } - protected boolean abort = false; - protected TaskState state = TaskState.STATE_QUEUED; + protected volatile boolean abort = false;//mark volatile to make sure value isn't cached by threads + protected volatile TaskState state = TaskState.STATE_QUEUED; protected TaskManager manager; private String errorMsg; - public void setManager(TaskManager manager) { + private String logMessages; + + private int id; + + public final void setManager(TaskManager manager) { this.manager = manager; } @Override public final void run() { + + TaskLogger.getInstance().reset(); + TimingHelper timing = new TimingHelper(); - System.out.println("Starting " + this.getDescription() ); + + + logger.info("Starting " + this.getDescription() ); this.state = TaskState.STATE_RUNNING; manager.setCurrentTask(this); try { taskRun(); - this.state = TaskState.STATE_DONE; + + if (this.state != TaskState.STATE_ABORTED) { //just to make sure we wasn't aborted + this.state = TaskState.STATE_DONE; + } + + } catch (Exception e) { this.errorMsg = e.getMessage(); e.printStackTrace(); @@ -47,21 +63,42 @@ manager.setCurrentTask(null); - System.out.println("Done " + this.getDescription() + " " + timing.getElapsed() + "ms"); + logger.info("Done " + this.getDescription() + " " + timing.getElapsed() + "ms"); + + logMessages = TaskLogger.getInstance().getBuffer(); } + public final String getLog() { + if (this.state == TaskState.STATE_RUNNING) { + return TaskLogger.getInstance().getBuffer(); //if live return current log buffer content + } else { + return logMessages; + } + } - public TaskState getState() { + public final void setId(int newId) { + this.id = newId; + } + + public final int getId() { + return this.id; + } + + public final TaskState getState() { return this.state; } + public boolean isAborted() { + return this.abort; + } + public void doAbort() { this.abort = true; } public TaskBean getTaskBean() { TaskBean bean = new TaskBean(); - + bean.id = this.getId(); bean.description = this.getDescription(); bean.detail = this.getDetail(); bean.percentCompleted = this.getPercentCompleted(); @@ -85,6 +122,6 @@ public abstract String getDescription(); public abstract String getDetail(); - public abstract short getPercentCompleted(); + public abstract double getPercentCompleted(); }