/*******************************************************************************
 * Copyright (c) 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.core.commands.operations;

import org.eclipse.core.runtime.Status;

/**
 * <p>
 * OperationStatus describes the status of a request to execute, undo, or redo
 * an operation.  This class may be instantiated by clients.
 * </p>
 * 
 * @since 3.1
 */
public final class OperationStatus extends Status {
	/**
	 * NOTHING_TO_REDO indicates there was no operation available for redo.
	 * 
	 * (value is 1).
	 */
	public static final int NOTHING_TO_REDO = 1;

	/**
	 * NOTHING_TO_UNDO indicates there was no operation available for undo.
	 * 
	 * (value is 2).
	 */
	public static final int NOTHING_TO_UNDO = 2;

	/**
	 * OPERATION_INVALID indicates that the operation available for undo or redo
	 * is not in a state to successfully perform the undo or redo.
	 * 
	 * (value is 3).
	 */
	public static final int OPERATION_INVALID = 3;

	/**
	 * DEFAULT_PLUGIN_ID identifies the default plugin reporting the status.
	 * 
	 * (value is "org.eclipse.core.commands").
	 */
	static String DEFAULT_PLUGIN_ID = "org.eclipse.core.commands"; //$NON-NLS-1$

	/**
	 * Creates a new operation status, specifying all properties.
	 * 
	 * @param severity
	 *            the severity for the status
	 * @param pluginId 
	 *            the unique identifier of the relevant plug-in
	 * @param code
	 *            the informational code for the status
	 * @param message
	 *            a human-readable message, localized to the current locale
	 * @param exception
	 *            a low-level exception, or <code>null</code> if not
	 *            applicable
	 */
	public OperationStatus(int severity, String pluginId, int code, String message, Throwable exception) {
		super(severity, pluginId, code, message, exception);
	}
}
