diff org.eclipse.core.commands/src/org/eclipse/core/commands/operations/IOperationHistory.d @ 12:bc29606a740c

Added dwt-addons in original directory structure of eclipse.org
author Frank Benoit <benoit@tionex.de>
date Sat, 14 Mar 2009 18:23:29 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/IOperationHistory.d	Sat Mar 14 18:23:29 2009 +0100
@@ -0,0 +1,712 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 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 org.eclipse.core.commands.operations.IOperationHistory;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.internal.commands.operations.GlobalUndoContext;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.commands.operations.IUndoableOperation;
+import org.eclipse.core.commands.operations.IOperationApprover;
+import org.eclipse.core.commands.operations.IOperationApprover2;
+import org.eclipse.core.commands.operations.IOperationHistoryListener;
+import org.eclipse.core.commands.operations.ICompositeOperation;
+import org.eclipse.core.commands.operations.OperationStatus;
+
+import java.lang.all;
+
+static this(){
+    IOperationHistory.GLOBAL_UNDO_CONTEXT = new GlobalUndoContext();
+    IOperationHistory.NOTHING_TO_REDO_STATUS = new OperationStatus(
+        IStatus.INFO, OperationStatus.DEFAULT_PLUGIN_ID,
+        OperationStatus.NOTHING_TO_REDO, "No operation to redo", null); //$NON-NLS-1$
+    IOperationHistory.NOTHING_TO_UNDO_STATUS = new OperationStatus(
+        IStatus.INFO, OperationStatus.DEFAULT_PLUGIN_ID,
+        OperationStatus.NOTHING_TO_UNDO, "No operation to undo", null); //$NON-NLS-1$
+    IOperationHistory.OPERATION_INVALID_STATUS = new OperationStatus(
+        IStatus.ERROR, OperationStatus.DEFAULT_PLUGIN_ID,
+        OperationStatus.OPERATION_INVALID, "Operation is not valid", null); //$NON-NLS-1$
+}
+
+/**
+ * <p>
+ * IOperationHistory tracks a history of operations that can be undone or
+ * redone. Operations are added to the history once they have been initially
+ * executed. Clients may choose whether to have the operations history perform
+ * the initial execution or to simply add an already-executed operation to the
+ * history.
+ * </p>
+ * <p>
+ * Once operations are added to the history, the methods
+ * {@link #canRedo(IUndoContext)} and {@link #canUndo(IUndoContext)} are used to
+ * determine whether there is an operation available for undo and redo in a
+ * given undo context. The context-based protocol implies that there is only one
+ * operation that can be undone or redone at a given time in a given context.
+ * This is typical of a linear undo model, when only the most recently executed
+ * operation is available for undo. When this protocol is used, a linear model
+ * is enforced by the history.
+ * </p>
+ * <p>
+ * It is up to clients to determine how to maintain a history that is invalid or
+ * stale. For example, when the most recent operation for a context cannot be
+ * performed, clients may wish to dispose the history for that context.
+ * </p>
+ * <p>
+ * Additional protocol allows direct undo and redo of a specified operation,
+ * regardless of its position in the history. When a more flexible undo model is
+ * supported, these methods can be implemented to undo and redo directly
+ * specified operations. If an implementer of IOperationHistory does not allow
+ * direct undo and redo, these methods can return a status indicating that it is
+ * not allowed.
+ * </p>
+ * <p>
+ * Listeners ({@link IOperationHistoryListener}) can listen for notifications
+ * about changes in the history (operations added or removed), and for
+ * notification before and after any operation is executed, undone or redone.
+ * Notification of operation execution only occurs when clients direct the
+ * history to execute the operation. If the operation is added after it is
+ * executed, there can be no notification of its execution.
+ * </p>
+ * <p>
+ * {@link IOperationApprover} defines an interface for approving an undo or redo
+ * before it occurs. This is useful for injecting policy-decisions into the undo
+ * model - whether direct undo and redo are supported, or warning the user about
+ * certain kinds of operations. It can also be used when clients maintain state
+ * related to an operation and need to determine whether an undo or redo will
+ * cause any conflicts with their local state.
+ * </p>
+ *
+ * @since 3.1
+ */
+public interface IOperationHistory {
+
+    /**
+     * An operation is to be opened or closed for execution. (value is 1).
+     */
+    public static const int EXECUTE = 1;
+
+    /**
+     * An operation is to be opened for undo. (value is 2).
+     */
+    public static const int UNDO = 2;
+
+    /**
+     * An operation is to be opened for redo. (value is 3).
+     */
+    public static const int REDO = 3;
+
+    /**
+     * An undo context that can be used to refer to the global undo history.
+     * This context is not intended to be assigned to operations. Instead, it is
+     * used for querying the history or performing an undo or redo on the entire
+     * history, regardless of each operation's undo contexts.
+     */
+    public static /+const+/ IUndoContext GLOBAL_UNDO_CONTEXT;
+
+    /**
+     * An operation info status describing the condition that there is no
+     * available operation for redo.
+     */
+    public static /+const+/ IStatus NOTHING_TO_REDO_STATUS; //$NON-NLS-1$
+
+    /**
+     * An operation info status describing the condition that there is no
+     * available operation for undo.
+     */
+    public static /+const+/ IStatus NOTHING_TO_UNDO_STATUS; //$NON-NLS-1$
+
+    /**
+     * An operation error status describing the condition that the operation
+     * available for execution, undo or redo is not in a valid state for the
+     * action to be performed.
+     */
+    public static /+const+/ IStatus OPERATION_INVALID_STATUS; //$NON-NLS-1$
+
+    /**
+     * <p>
+     * Add the specified operation to the history without executing it. The
+     * operation should have already been executed by the time it is added to
+     * the history. Listeners will be notified that the operation was added to
+     * the history (<code>OPERATION_ADDED</code>).
+     * </p>
+     *
+     * @param operation
+     *            the operation to be added to the history
+     */
+    void add(IUndoableOperation operation);
+
+    /**
+     * <p>
+     * Add the specified approver to the list of operation approvers consulted
+     * by the operation history before an undo or redo is attempted.
+     * </p>
+     *
+     * @param approver
+     *            the IOperationApprover to be added as an approver.the instance
+     *            to remove. Must not be <code>null</code>. If an attempt is
+     *            made to register an instance which is already registered with
+     *            this instance, this method has no effect.
+     *
+     * @see org.eclipse.core.commands.operations.IOperationApprover
+     */
+    void addOperationApprover(IOperationApprover approver);
+
+    /**
+     * <p>
+     * Add the specified listener to the list of operation history listeners
+     * that are notified about changes in the history or operations that are
+     * executed, undone, or redone.
+     * </p>
+     *
+     * @param listener
+     *            the IOperationHistoryListener to be added as a listener. Must
+     *            not be <code>null</code>. If an attempt is made to register
+     *            an instance which is already registered with this instance,
+     *            this method has no effect.
+     *
+     * @see org.eclipse.core.commands.operations.IOperationHistoryListener
+     * @see org.eclipse.core.commands.operations.OperationHistoryEvent
+     */
+    void addOperationHistoryListener(IOperationHistoryListener listener);
+
+    /**
+     * <p>
+     * Close the current operation. If the operation has successfully completed,
+     * send listeners a <code>DONE</code>, <code>UNDONE</code>, or
+     * <code>REDONE</code> notification, depending on the mode. Otherwise send
+     * an <code>OPERATION_NOT_OK</code> notification. Add the operation to the
+     * history if specified and send an <code>OPERATION_ADDED</code>
+     * notification.
+     * </p>
+     * <p>
+     * Any operations that are executed and added after this operation is closed
+     * will no longer be considered part of this operation.
+     * </p>
+     * <p>
+     * This method has no effect if the caller has not previously called
+     * {@link #openOperation}.
+     * </p>
+     *
+     * @param operationOK
+     *            <code>true</code> if the operation successfully completed.
+     *            Listeners should be notified with <code>DONE</code>,
+     *            <code>UNDONE</code>, or <code>REDONE</code>.
+     *            <code>false</code> if the operation did not successfully
+     *            complete. Listeners should be notified with
+     *            <code>OPERATION_NOT_OK</code>.
+     * @param addToHistory
+     *            <code>true</code> if the operation should be added to the
+     *            history, <code>false</code> if it should not. If the
+     *            <code>operationOK</code> parameter is <code>false</code>,
+     *            the operation will never be added to the history.
+     * @param mode
+     *            the mode the operation was opened in. Can be one of
+     *            <code>EXECUTE</code>, <code>UNDO</code>, or
+     *            <code>REDO</code>. This determines what notifications are
+     *            sent.
+     */
+    void closeOperation(bool operationOK, bool addToHistory, int mode);
+
+    /**
+     * <p>
+     * Return whether there is a valid redoable operation available in the given
+     * context.
+     * </p>
+     *
+     * @param context
+     *            the context to be checked
+     * @return <code>true</code> if there is a redoable operation,
+     *         <code>false</code> otherwise.
+     */
+
+    bool canRedo(IUndoContext context);
+
+    /**
+     * <p>
+     * Return whether there is a valid undoable operation available in the given
+     * context
+     * </p>
+     *
+     * @param context
+     *            the context to be checked
+     * @return <code>true</code> if there is an undoable operation,
+     *         <code>false</code> otherwise.
+     */
+    bool canUndo(IUndoContext context);
+
+    /**
+     * <p>
+     * Dispose of the specified context in the history. All operations that have
+     * only the given context will be disposed. References to the context in
+     * operations that have more than one context will also be removed. A
+     * history notification for the removal of each operation being disposed
+     * will be sent.
+     * </p>
+     *
+     * @param context
+     *            the context to be disposed
+     * @param flushUndo
+     *            <code>true</code> if the context should be flushed from the
+     *            undo history, <code>false</code> if it should not
+     * @param flushRedo
+     *            <code>true</code> if the context should be flushed from the
+     *            redo history, <code>false</code> if it should not.
+     * @param flushContext
+     *            <code>true</code> if the context is no longer in use and
+     *            references to it should be flushed.
+     */
+    void dispose(IUndoContext context, bool flushUndo, bool flushRedo,
+            bool flushContext);
+
+    /**
+     * <p>
+     * Execute the specified operation and add it to the operations history if
+     * successful. This method is used by clients who wish operation history
+     * listeners to receive notifications before and after the execution of the
+     * operation. Execution of the operation is subject to approval by any
+     * registered {@link IOperationApprover2}. If execution is approved,
+     * listeners will be notified before (<code>ABOUT_TO_EXECUTE</code>) and
+     * after (<code>DONE</code> or <code>OPERATION_NOT_OK</code>).
+     * </p>
+     * <p>
+     * If the operation successfully executes, an additional notification that
+     * the operation has been added to the history (<code>OPERATION_ADDED</code>)
+     * will be sent.
+     * </p>
+     *
+     * @param operation
+     *            the operation to be executed and then added to the history
+     *
+     * @param monitor
+     *            the progress monitor to be used (or <code>null</code>)
+     *            during the operation.
+     *
+     * @param info
+     *            the IAdaptable (or <code>null</code>) provided by the
+     *            caller in order to supply UI information for prompting the
+     *            user if necessary. When this parameter is not
+     *            <code>null</code>, it should minimally contain an adapter
+     *            for the org.eclipse.swt.widgets.Shell.class.
+     *
+     * @return the IStatus indicating whether the execution succeeded.
+     *
+     * <p>
+     * The severity code in the returned status describes whether the operation
+     * succeeded and whether it was added to the history. <code>OK</code>
+     * severity indicates that the execute operation was successful and that the
+     * operation has been added to the history. Listeners will receive
+     * notifications about the operation's success (<code>DONE</code>) and
+     * about the operation being added to the history (<code>OPERATION_ADDED</code>).
+     * </p>
+     * <p>
+     * <code>CANCEL</code> severity indicates that the user cancelled the
+     * operation and that the operation was not added to the history.
+     * <code>ERROR</code> severity indicates that the operation did not
+     * successfully execute and that it was not added to the history. Any other
+     * severity code is not specifically interpreted by the history, and the
+     * operation will not be added to the history. For all severities other than
+     * <code>OK</code>, listeners will receive the
+     * <code>OPERATION_NOT_OK</code> notification instead of the
+     * <code>DONE</code> notification if the execution was approved and
+     * attempted.
+     * </p>
+     *
+     * @throws ExecutionException
+     *             if an exception occurred during execution.
+     *
+     */
+    IStatus execute(IUndoableOperation operation, IProgressMonitor monitor,
+            IAdaptable info);
+
+    /**
+     * <p>
+     * Return the limit on the undo and redo history for a particular context.
+     * </p>
+     *
+     * @param context
+     *            the context whose limit is requested
+     *
+     * @return the undo and redo history limit for the specified context.
+     */
+    int getLimit(IUndoContext context);
+
+    /**
+     * <p>
+     * Get the array of operations in the redo history for a the specified undo
+     * context. The operations are in the order that they were added to the
+     * history, with the most recently undone operation appearing last in the
+     * array. This history is used LIFO (last in, first out) when successive
+     * "Redo" commands are invoked.
+     *
+     * </p>
+     *
+     * @param context
+     *            the context for the redo
+     * @return the array of operations in the history
+     */
+    IUndoableOperation[] getRedoHistory(IUndoContext context);
+
+    /**
+     * <p>
+     * Get the operation that will next be redone in the given undo context.
+     * </p>
+     *
+     * @param context
+     *            the context for the redo
+     * @return the operation to be redone or <code>null</code> if there is no
+     *         operation available. There is no guarantee that the returned
+     *         operation is valid for redo.
+     */
+    IUndoableOperation getRedoOperation(IUndoContext context);
+
+    /**
+     * <p>
+     * Get the array of operations in the undo history for the specified undo
+     * context. The operations are in the order that they were added to the
+     * history, with the most recently added operation appearing last in the
+     * array. This history is used LIFO (last in, first out) when successive
+     * "Undo" commands are invoked.
+     * </p>
+     *
+     * @param context
+     *            the context for the undo
+     * @return the array of operations in the history
+     */
+    IUndoableOperation[] getUndoHistory(IUndoContext context);
+
+    /**
+     * <p>
+     * Open this composite operation and consider it an operation that contains
+     * other related operations. Consider all operations that are subsequently
+     * executed or added to be part of this operation. When an operation is
+     * opened, listeners will immediately receive a notification for the opened
+     * operation. The specific notification depends on the mode in which the
+     * operation is opened (<code>ABOUT_TO_EXECUTE</code>,
+     * <code>ABOUT_TO_UNDO</code>, <code>ABOUT_TO_REDO</code>).
+     * Notifications for any other execute or add while this operation is open
+     * will not occur. Instead, those operations will be added to the current
+     * operation.
+     * </p>
+     * <p>
+     * Note: This method is intended to be used by legacy undo frameworks that
+     * do not expect related undo operations to appear in the same undo history
+     * as the triggering undo operation. When an operation is open, any
+     * subsequent requests to execute, add, undo, or redo another operation will
+     * result in that operation being added to the open operation. Once the
+     * operation is closed, the composite will be considered an atomic
+     * operation. Clients should not modify the composite directly (by adding
+     * and removing children) while it is open.
+     * </p>
+     * <p>
+     * When a composite is open, operations that are added to the history will
+     * be considered part of the open operation instead. Operations that are
+     * executed while a composite is open will first be executed and then added
+     * to the composite.
+     * </p>
+     * <p>
+     * Open operations cannot be nested. If this method is called when a
+     * different operation is open, it is presumed to be an application coding
+     * error and this method will throw an IllegalStateException.
+     * </p>
+     *
+     * @param operation
+     *            the composite operation to be considered as the parent for all
+     *            subsequent operations.
+     * @param mode
+     *            the mode the operation is executing in. Can be one of
+     *            <code>EXECUTE</code>, <code>UNDO</code>, or
+     *            <code>REDO</code>. This determines what notifications are
+     *            sent.
+     */
+    void openOperation(ICompositeOperation operation, int mode);
+
+    /**
+     * <p>
+     * The specified operation has changed in some way since it was added to the
+     * operation history. Notify listeners with an OPERATION_CHANGED event.
+     * </p>
+     *
+     * @param operation
+     *            the operation that has changed.
+     *
+     */
+    void operationChanged(IUndoableOperation operation);
+
+    /**
+     * <p>
+     * Get the operation that will next be undone in the given undo context.
+     * </p>
+     *
+     * @param context
+     *            the context for the undo
+     * @return the operation to be undone or <code>null</code> if there is no
+     *         operation available. There is no guarantee that the available
+     *         operation is valid for the undo.
+     */
+    IUndoableOperation getUndoOperation(IUndoContext context);
+
+    /**
+     * <p>
+     * Redo the most recently undone operation in the given context. The redo of
+     * the operation is subject to approval by any registered
+     * {@link IOperationApprover} before it is attempted.
+     * </p>
+     *
+     * @param context
+     *            the context to be redone
+     * @param monitor
+     *            the progress monitor to be used for the redo, or
+     *            <code>null</code> if no progress monitor is provided.
+     * @param info
+     *            the IAdaptable (or <code>null</code>) provided by the
+     *            caller in order to supply UI information for prompting the
+     *            user if necessary. When this parameter is not
+     *            <code>null</code>, it should minimally contain an adapter
+     *            for the org.eclipse.swt.widgets.Shell.class.
+     * @return the IStatus indicating whether the redo succeeded.
+     *
+     * <p>
+     * The severity code in the returned status describes whether the operation
+     * succeeded and whether it remains in the history. <code>OK</code>
+     * severity indicates that the redo operation was successful and (since
+     * release 3.2), that the operation will be placed in the undo history.
+     * (Prior to 3.2, a successfully redone operation would not be placed on the
+     * undo history if it could not be undone. Since 3.2, this is relaxed, and
+     * all successfully redone operations are placed in the undo history.)
+     * Listeners will receive the <code>REDONE</code> notification.
+     * </p>
+     * <p>
+     * Other severity codes (<code>CANCEL</code>, <code>ERROR</code>,
+     * <code>INFO</code>, etc.) are not specifically interpreted by the
+     * history. The operation will remain in the history and the returned status
+     * is simply passed back to the caller. For all severities other than
+     * <code>OK</code>, listeners will receive the
+     * <code>OPERATION_NOT_OK</code> notification instead of the
+     * <code>REDONE</code> notification if the redo was approved and
+     * attempted.
+     * </p>
+     *
+     * @throws ExecutionException
+     *             if an exception occurred during redo.
+     *
+     */
+    IStatus redo(IUndoContext context, IProgressMonitor monitor, IAdaptable info);
+
+    /**
+     * <p>
+     * Redo the specified operation. The redo of the operation is subject to
+     * approval by any registered {@link IOperationApprover} before it is
+     * attempted.
+     * </p>
+     *
+     * @param operation
+     *            the operation to be redone
+     * @param monitor
+     *            the progress monitor to be used for the redo, or code>null</code>
+     *            if no progress monitor is provided
+     * @param info
+     *            the IAdaptable (or <code>null</code>) provided by the
+     *            caller in order to supply UI information for prompting the
+     *            user if necessary. When this parameter is not <code>null</code>,
+     *            it should minimally contain an adapter for the
+     *            org.eclipse.swt.widgets.Shell.class.
+     *
+     * @return the IStatus indicating whether the redo succeeded.
+     *
+     * <p>
+     * The severity code in the returned status describes whether the operation
+     * succeeded and whether it remains in the history. <code>OK</code>
+     * severity indicates that the redo operation was successful, and (since
+     * release 3.2), that the operation will be placed in the undo history.
+     * (Prior to 3.2, a successfully redone operation would not be placed on the
+     * undo history if it could not be undone. Since 3.2, this is relaxed, and
+     * all successfully redone operations are placed in the undo history.)
+     * Listeners will receive the <code>REDONE</code> notification.
+     * </p>
+     * <p>
+     * Other severity codes (<code>CANCEL</code>, <code>ERROR</code>,
+     * <code>INFO</code>, etc.) are not specifically interpreted by the
+     * history. The operation will remain in the history and the returned status
+     * is simply passed back to the caller. For all severities other than <code>OK</code>,
+     * listeners will receive the <code>OPERATION_NOT_OK</code> notification
+     * instead of the <code>REDONE</code> notification if the redo was
+     * approved and attempted.
+     * </p>
+     *
+     * @throws ExecutionException
+     *             if an exception occurred during redo.
+     */
+    IStatus redoOperation(IUndoableOperation operation,
+            IProgressMonitor monitor, IAdaptable info);
+
+    /**
+     * <p>
+     * Remove the specified operation approver from the list of operation
+     * approvers that are consulted before an operation is undone or redone.
+     * </p>
+     *
+     * @param approver
+     *            the IOperationApprover to be removed. Must not be
+     *            <code>null</code>. If an attempt is made to remove an
+     *            instance which is not already registered with this instance,
+     *            this method has no effect.
+     */
+    void removeOperationApprover(IOperationApprover approver);
+
+    /**
+     * <p>
+     * Remove the specified listener from the list of operation history
+     * listeners.
+     * </p>
+     *
+     * @param listener
+     *            The IOperationHistoryListener to be removed. Must not be
+     *            <code>null</code>. If an attempt is made to remove an
+     *            instance which is not already registered with this instance,
+     *            this method has no effect.
+     */
+    void removeOperationHistoryListener(IOperationHistoryListener listener);
+
+    /**
+     * <p>
+     * Replace the specified operation in the undo or redo history with the
+     * provided list of replacements. This protocol is typically used when a
+     * composite is broken up into its atomic parts. The replacements will be
+     * inserted so that the first replacement will be the first of the
+     * replacements to be undone or redone. Listeners will be notified about the
+     * removal of the replaced element and the addition of each replacement.
+     * </p>
+     *
+     * @param operation
+     *            The IUndoableOperation to be replaced
+     * @param replacements
+     *            the array of IUndoableOperation to replace the first operation
+     */
+    void replaceOperation(IUndoableOperation operation,
+            IUndoableOperation[] replacements);
+
+    /**
+     * <p>
+     * Set the limit on the undo and redo history for a particular context.
+     * </p>
+     *
+     * @param context
+     *            the context whose limit is being set.
+     *
+     * @param limit
+     *            the maximum number of operations that should be kept in the
+     *            undo or redo history for the specified context. Must not be
+     *            negative.
+     */
+    void setLimit(IUndoContext context, int limit);
+
+    /**
+     * <p>
+     * Undo the most recently executed operation in the given context. The undo
+     * of the operation is subject to approval by any registered
+     * {@link IOperationApprover} before it is attempted.
+     * </p>
+     *
+     * @param context
+     *            the context to be undone
+     * @param monitor
+     *            the progress monitor to be used for the undo, or
+     *            <code>null</code> if no progress monitor is provided.
+     * @param info
+     *            the IAdaptable (or <code>null</code>) provided by the
+     *            caller in order to supply UI information for prompting the
+     *            user if necessary. When this parameter is not
+     *            <code>null</code>, it should minimally contain an adapter
+     *            for the org.eclipse.swt.widgets.Shell.class.
+     *
+     * @return the IStatus indicating whether the undo succeeded.
+     *
+     * <p>
+     * The severity code in the returned status describes whether the operation
+     * succeeded and whether it remains in the history. <code>OK</code>
+     * severity indicates that the undo operation was successful, and (since
+     * release 3.2), that the operation will be placed on the redo history.
+     * (Prior to 3.2, a successfully undone operation would not be placed on the
+     * redo history if it could not be redone. Since 3.2, this is relaxed, and
+     * all successfully undone operations are placed in the redo history.)
+     * Listeners will receive the <code>UNDONE</code> notification.
+     * </p>
+     * <p>
+     * Other severity codes (<code>CANCEL</code>, <code>ERROR</code>,
+     * <code>INFO</code>, etc.) are not specifically interpreted by the
+     * history. The operation will remain in the history and the returned status
+     * is simply passed back to the caller. For all severities other than
+     * <code>OK</code>, listeners will receive the
+     * <code>OPERATION_NOT_OK</code> notification instead of the
+     * <code>UNDONE</code> notification if the undo was approved and
+     * attempted.
+     * </p>
+     *
+     * @throws ExecutionException
+     *             if an exception occurred during undo.
+     */
+
+    IStatus undo(IUndoContext context, IProgressMonitor monitor, IAdaptable info);
+
+    /**
+     * <p>
+     * Undo the specified operation. The undo of the operation is subject to
+     * approval by any registered {@link IOperationApprover} before it is
+     * attempted.
+     * </p>
+     *
+     * @param operation
+     *            the operation to be undone
+     * @param monitor
+     *            the progress monitor to be used for the undo, or
+     *            <code>null</code> if no progress monitor is provided
+     * @param info
+     *            the IAdaptable (or <code>null</code>) provided by the
+     *            caller in order to supply UI information for prompting the
+     *            user if necessary. When this parameter is not
+     *            <code>null</code>, it should minimally contain an adapter
+     *            for the org.eclipse.swt.widgets.Shell.class.
+     *
+     * @return the IStatus indicating whether the undo succeeded.
+     *
+     * <p>
+     * The severity code in the returned status describes whether the operation
+     * succeeded and whether it remains in the history. <code>OK</code>
+     * severity indicates that the undo operation was successful, and (since
+     * release 3.2), that the operation will be placed on the redo history.
+     * (Prior to 3.2, a successfully undone operation would not be placed on the
+     * redo history if it could not be redone. Since 3.2, this is relaxed, and
+     * all successfully undone operations are placed in the redo history.)
+     * Listeners will receive the <code>UNDONE</code> notification.
+     * </p>
+     * <p>
+     * Other severity codes (<code>CANCEL</code>, <code>ERROR</code>,
+     * <code>INFO</code>, etc.) are not specifically interpreted by the
+     * history. The operation will remain in the history and the returned status
+     * is simply passed back to the caller. For all severities other than
+     * <code>OK</code>, listeners will receive the
+     * <code>OPERATION_NOT_OK</code> notification instead of the
+     * <code>UNDONE</code> notification if the undo was approved and
+     * attempted.
+     * </p>
+     *
+     * @throws ExecutionException
+     *             if an exception occurred during undo.
+     */
+    IStatus undoOperation(IUndoableOperation operation,
+            IProgressMonitor monitor, IAdaptable info);
+
+}