java.lang.Object
com.inductiveautomation.ignition.gateway.tasks.AbstractTask
All Implemented Interfaces:
Task

public abstract class AbstractTask extends Object implements Task
This abstract implementation of Task handles some of the complexity of dealing with pausing, cancelling, and resuming. Implementations only have to implement doTaskWork(), though they may also implement the state related functions to allow for pausing.
  • Constructor Details

    • AbstractTask

      public AbstractTask(UUID id)
  • Method Details

    • getId

      public UUID getId()
      Specified by:
      getId in interface Task
    • getLoggerName

      protected abstract String getLoggerName()
    • getLogger

      protected LoggerEx getLogger()
    • getCurrentContext

      protected TaskContext getCurrentContext()
    • isStopped

      protected boolean isStopped()
    • run

      public final void run(TaskContext context) throws Exception
      Description copied from interface: Task
      Executes the task. This function should block until completion. If there is a problem executing the task, an exception should be thrown. It is important to note that while this function should block, the task must expect that at some point, suspend or cancel may be called.
      Specified by:
      run in interface Task
      Throws:
      Exception
    • suspend

      public Optional<Task.TaskStateModel> suspend(long timeoutMS) throws TimeoutException, InterruptedException
      Description copied from interface: Task
      When called, the task should stop as quickly as possible. If the task is able to resume, it should return a state that will be provided to it when restarted. If this function returns an empty value, it will not be resumed. If appropriate, the call should try to implement the timeout restriction passed in. A timeout of 0 means "no timeout".
      Specified by:
      suspend in interface Task
      Throws:
      TimeoutException
      InterruptedException
    • resume

      public void resume(Task.TaskStateModel state)
      Specified by:
      resume in interface Task
    • cancel

      public void cancel(long timeoutMS) throws TimeoutException, InterruptedException
      Description copied from interface: Task
      When called, the task should stop as quickly as possible. If appropriate, the call should try to implement the timeout restriction passed in. A timeout of 0 means "no timeout".
      Specified by:
      cancel in interface Task
      Throws:
      TimeoutException
      InterruptedException
    • getTaskStateModel

      protected Optional<Task.TaskStateModel> getTaskStateModel()
      Can be overridded by sub tasks to provide a state model when the task is suspended. This will be called after doTaskWork() has exited when the task is "stopped"
    • applyTaskStateModel

      protected void applyTaskStateModel(Task.TaskStateModel model)
      Can be overridden by sub classes to receive the state model before the task is resumed. At some point soon after this is called, the doTaskWork() function will be called.
    • doTaskWork

      protected abstract void doTaskWork(TaskContext context) throws Exception
      Should execute the work of the task. It is possible that this function will be called multiple times in the lifecycle of the task. The task may be paused, or the task may choose to yield execution. To yield, it should set its state to "WAITING", and return out of this function. At some point later, it can be resumed by calling resumeTask() on the context, or by the task manager.

      Inside of this function, the task should periodically check isStopped to see if the task has been paused or canceled.

      Throws:
      Exception