Copyright (c) 2005, 2015 IBM Corporation and others.
This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
Contributors:
IBM Corporation - initial API and implementation
/*******************************************************************************
* Copyright (c) 2005, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.commands.operations;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
An abstract class for detecting violations in a strict linear undo/redo
model. Once a violation is detected, subclasses implement the specific
behavior for indicating whether or not the undo/redo should proceed.
Since: 3.1
/**
* <p>
* An abstract class for detecting violations in a strict linear undo/redo
* model. Once a violation is detected, subclasses implement the specific
* behavior for indicating whether or not the undo/redo should proceed.
* </p>
*
* @since 3.1
*/
public abstract class LinearUndoViolationDetector implements IOperationApprover {
Create an instance of LinearUndoViolationDetector.
/**
* Create an instance of LinearUndoViolationDetector.
*/
public LinearUndoViolationDetector() {
super();
}
Return a status indicating whether a linear redo violation is allowable.
A linear redo violation is defined as a request to redo a particular
operation even if it is not the most recently added operation to the redo
history.
Params: - operation –
the operation for which a linear redo violation has been
detected.
- context –
the undo context in which the linear redo violation exists
- history –
the operation history containing the operation
- info –
the IAdaptable (or
null
) provided by the
caller in order to supply UI information for prompting the
user if necessary. When this parameter is not
null
, it should minimally contain an adapter
for the org.eclipse.swt.widgets.Shell.class.
Returns: the IStatus describing whether the redo violation is allowed. The
redo will not proceed if the status severity is not
OK
, and the caller requesting the redo will be
returned the status that caused the rejection. Specific status
severities will not be interpreted by the history.
/**
* Return a status indicating whether a linear redo violation is allowable.
* A linear redo violation is defined as a request to redo a particular
* operation even if it is not the most recently added operation to the redo
* history.
*
* @param operation
* the operation for which a linear redo violation has been
* detected.
* @param context
* the undo context in which the linear redo violation exists
* @param history
* the operation history containing 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 describing whether the redo violation is allowed. The
* redo will not proceed if the status severity is not
* <code>OK</code>, and the caller requesting the redo will be
* returned the status that caused the rejection. Specific status
* severities will not be interpreted by the history.
*/
protected abstract IStatus allowLinearRedoViolation(
IUndoableOperation operation, IUndoContext context,
IOperationHistory history, IAdaptable info);
Return a status indicating whether a linear undo violation is allowable.
A linear undo violation is defined as a request to undo a particular
operation even if it is not the most recently added operation to the undo
history.
Params: - operation –
the operation for which a linear undo violation has been
detected.
- context –
the undo context in which the linear undo violation exists
- history –
the operation history containing the operation
- info –
the IAdaptable (or
null
) provided by the
caller in order to supply UI information for prompting the
user if necessary. When this parameter is not
null
, it should minimally contain an adapter
for the org.eclipse.swt.widgets.Shell.class.
Returns: the IStatus describing whether the undo violation is allowed. The
undo will not proceed if the status severity is not
OK
, and the caller requesting the undo will be
returned the status that caused the rejection. Specific status
severities will not be interpreted by the history.
/**
* Return a status indicating whether a linear undo violation is allowable.
* A linear undo violation is defined as a request to undo a particular
* operation even if it is not the most recently added operation to the undo
* history.
*
* @param operation
* the operation for which a linear undo violation has been
* detected.
* @param context
* the undo context in which the linear undo violation exists
* @param history
* the operation history containing 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 describing whether the undo violation is allowed. The
* undo will not proceed if the status severity is not
* <code>OK</code>, and the caller requesting the undo will be
* returned the status that caused the rejection. Specific status
* severities will not be interpreted by the history.
*/
protected abstract IStatus allowLinearUndoViolation(
IUndoableOperation operation, IUndoContext context,
IOperationHistory history, IAdaptable info);
@Override
public final IStatus proceedRedoing(IUndoableOperation operation,
IOperationHistory history, IAdaptable info) {
IUndoContext[] contexts = operation.getContexts();
for (IUndoContext context : contexts) {
if (history.getRedoOperation(context) != operation) {
IStatus status = allowLinearRedoViolation(operation, context,
history, info);
if (!status.isOK()) {
return status;
}
}
}
return Status.OK_STATUS;
}
@Override
public final IStatus proceedUndoing(IUndoableOperation operation,
IOperationHistory history, IAdaptable info) {
IUndoContext[] contexts = operation.getContexts();
for (IUndoContext context : contexts) {
if (history.getUndoOperation(context) != operation) {
IStatus status = allowLinearUndoViolation(operation, context,
history, info);
if (!status.isOK()) {
return status;
}
}
}
return Status.OK_STATUS;
}
}