package io.github.lucaseasedup.logit.account;
import io.github.lucaseasedup.logit.common.CancellableEvent;
import java.util.ArrayList;
import java.util.List;
public abstract class AccountEvent extends CancellableEvent
{
/* package */ AccountEvent()
{
}
/**
* Schedules a task to be executed when the action following
* this event succeeds.
*
* @param task the task to be scheduled.
*
* @throws IllegalArgumentException if {@code task} is {@code null}.
* @throws IllegalStateException if tasks have already been executed.
*/
public final void scheduleSuccessTask(Runnable task)
{
if (task == null)
throw new IllegalArgumentException();
if (successTasks == null)
throw new IllegalStateException();
successTasks.add(task);
}
/**
* Schedules a task to be executed when the action following
* this event fails.
*
* @param task the task to be scheduled.
*
* @throws IllegalArgumentException if {@code task} is {@code null}.
* @throws IllegalStateException if tasks have already been executed.
*/
public final void scheduleFailureTask(Runnable task)
{
if (task == null)
throw new IllegalArgumentException();
if (failureTasks == null)
throw new IllegalStateException();
failureTasks.add(task);
}
/* package */ final void executeSuccessTasks()
{
if (successTasks == null)
{
invalidateTaskLists();
throw new IllegalStateException();
}
for (Runnable task : successTasks)
{
task.run();
}
invalidateTaskLists();
}
/* package */ final void executeFailureTasks()
{
if (failureTasks == null)
{
invalidateTaskLists();
throw new IllegalStateException();
}
for (Runnable task : failureTasks)
{
task.run();
}
invalidateTaskLists();
}
private void invalidateTaskLists()
{
successTasks = null;
failureTasks = null;
}
private List<Runnable> successTasks = new ArrayList<>();
private List<Runnable> failureTasks = new ArrayList<>();
}