--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/tasks/Task.java 2016/01/24 21:48:55 2838 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/tasks/Task.java 2016/01/30 14:05:53 2878 @@ -2,15 +2,19 @@ import dk.daoas.adressevedligehold.util.TimingHelper; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + public abstract class Task implements Runnable { 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 String description; public String detail; + public String errorMessage; public double percentCompleted; public String state; } @@ -18,6 +22,7 @@ protected boolean abort = false; protected TaskState state = TaskState.STATE_QUEUED; protected TaskManager manager; + private String errorMsg; public void setManager(TaskManager manager) { this.manager = manager; @@ -35,6 +40,8 @@ taskRun(); this.state = TaskState.STATE_DONE; } catch (Exception e) { + this.errorMsg = e.getMessage(); + e.printStackTrace(); this.state = TaskState.STATE_ABORTED; } @@ -48,6 +55,10 @@ return this.state; } + public boolean isAborted() { + return this.abort; + } + public void doAbort() { this.abort = true; } @@ -59,11 +70,22 @@ bean.detail = this.getDetail(); bean.percentCompleted = this.getPercentCompleted(); bean.state = this.state.toString(); + bean.errorMessage = this.getErrorMessage(); return bean; } - protected abstract void taskRun(); + public String getErrorMessage() { + return this.errorMsg; + } + + /** + * @throws Exception + * + * Implementing classes should not catch terminating exceptions but let it propagate to Task the Task::run() + * method. + */ + protected abstract void taskRun() throws Exception; public abstract String getDescription(); public abstract String getDetail();