blob: b955afa0008cc7b59f63bb304ecbbff493e8237b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 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.debug.core;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
/**
* A status handler registers to handle a specific status - error or otherwise.
* Provides a mechanism for separating core (headless) function from UI
* interaction. The debug plug-in provides a status handlers extension point,
* against which handlers can register for specific status codes - identified by
* plug-in identifier and plug-in specific status code. The interaction between
* an object requiring a status handler (source), and the status handler is
* defined by the source and handler.
* <p>
* For example, a launch configuration delegate might encounter a timeout while
* launching an application. In this case the delegate could abort or, via the
* use of a status handler, prompt the user to continue. This allows the
* launcher to be implemented in a plug-in that does not require UI support, and
* allows another (UI) plug-in to register a handler.
* </p>
* <p>
* A status handler extension is defined in <code>plugin.xml</code>. Following
* is an example definition of a status handler extension.
* </p>
*
* <pre>
* &lt;extension point="org.eclipse.debug.core.statusHandlers"&gt;
* &lt;statusHandler
* id="com.example.ExampleIdentifier"
* class="com.example.ExampleStatusHandler"
* plugin="com.example.ExamplePluginId"
* code="123"&gt;
* &lt;/statusHandler&gt;
* &lt;/extension&gt;
* </pre>
*
* The attributes are specified as follows:
* <ul>
* <li><code>id</code> specifies a unique identifier for this status
* handler.</li>
* <li><code>class</code> specifies the fully qualified name of the Java class
* that implements <code>IStatusHandler</code>.</li>
* <li><code>plugin</code> plug-in identifier that corresponds to the plug-in of
* the status this handler is registered for (i.e.
* <code>IStatus.getPlugin()</code>).</li>
* <li><code>code</code> specifies the status code this handler is registered
* for.</li>
* </ul>
* <p>
* Clients may implement this interface.
* </p>
*
* @see DebugPlugin#getStatusHandler(IStatus)
* @since 2.0
*/
public interface IStatusHandler {
/**
* Notifies this status handler that the given status has been
* generated by the specified source object and requires resolution.
*
* @param status the status to handle
* @param source the object delegating to this status handler
* the given status
* @return an object representing the resolution of the status
* @exception CoreException if unable to resolve the status
*/
Object handleStatus(IStatus status, Object source) throws CoreException;
}