package java.util;

/**
 * A task that can be scheduled for one-time or repeated execution by a Timer.
 *
 * @deprecated Please consider <code>ej.bon.TimerTask</code> from BON
 *             specification instead.
 */
@Deprecated
public abstract class TimerTask implements Runnable {

	/**
	 * Creates a new timer task.
	 */
	protected TimerTask() {
	}

	/**
	 * Cancels this timer task. If the task has been scheduled for one-time
	 * execution and has not yet run, or has not yet been scheduled, it will never
	 * run. If the task has been scheduled for repeated execution, it will never run
	 * again. (If the task is running when this call occurs, the task will run to
	 * completion, but will never run again.)
	 *
	 * <p>
	 * Note that calling this method from within the <code>run</code> method of a
	 * repeating timer task absolutely guarantees that the timer task will not run
	 * again.
	 *
	 * <p>
	 * This method may be called repeatedly; the second and subsequent calls have no
	 * effect.
	 *
	 * @return true if this task is scheduled for one-time execution and has not yet
	 *         run, or this task is scheduled for repeated execution. Returns false
	 *         if the task was scheduled for one-time execution and has already run,
	 *         or if the task was never scheduled, or if the task was already
	 *         cancelled. (Loosely speaking, this method returns <code>true</code> if it
	 *         prevents one or more scheduled executions from taking place.)
	 */
	public boolean cancel() {
		throw new RuntimeException();
	}

	/**
	 * The action to be performed by this timer task.
	 */
	@Override
	public abstract void run();

	/**
	 * Returns the <i>scheduled</i> execution time of the most recent <i>actual</i> execution of this
	 * task. (If this method is invoked while task execution is in progress, the return value is the
	 * scheduled execution time of the ongoing task execution.)
	 *
	 * <p>
	 * This method is typically invoked from within a task's run method, to determine whether the
	 * current execution of the task is sufficiently timely to warrant performing the scheduled
	 * activity:
	 *
	 * <pre>
	 * public void run() {
	 * 	if (System.currentTimeMillis() - scheduledExecutionTime() &gt;= MAX_TARDINESS)
	 * 		return; // Too late; skip this execution.
	 * 	// Perform the task
	 * }
	 * </pre>
	 *
	 * This method is typically <i>not</i> used in conjunction with <i>fixed-delay execution</i>
	 * repeating tasks, as their scheduled execution times are allowed to drift over time, and so are
	 * not terribly significant.
	 *
	 * @return the time at which the most recent execution of this task was scheduled to occur, in the
	 *         format returned by Date.getTime(). The return value is undefined if the task has yet to
	 *         commence its first execution.
	 * @see Date#getTime()
	 */
	public long scheduledExecutionTime() {
		throw new RuntimeException();
	}
}
