From ee4a14260b345abe9ac787da39251b45762c03c2 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Wed, 24 Oct 2012 14:32:53 +0000 Subject: [PATCH] Introduce Argeo monitor git-svn-id: https://svn.argeo.org/commons/trunk@5638 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../argeo/eclipse/ui/EclipseArgeoMonitor.java | 44 ++++++++++ .../src/main/java/org/argeo/ArgeoMonitor.java | 86 +++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 base/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/EclipseArgeoMonitor.java create mode 100644 base/runtime/org.argeo.util/src/main/java/org/argeo/ArgeoMonitor.java diff --git a/base/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/EclipseArgeoMonitor.java b/base/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/EclipseArgeoMonitor.java new file mode 100644 index 000000000..9ad26d4b6 --- /dev/null +++ b/base/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/EclipseArgeoMonitor.java @@ -0,0 +1,44 @@ +package org.argeo.eclipse.ui; + +import org.argeo.ArgeoMonitor; +import org.eclipse.core.runtime.IProgressMonitor; + +/** + * Wraps an Eclipse {@link IProgressMonitor} so that it can be passed to + * framework agnostic Argeo routines. + */ +public class EclipseArgeoMonitor implements ArgeoMonitor { + private final IProgressMonitor progressMonitor; + + public EclipseArgeoMonitor(IProgressMonitor progressMonitor) { + this.progressMonitor = progressMonitor; + } + + public void beginTask(String name, int totalWork) { + progressMonitor.beginTask(name, totalWork); + } + + public void done() { + progressMonitor.done(); + } + + public boolean isCanceled() { + return progressMonitor.isCanceled(); + } + + public void setCanceled(boolean value) { + progressMonitor.setCanceled(value); + } + + public void setTaskName(String name) { + progressMonitor.setTaskName(name); + } + + public void subTask(String name) { + progressMonitor.subTask(name); + } + + public void worked(int work) { + progressMonitor.worked(work); + } +} diff --git a/base/runtime/org.argeo.util/src/main/java/org/argeo/ArgeoMonitor.java b/base/runtime/org.argeo.util/src/main/java/org/argeo/ArgeoMonitor.java new file mode 100644 index 000000000..910f76c08 --- /dev/null +++ b/base/runtime/org.argeo.util/src/main/java/org/argeo/ArgeoMonitor.java @@ -0,0 +1,86 @@ +package org.argeo; + +/** + * Simple monitor abstraction. Inspired by Eclipse IProgressMOnitor, but without + * dependency to it. + */ +public interface ArgeoMonitor { + /** + * Constant indicating an unknown amount of work. + */ + public final static int UNKNOWN = -1; + + /** + * Notifies that the main task is beginning. This must only be called once + * on a given progress monitor instance. + * + * @param name + * the name (or description) of the main task + * @param totalWork + * the total number of work units into which the main task is + * been subdivided. If the value is UNKNOWN the + * implementation is free to indicate progress in a way which + * doesn't require the total number of work units in advance. + */ + public void beginTask(String name, int totalWork); + + /** + * Notifies that the work is done; that is, either the main task is + * completed or the user canceled it. This method may be called more than + * once (implementations should be prepared to handle this case). + */ + public void done(); + + /** + * Returns whether cancelation of current operation has been requested. + * Long-running operations should poll to see if cancelation has been + * requested. + * + * @return true if cancellation has been requested, and + * false otherwise + * @see #setCanceled(boolean) + */ + public boolean isCanceled(); + + /** + * Sets the cancel state to the given value. + * + * @param value + * true indicates that cancelation has been + * requested (but not necessarily acknowledged); + * false clears this flag + * @see #isCanceled() + */ + public void setCanceled(boolean value); + + /** + * Sets the task name to the given value. This method is used to restore the + * task label after a nested operation was executed. Normally there is no + * need for clients to call this method. + * + * @param name + * the name (or description) of the main task + * @see #beginTask(java.lang.String, int) + */ + public void setTaskName(String name); + + /** + * Notifies that a subtask of the main task is beginning. Subtasks are + * optional; the main task might not have subtasks. + * + * @param name + * the name (or description) of the subtask + */ + public void subTask(String name); + + /** + * Notifies that a given number of work unit of the main task has been + * completed. Note that this amount represents an installment, as opposed to + * a cumulative amount of work done to date. + * + * @param work + * a non-negative number of work units just completed + */ + public void worked(int work); + +} -- 2.30.2