package ru.hflabs.rcd.task.performer; import java.util.Date; /** * Класс <class>TaskProgressHolder</class> содержит информацию о текущем прогрессе выполнения задачи * * @author Nazin Alexander */ public class TaskProgressHolder { /** Дата */ public final Date date; /** Автор */ public final String author; /** Общее количество шагов */ public final int totalSteps; /** Текущий шаг выполнение */ private volatile int currentStep; /** Текущий процент выполнения */ private volatile float percent; /** Родительский контекст выполнения */ private TaskProgressHolder parent; public TaskProgressHolder(Date date, String author, int totalSteps) { this.totalSteps = totalSteps; this.currentStep = 0; this.percent = 0f; this.date = date; this.author = author; } public TaskProgressHolder(int totalSteps, TaskProgressHolder parent) { this(parent.date, parent.author, totalSteps); this.parent = parent; } /** * Возвращает процент выполнения корневого контекста * * @return Возвращает процент выполнения корневого контекста */ public float totalProgress() { if (parent != null) { return parent.totalProgress(); } return percent; } /** * Возвращает текущий процент выполнения * * @return Возвращает текущий процент выполнения */ public float currentProgress() { return percent; } /** * Выполняет обновление процента выполнения текущий и конревой задачи * * @param child процент выполнения вспомогательной задачи */ private void nextStep(float child) { percent = ((float) currentStep + child) / (float) (totalSteps); if (parent != null) { parent.nextStep(percent); } } /** * Увеличивает текущий прогресс выполняемой задачи * * @return Возвращает контекст выполнения */ public TaskProgressHolder nextStep() { currentStep++; nextStep(0f); return this; } }