/** * Starts the task. * * <p>The registered {@link TaskListener} will be notified on completion or failure. * * @param context the task context */ public void start(TaskContext context) { this.context = context; condition.addTaskListener( new DefaultTaskListener() { @Override public void taskEvent(TaskEvent event) { onConditionEvent(event); } }); task.addTaskListener( new DefaultTaskListener() { @Override public void taskEvent(TaskEvent event) { onTaskEvent(event); } }); if (elseTask != null) { elseTask.addTaskListener( new DefaultTaskListener() { @Override public void taskEvent(TaskEvent event) { onTaskEvent(event); } }); } start(condition, context); }
/** * Invoked when the condition task completes or is cancelled. * * @param event the event */ private void onConditionEvent(TaskEvent event) { switch (event.getType()) { case SKIPPED: notifySkipped(); break; case CANCELLED: notifyCancelled(); break; case COMPLETED: if (condition.getValue()) { start(task, context); } else if (elseTask != null) { start(elseTask, context); } else { notifyCompleted(); } break; } }