/*******************************************************************************
 * Copyright (c) 2010, 2013 Composent, Inc. and others.
 * 
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *   Composent, Inc. - initial API and implementation
 ******************************************************************************/
package org.eclipse.equinox.concurrent.future;

import org.eclipse.core.runtime.IProgressMonitor;

/**
 * 
 * A future that allows for an {@link IProgressRunnable} (with optional
 * {@link IProgressMonitor}) to be executed via an {@link IExecutor}.
 * @since 1.1
 * 
 */
public interface IListenableFuture<ResultType> extends IFuture<ResultType> {

	/**
	 * Add an {@link IProgressRunnable} that will be called back/run once the
	 * asynchronous execution is complete. The {@link IProgressRunnable} must be
	 * non-<code>null</code> and the {@link IExecutor} must also be non-
	 * <code>null</code>. The given progressMonitor may be <code>null</code>.
	 * <p>
	 * If the future has already completed by the time this method is called
	 * (i.e. {@link #isDone()} returns <code>true</code>, the progressRunnable
	 * will be executed immediately by the given executor.
	 * 
	 * @param executor
	 *            the {@link IExecutor} to use to execute the given
	 *            {@link IProgressRunnable}. Must not be <code>null</code>.
	 * @param progressRunnable
	 *            the {@link IProgressRunnable} that will be executed when this
	 *            future is complete. Must not be <code>null</code>.
	 * @param monitor
	 *            an optional progress monitor to be passed to the
	 *            progressRunnable when executed. May be <code>null</code>.
	 */
	public void addListener(IExecutor executor,
			IProgressRunnable<ResultType> progressRunnable,
			IProgressMonitor monitor);

}
