package tc.oc.commons.core.scheduler; /** * A {@link Task} that can be rescheduled at any time, even after * being cancelled. Each instance can only have one schedule at * a time. Setting new parameters effectively cancels any previous * schedule. This is useful for debouncing. */ public class ReusableTask extends AbstractTask { private Parameters parameters; ReusableTask(Scheduler scheduler, Runnable runnable) { super(scheduler, runnable); } @Override public Parameters getParameters() { if(parameters == null) { throw new IllegalStateException("Task is not scheduled"); } return parameters; } public void schedule(Parameters parameters) { cancel(); this.parameters = parameters; scheduler.startTask(this); } @Override public void cancel() { if(parameters != null) { scheduler.cancelTask(this); } } @Override void setCancelled() { super.setCancelled(); this.parameters = null; } }