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();
+    }
+}