/* * Copyright (C) 2006 Sun Microsystems, Inc. All rights reserved. Use is * subject to license terms. */ package org.jdesktop.application; import java.util.List; /** * Listener used for observing {@code Task} execution. * A {@code TaskListener} is particularly * useful for monitoring the the intermediate results * {@link Task#publish published} by a Task in situations * where it's not practical to override the Task's * {@link Task#process process} method. Note that if * what you really want to do is monitor a Task's state * and progress, a PropertyChangeListener is probably more * appropriate. * <p> * The Task class runs all TaskListener methods on the event dispatching * thread and the source of all TaskEvents is the Task object. * * @see Task#addTaskListener * @see Task#removeTaskListener * @see Task#addPropertyChangeListener * * @author Hans Muller (Hans.Muller@Sun.COM) */ public interface TaskListener<T, V> { /** * Called just before the Task's {@link Task#doInBackground * doInBackground} method is called, i.e. just before the task * begins running. The {@code event's} source is the Task and its * value is null. * * @param event a TaskEvent whose source is the {@code Task} object, value is null * @see Task#doInBackground * @see TaskEvent#getSource */ void doInBackground(TaskEvent<Void> event); /** * Called each time the Task's {@link Task#process process} method is called. * The value of the event is the list of values passed to the process method. * * @param event a TaskEvent whose source is the {@code Task} object and whose * value is a list of the values passed to the {@code Task.process()} method * @see Task#doInBackground * @see Task#process * @see TaskEvent#getSource * @see TaskEvent#getValue */ void process(TaskEvent<List<V>> event); /** * Called after the Task's {@link Task#succeeded succeeded} * completion method is called. The event's value is the value * returned by the Task's {@code get} method, i.e. the value that * is computed by {@link Task#doInBackground}. * * @param event a TaskEvent whose source is the {@code Task} object, and * whose value is the value returned by {@code Task.get()}. * @see Task#succeeded * @see TaskEvent#getSource * @see TaskEvent#getValue */ void succeeded(TaskEvent<T> event); /** * Called after the Task's {@link Task#failed failed} completion * method is called. The event's value is the Throwable passed to * {@code Task.failed()}. * * @param event a TaskEvent whose source is the {@code Task} object, and * whose value is the Throwable passed to {@code Task.failed()}. * @see Task#failed * @see TaskEvent#getSource * @see TaskEvent#getValue */ void failed(TaskEvent<Throwable> event); /** * Called after the Task's {@link Task#cancelled cancelled} method * is called. The {@code event's} source is the Task and its * value is null. * * @param event a TaskEvent whose source is the {@code Task} object, value is null * @see Task#cancelled * @see Task#get * @see TaskEvent#getSource */ void cancelled(TaskEvent<Void> event); /** * Called after the Task's {@link Task#interrupted interrupted} method is called. * The {@code event's} source is the Task and its value is * the InterruptedException passed to {@code Task.interrupted()}. * * @param event a TaskEvent whose source is the {@code Task} object, and * whose value is the InterruptedException passed to {@code Task.interrupted()}. * @see Task#interrupted * @see TaskEvent#getSource * @see TaskEvent#getValue */ void interrupted(TaskEvent<InterruptedException> event); /** * Called after the Task's {@link Task#finished finished} method is called. * The {@code event's} source is the Task and its value is null. * * @param event a TaskEvent whose source is the {@code Task} object, value is null. * @see Task#interrupted * @see TaskEvent#getSource */ void finished(TaskEvent<Void> event); /** * Convenience class that stubs all of the TaskListener interface * methods. Using TaskListener.Adapter can simplify building * TaskListeners: * <pre> * </pre> */ class Adapter<T, V> implements TaskListener<T, V> { public void doInBackground(TaskEvent<Void> event) {} public void process(TaskEvent<List<V>> event) {} public void succeeded(TaskEvent<T> event) {} public void failed(TaskEvent<Throwable> event) {} public void cancelled(TaskEvent<Void> event) {} public void interrupted(TaskEvent<InterruptedException> event) {} public void finished(TaskEvent<Void> event) {} } }