| /******************************************************************************* |
| * Copyright (c) 2000, 2005 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 |
| *******************************************************************************/ |
| package org.eclipse.ltk.core.refactoring; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| |
| /** |
| * An undo manager keeps track of performed changes. Use the method <code>addUndo</code> |
| * to add change objects to the undo stack and <code>performUndo</code> and <code> |
| * performRedo</code> to undo or redo changes. |
| * <p> |
| * This interface is not intended to be implemented by clients. Clients should use the |
| * method {@link RefactoringCore#getUndoManager()} to access the refactoring undo manager. |
| * </p> |
| * <p> |
| * As of 3.1 the implementation of the refactoring undo manager is based on the |
| * {@link org.eclipse.core.commands.operations.IOperationHistory} provided by the |
| * <code>org.eclipse.core.commands</code> plug-in. |
| * </p> |
| * |
| * @see org.eclipse.core.commands.operations.IOperationHistory |
| * |
| * @since 3.0 |
| */ |
| public interface IUndoManager { |
| |
| /** |
| * Adds a listener to the undo manager. Does nothing if the listener |
| * is already present. |
| * |
| * @param listener the listener to be added to the undo manager |
| */ |
| public void addListener(IUndoManagerListener listener); |
| |
| /** |
| * Removes the given listener from this undo manager. Does nothing if |
| * the listener isn't registered with this undo manager |
| * |
| * @param listener the listener to be removed |
| */ |
| public void removeListener(IUndoManagerListener listener); |
| |
| /** |
| * The infrastructure is going to perform the given change. If a |
| * client calls this method it must make sure that the corresponding |
| * method {@link #changePerformed(Change)} is called after the |
| * change got executed. A typically code snippet looks as follows: |
| * <pre> |
| * Change change= ...; |
| * try { |
| * undoManager.aboutToPerformChange(change); |
| * // execute change |
| * } finally { |
| * undoManager.changePerformed(change); |
| * } |
| * </pre> |
| * |
| * @param change the change to be performed. |
| */ |
| public void aboutToPerformChange(Change change); |
| |
| /** |
| * The infrastructure has performed the given change. |
| * |
| * @param change the change that was performed |
| * |
| * @deprecated use #changePerformed(Change, boolean) instead |
| */ |
| public void changePerformed(Change change); |
| |
| /** |
| * The infrastructure has performed the given change. |
| * |
| * @param change the change that was performed |
| * @param successful <code>true</code> if the change got executed |
| * successful; <code>false</code> otherwise. |
| * |
| * @since 3.1 |
| */ |
| public void changePerformed(Change change, boolean successful); |
| |
| /** |
| * Adds a new undo change to this undo manager. |
| * |
| * @param name the name presented on the undo stack for the provided |
| * undo change. The name must be human readable. |
| * @param change the undo change |
| */ |
| public void addUndo(String name, Change change); |
| |
| /** |
| * Returns <code>true</code> if there is anything to undo, otherwise |
| * <code>false</code>. |
| * |
| * @return <code>true</code> if there is anything to undo, otherwise |
| * <code>false</code> |
| */ |
| public boolean anythingToUndo(); |
| |
| /** |
| * Returns the name of the top most undo. |
| * |
| * @return the top most undo name. Returns <code>null</code> if there |
| * aren't any changes to undo. |
| */ |
| public String peekUndoName(); |
| |
| /** |
| * Undo the top most undo change. |
| * |
| * @param query a proceed query to decide how to proceed if the validation |
| * checking of the undo change to perform returns a non OK status and the |
| * status isn't a fatal error. If <code>null</code> is passed in the the |
| * undo proceeds if the status is not a fatal error. |
| * @param pm a progress monitor to report progress during performing |
| * the undo change |
| * |
| * @throws CoreException if performing the undo caused an exception |
| */ |
| public void performUndo(IValidationCheckResultQuery query, IProgressMonitor pm) throws CoreException; |
| |
| /** |
| * Returns <code>true</code> if there is anything to redo, otherwise |
| * <code>false</code>. |
| * |
| * @return <code>true</code> if there is anything to redo, otherwise |
| * <code>false</code> |
| */ |
| public boolean anythingToRedo(); |
| |
| /** |
| * Returns the name of the top most redo. |
| * |
| * @return the top most redo name. Returns <code>null</code> if there |
| * are no any changes to redo. |
| */ |
| public String peekRedoName(); |
| |
| /** |
| * Redo the top most redo change. |
| * |
| * @param query a proceed query to decide how to proceed if the validation |
| * checking of the redo change to perform returns a non OK status. If |
| * <code>null</code> is passed in the the undo proceeds if the status |
| * is not a fatal error. |
| * @param pm a progress monitor to report progress during performing |
| * the redo change |
| * |
| * @throws CoreException if performing the redo caused an exception |
| */ |
| public void performRedo(IValidationCheckResultQuery query, IProgressMonitor pm) throws CoreException; |
| |
| /** |
| * Flushes the undo manager's undo and redo stacks. |
| */ |
| public void flush(); |
| |
| /** |
| * Shut down the undo manager. |
| */ |
| public void shutdown(); |
| } |