@Beta @PublicAPI public interface ProgressObserver extends CancelObserver, AutoCloseable
The semantics of this observer is influenced by the progress reporting facility of the Eclipse Platform; for details
see org.eclipse.core.runtime.IProgressMonitor
, associated classes/interfaces and documentations:
IProgressMonitor
API:
http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.do
c.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fcore%2Fruntime%2FIProgressMonitor.htmlDesign aspects of this progress observing facility:
worked(long)
is expected to be invoked with an approximately constant frequency.
This allows the implementation of efficient update filtering.worked(long)
is considered a normal practice.subTask(java.lang.String, long)
. Total number of
created sub observers is expected to remain under a few 10s at most. Also it is not expected to create deeply nested
sub observer hierarchy.worked(long)
or by using sub
observers. Mixed reporting is valid but non recommended.Thread safety: implementations are not required to be thread safe. Observed processes must be prepared for working with non thread safe observers. Consequently observer methods can be called only on the thread invoked the observed function. Alternatively proper synchronization must be ensured by the observed code.
Please note that this interface is marked with @Beta annotation, so it can be subject of incompatible changes or removal in any of the later releases.
Modifier and Type | Method and Description |
---|---|
default void |
close()
Equivalent to
done() . |
void |
done()
Notifies that the represented task is done and no further work will be done.
|
SubProgressObserver |
subTask(String name,
long work)
Deprecated.
Will be removed.
|
void |
switchToDeterminate(long totalWork)
Notifies that the remaining amount of work units to complete this task is known.
|
void |
worked(long work)
Notifies that a given number of work units has been completed.
|
void |
workUnit(String workUnit)
Notifies the measure unit of work (such as 'pc', 'file', 'percent', etc).
|
isCancelled
void switchToDeterminate(long totalWork)
totalWork
- The total amount of work represented by this task.IllegalStateException
- When worked(long)
or done()
already called.IllegalArgumentException
- When totalWork
is zero or negativevoid workUnit(String workUnit)
workUnit
- the measure unit of work.IllegalStateException
- When worked(long)
or done()
already called.void worked(long work)
Note that this amount represents an installment, as opposed to a cumulative amount of work done to date.
work
- Amount of work reportedIllegalStateException
- When the total amount of work known and accumulated work would exceed it.IllegalStateException
- When done()
is already invoked.IllegalArgumentException
- When work
is zero or negativevoid done()
NOTE: Cancellation has no effect to the progress state, so this method must be invoked when done, either due normal completion; cancellation or error
default void close()
done()
. This method is here just to be compatible with AutoCloseable
.
Default implementation delegates call to done()
. Overriding this default method is not recommended. close
in interface AutoCloseable
@Deprecated SubProgressObserver subTask(String name, long work)
The given amount of work on the level of the current observer is considered completed upon
done()
called on the returned subtask's observer.
Cancel propagation is expected to be transparent.
The strict contract regarding the state when worked(long)
can be called is relaxed in
the context of subtask observers: implicitly logging work on the upper level by calling
done()
on the subtask level after the upper level is closed will no cause
problem on either level.
name
- Name of the represented sub task (for example to display)work
- A non-negative number of work units considered to be completed upon finishing
the associated subtask.IllegalStateException
- When the total amount of work known
(switchToDeterminate(long)
and already logged (or expected to be logged) amount exceeds it.IllegalArgumentException
- When work
is zero or negative