blob: c656aead408ce373808bcc8e27ed7d988f0d5adf [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.runtime.jobs;
import org.eclipse.core.runtime.*;
/**
* The progress provider supplies the job manager with progress monitors for
* running jobs. There can only be one progress provider at any given time.
* <p>
* This class is intended for use by the currently executing Eclipse application.
* Plug-ins outside the currently running application should not reference or
* subclass this class.
* </p>
*
* @see IJobManager#setProgressProvider(ProgressProvider)
* @since 3.0
*/
public abstract class ProgressProvider {
/**
* Provides a new progress monitor instance to be used by the given job.
* This method is called prior to running any job that does not belong to a
* progress group. The returned monitor will be supplied to the job's
* <code>run</code> method.
*
* @see #createProgressGroup()
* @see Job#setProgressGroup(IProgressMonitor, int)
* @param job the job to create a progress monitor for
* @return a progress monitor, or <code>null</code> if no progress monitoring
* is needed.
*/
public abstract IProgressMonitor createMonitor(Job job);
/**
* Returns a progress monitor that can be used to provide
* aggregated progress feedback on a set of running jobs.
* This method implements <code>IJobManager.createProgressGroup</code>,
* and must obey all rules specified in that contract.
* <p>
* This default implementation returns a new
* <code>NullProgressMonitor</code> Subclasses may override.
*
* @see IJobManager#createProgressGroup()
* @return a progress monitor
*/
public IProgressMonitor createProgressGroup() {
return new NullProgressMonitor();
}
/**
* Returns a progress monitor that can be used by a running job
* to report progress in the context of a progress group. This method
* implements <code>Job.setProgressGroup</code>. One of the
* two <code>createMonitor</code> methods will be invoked
* prior to each execution of a job, depending on whether a progress
* group was specified for the job.
* <p>
* The provided monitor must be a monitor returned by the method
* <code>createProgressGroup</code>. This method is responsible
* for asserting this and throwing an appropriate runtime exception
* if an invalid monitor is provided.
* <p>
* This default implementation returns a new
* <code>SubProgressMonitor</code>. Subclasses may override.
*
* @see IJobManager#createProgressGroup()
* @see Job#setProgressGroup(IProgressMonitor, int)
* @param job the job to create a progress monitor for
* @param group the progress monitor group that this job belongs to
* @param ticks the number of ticks of work for the progress monitor
* @return a progress monitor, or <code>null</code> if no progress monitoring
* is needed.
*/
public IProgressMonitor createMonitor(Job job, IProgressMonitor group, int ticks) {
return new SubProgressMonitor(group, ticks);
}
/**
* Returns a progress monitor to use when none has been provided
* by the client running the job.
* <p>
* This default implementation returns a new
* <code>NullProgressMonitor</code> Subclasses may override.
*
* @return a progress monitor
*/
public IProgressMonitor getDefaultMonitor() {
return new NullProgressMonitor();
}
}