package com.netifera.platform.tasks.internal; import com.netifera.platform.tasks.TaskStatus; public class TaskProgressHelper { private final TaskStatus taskStatus; private final TaskOutputHelper output; private int totalWork = -1; private int worked; private int lastWorkedUpdate; TaskProgressHelper(Task task, TaskOutputHelper output) { this.taskStatus = task.getStatus(); this.output = output; } void setTotalWork(int totalWork) { this.totalWork = totalWork; worked = 0; taskStatus.setWorkDone(0); output.changed(); } void done() { taskStatus.updateElapsedTime(); worked(totalWork - worked); } void worked(int work) { // if (totalWork<0) // throw new RuntimeException("Trying to update progress, but totalWork was not set"); worked+=work; taskStatus.setWorkDone(worked*100/totalWork); /* notify change if more than 2% increment since last update */ if((worked-lastWorkedUpdate)*100/totalWork >= 2) { lastWorkedUpdate = worked; output.changed(); } } }