Mercurial > projects > dwt-addons
diff dwtx/core/runtime/jobs/ProgressProvider.d @ 122:9d0585bcb7aa
Add core.jobs package
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Tue, 12 Aug 2008 02:34:21 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtx/core/runtime/jobs/ProgressProvider.d Tue Aug 12 02:34:21 2008 +0200 @@ -0,0 +1,106 @@ +/******************************************************************************* + * Copyright (c) 2003, 2006 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 + * Port to the D programming language: + * Frank Benoit <benoit@tionex.de> + *******************************************************************************/ +module dwtx.core.runtime.jobs.ProgressProvider; + +import dwt.dwthelper.utils; + +import dwtx.core.runtime.IProgressMonitor; +import dwtx.core.runtime.NullProgressMonitor; +import dwtx.core.runtime.SubProgressMonitor; + +import dwtx.core.runtime.jobs.Job; + +/** + * 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(); + } +}