# Class Command

java.lang.Object
org.eclipse.core.commands.common.EventManager
org.eclipse.core.commands.common.HandleObject
org.eclipse.core.commands.common.NamedHandleObject
org.eclipse.core.commands.Command

All Implemented Interfaces:
  `Comparable, IIdentifiable, IObjectWithState`

public final class Command extends NamedHandleObject implements Comparable

A command is an abstract representation for some semantic behaviour. It is not the actual implementation of this behaviour, nor is it the visual appearance of this behaviour in the user interface. Instead, it is a bridge between the two.

The concept of a command is based on the command design pattern. The notable difference is how the command delegates responsibility for execution. Rather than allowing concrete subclasses, it uses a handler mechanism (see the `handlers` extension point). This provides another level of indirection.

A command will exist in two states: defined and undefined. A command is defined if it is declared in the XML of a resolved plug-in. If the plug-in is unloaded or the command is simply not declared, then it is undefined. Trying to reference an undefined command will succeed, but trying to access any of its functionality will fail with a `NotDefinedException`. If you need to know when a command changes from defined to undefined (or vice versa), then attach a command listener.

Commands are mutable and will change as their definition changes.

Since:
  3.1

## Field Summary

Fields
Modifier and Type
Field
Description
`static boolean`
`DEBUG_COMMAND_EXECUTION`
This flag can be set to `true` if commands should print information to `System.out` when executing.
`static boolean`
`DEBUG_HANDLERS`
This flag can be set to `true` if commands should print information to `System.out` when changing handlers.
`static String`
`DEBUG_HANDLERS_COMMAND_ID`
This flag can be set to a particular command identifier if only that command should print information to `System.out` when changing handlers.

### Fields inherited from class NamedHandleObject

`description, name`

### Fields inherited from class HandleObject

`defined, id, string`

## Method Summary

Modifier and Type
Method
Description
`void`
`addCommandListener(ICommandListener commandListener)`
Adds a listener to this command that will be notified when this command's state changes.
`void`
`addExecutionListener(IExecutionListener executionListener)`
Adds a listener to this command that will be notified when this command is about to execute.
`void`
`addState(String id, State state)`
Adds a state to this command.
`int`
`compareTo(Object object)`
Compares this command with another command by comparing each of its non-transient attributes.
`void`
`define(String name, String description, Category category)`
Defines this command by giving it a name, and possibly a description as well.
`void`
`define(String name, String description, Category category, IParameter[] parameters)`
Defines this command by giving it a name, and possibly a description as well.
`void`
`define(String name, String description, Category category, IParameter[] parameters, ParameterType returnType)`
Defines this command by giving it a name, and possibly a description as well.
`void`
`define(String name, String description, Category category, IParameter[] parameters, ParameterType returnType, String helpContextId)`
Defines this command by giving it a name, and possibly a description as well.
`Object`
`execute(ExecutionEvent event)`
Deprecated.
Please use `executeWithChecks(ExecutionEvent)` instead.
`Object`
`executeWithChecks(ExecutionEvent event)`
Executes this command by delegating to the current handler, if any.
`Category`
`getCategory()`
Returns the category for this command.
`final String`
`getDescription()`
Returns the description for this handle.
`IHandler`
`getHandler()`
Returns the current handler for this command.
`final String`
`getName()`
Returns the name for this handle.
`IParameter`
`getParameter(String parameterId)`
Returns the parameter with the provided id or `null` if this command does not have a parameter with the id.
`IParameter[]`
`getParameters()`
Returns the parameters for this command.
`ParameterType`
`getParameterType(String parameterId)`
Returns the `ParameterType` for the parameter with the provided id or `null` if this command does not have a parameter type with the id.
`ParameterType`
`getReturnType()`
Returns the `ParameterType` for the return value of this command or `null` if this command does not declare a return value parameter type.
`final State`
`getState(String stateId)`
Gets the state with the given id.
`final String[]`
`getStateIds()`
Gets the identifiers for all of the state associated with this object.
`boolean`
`isEnabled()`
Returns whether this command has a handler, and whether this handler is also handled and enabled.
`boolean`
`isHandled()`
Returns whether this command has a handler, and whether this handler is also handled.
`void`
`removeCommandListener(ICommandListener commandListener)`
Removes a listener from this command.
`void`
`removeExecutionListener(IExecutionListener executionListener)`
Removes a listener from this command.
`void`
`removeState(String stateId)`
Removes a state from this command.
`void`
`setEnabled(Object evaluationContext)`
Called be the framework to allow the handler to update its enabled state.
`boolean`
`setHandler(IHandler handler)`
Changes the handler for this command.
`String`
`toString()`
The string representation of this command -- for debugging purposes only.
`void`
`undefine()`
Makes this command become undefined.

### Methods inherited from class HandleObject

`equals, getId, hashCode, isDefined`

### Methods inherited from class EventManager

`addListenerObject, clearListeners, getListeners, isListenerAttached, removeListenerObject`

### Methods inherited from class Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

## Field Details

### DEBUG_COMMAND_EXECUTION

public static boolean DEBUG_COMMAND_EXECUTION
This flag can be set to `true` if commands should print information to `System.out` when executing.

### DEBUG_HANDLERS

public static boolean DEBUG_HANDLERS
This flag can be set to `true` if commands should print information to `System.out` when changing handlers.

### DEBUG_HANDLERS_COMMAND_ID

public static String DEBUG_HANDLERS_COMMAND_ID
This flag can be set to a particular command identifier if only that command should print information to `System.out` when changing handlers.

## Method Details

### addCommandListener

public void addCommandListener(ICommandListener commandListener)
Adds a listener to this command that will be notified when this command's state changes.

Parameters:
  `commandListener` - The listener to be added; must not be `null`.

### addExecutionListener

public void addExecutionListener(IExecutionListener executionListener)
Adds a listener to this command that will be notified when this command is about to execute.

Parameters:
  `executionListener` - The listener to be added; must not be `null`.

### addState

public void addState(String id, State state)

Adds a state to this command. This will add this state to the active handler, if the active handler is an instance of `IObjectWithState`.

A single instance of `State` cannot be registered with multiple commands. Each command requires its own unique instance.

Specified by:
  `addState` in interface `IObjectWithState`
Parameters:
  `id` - The identifier of the state to add; must not be `null`.
  `state` - The state to add; must not be `null`.
Since:
  3.2
See Also:
  - `AbstractHandlerWithState`

### compareTo

public int compareTo(Object object)
Compares this command with another command by comparing each of its non-transient attributes.

Specified by:
  `compareTo` in interface `Comparable`
Parameters:
  `object` - The object with which to compare; must be an instance of `Command`.
Returns:
  A negative integer, zero or a postivie integer, if the object is greater than, equal to or less than this command.

### define

public void define(String name, String description, Category category)

Defines this command by giving it a name, and possibly a description as well. The defined property automatically becomes `true`.

Notification is sent to all listeners that something has changed.

Parameters:
  `name` - The name of this command; must not be `null`.
  `description` - The description for this command; may be `null`.
  `category` - The category for this command; must not be `null`.
Since:
  3.2

### define

public void define(String name, String description, Category category, IParameter[] parameters)

Defines this command by giving it a name, and possibly a description as well. The defined property automatically becomes `true`.

Notification is sent to all listeners that something has changed.

Parameters:
  `name` - The name of this command; must not be `null`.
  `description` - The description for this command; may be `null`.
  `category` - The category for this command; must not be `null`.
  `parameters` - The parameters understood by this command. This value may be either `null` or empty if the command does not accept parameters.

### define

public void define(String name, String description, Category category, IParameter[] parameters, ParameterType returnType)

Defines this command by giving it a name, and possibly a description as well. The defined property automatically becomes `true`.

Notification is sent to all listeners that something has changed.

Parameters:
  `name` - The name of this command; must not be `null`.
  `description` - The description for this command; may be `null`.
  `category` - The category for this command; must not be `null`.
  `parameters` - The parameters understood by this command. This value may be either `null` or empty if the command does not accept parameters.
  `returnType` - The type of value returned by this command. This value may be `null` if the command does not declare a return type.
Since:
  3.2

### define

public void define(String name, String description, Category category, IParameter[] parameters, ParameterType returnType, String helpContextId)

Defines this command by giving it a name, and possibly a description as well. The defined property automatically becomes `true`.

Notification is sent to all listeners that something has changed.

Parameters:
  `name` - The name of this command; must not be `null`.
  `description` - The description for this command; may be `null`.
  `category` - The category for this command; must not be `null`.
  `parameters` - The parameters understood by this command. This value may be either `null` or empty if the command does not accept parameters.
  `returnType` - The type of value returned by this command. This value may be `null` if the command does not declare a return type.
  `helpContextId` - The identifier of the help context to associate with this command; may be `null` if this command does not have any help associated with it.
Since:
  3.2

### execute

@Deprecated public Object execute(ExecutionEvent event) throws ExecutionException, NotHandledException
Deprecated.
Please use `executeWithChecks(ExecutionEvent)` instead.
Executes this command by delegating to the current handler, if any. If the debugging flag is set, then this method prints information about which handler is selected for performing this command. This method will succeed regardless of whether the command is enabled or defined. It is generally preferred to call `executeWithChecks(ExecutionEvent)`.

Parameters:
  `event` - An event containing all the information about the current state of the application; must not be `null`.
Returns:
  The result of the execution; may be `null`. This result will be available to the client executing the command, and execution listeners.
Throws:
  `ExecutionException` - If the handler has problems executing this command.
  `NotHandledException` - If there is no handler.

### executeWithChecks

public Object executeWithChecks(ExecutionEvent event) throws ExecutionException, NotDefinedException, NotEnabledException, NotHandledException
Executes this command by delegating to the current handler, if any. If the debugging flag is set, then this method prints information about which handler is selected for performing this command. This does checks to see if the command is enabled and defined. If it is not both enabled and defined, then the execution listeners will be notified and an exception thrown.

Parameters:
  `event` - An event containing all the information about the current state of the application; must not be `null`.
Returns:
  The result of the execution; may be `null`. This result will be available to the client executing the command, and execution listeners.
Throws:
  `ExecutionException` - If the handler has problems executing this command.
  `NotDefinedException` - If the command you are trying to execute is not defined.
  `NotEnabledException` - If the command you are trying to execute is not enabled.
  `NotHandledException` - If there is no handler.
Since:
  3.2

### getCategory

public Category getCategory() throws NotDefinedException
Returns the category for this command.

Returns:
  The category for this command; never `null`.
Throws:
  `NotDefinedException` - If the handle is not currently defined.

### getHandler

public IHandler getHandler()
Returns the current handler for this command. This is used by the command manager for determining the appropriate help context identifiers and by the command service to allow handlers to update elements.

This value can change at any time and should never be cached.

Returns:
  The current handler for this command; may be `null`.
Since:
  3.3

### getParameter

public IParameter getParameter(String parameterId) throws NotDefinedException
Returns the parameter with the provided id or `null` if this command does not have a parameter with the id.

Parameters:
  `parameterId` - The id of the parameter to retrieve.
Returns:
  The parameter with the provided id or `null` if this command does not have a parameter with the id.
Throws:
  `NotDefinedException` - If the handle is not currently defined.
Since:
  3.2

### getParameters

public IParameter[] getParameters() throws NotDefinedException
Returns the parameters for this command. This call triggers provides a copy of the array, so excessive calls to this method should be avoided.

Returns:
  The parameters for this command. This value might be `null`, if the command has no parameters.
Throws:
  `NotDefinedException` - If the handle is not currently defined.

### getParameterType

public ParameterType getParameterType(String parameterId) throws NotDefinedException
Returns the `ParameterType` for the parameter with the provided id or `null` if this command does not have a parameter type with the id.

Parameters:
  `parameterId` - The id of the parameter to retrieve the `ParameterType` of.
Returns:
  The `ParameterType` for the parameter with the provided id or `null` if this command does not have a parameter type with the provided id.
Throws:
  `NotDefinedException` - If the handle is not currently defined.
Since:
  3.2

### getReturnType

public ParameterType getReturnType() throws NotDefinedException
Returns the `ParameterType` for the return value of this command or `null` if this command does not declare a return value parameter type.

Returns:
  The `ParameterType` for the return value of this command or `null` if this command does not declare a return value parameter type.
Throws:
  `NotDefinedException` - If the handle is not currently defined.
Since:
  3.2

### isEnabled

public boolean isEnabled()
Returns whether this command has a handler, and whether this handler is also handled and enabled.

Returns:
  `true` if the command is handled; `false` otherwise.

### setEnabled

public void setEnabled(Object evaluationContext)
Called be the framework to allow the handler to update its enabled state.

Parameters:
  `evaluationContext` - the state to evaluate against. May be `null` which indicates that the handler can query whatever model that is necessary. This context must not be cached.
Since:
  3.4

### isHandled

public boolean isHandled()
Returns whether this command has a handler, and whether this handler is also handled.

Returns:
  `true` if the command is handled; `false` otherwise.

### removeCommandListener

public void removeCommandListener(ICommandListener commandListener)
Removes a listener from this command.

Parameters:
  `commandListener` - The listener to be removed; must not be `null`.

### removeExecutionListener

public void removeExecutionListener(IExecutionListener executionListener)
Removes a listener from this command.

Parameters:
  `executionListener` - The listener to be removed; must not be `null`.

### removeState

public void removeState(String stateId)

Removes a state from this command. This will remove the state from the active handler, if the active handler is an instance of `IObjectWithState`.

Specified by:
  `removeState` in interface `IObjectWithState`
Parameters:
  `stateId` - The identifier of the state to remove; must not be `null`.
Since:
  3.2

### setHandler

public boolean setHandler(IHandler handler)
Changes the handler for this command. This will remove all the state from the currently active handler (if any), and add it to `handler`. If debugging is turned on, then this will also print information about the change to `System.out`.

Parameters:
  `handler` - The new handler; may be `null` if none.
Returns:
  `true` if the handler changed; `false` otherwise.

### toString

public String toString()
The string representation of this command -- for debugging purposes only. This string should not be shown to an end user.

Specified by:
  `toString` in class `HandleObject`
Returns:
  The string representation; never `null`.

### undefine

public void undefine()
Makes this command become undefined. This has the side effect of changing the name and description to `null`. This also removes all state and disposes of it. Notification is sent to all listeners.

Specified by:
  `undefine` in class `HandleObject`

### getDescription

public final String getDescription() throws NotDefinedException
Description copied from class: `NamedHandleObject`
Returns the description for this handle.

Overrides:
  `getDescription` in class `NamedHandleObject`
Returns:
  The description; may be `null` if there is no description.
Throws:
  `NotDefinedException` - If the handle is not currently defined.

### getName

public final String getName() throws NotDefinedException
Description copied from class: `NamedHandleObject`
Returns the name for this handle.

Overrides:
  `getName` in class `NamedHandleObject`
Returns:
  The name for this handle; never `null`.
Throws:
  `NotDefinedException` - If the handle is not currently defined.

### getState

public final State getState(String stateId)
Description copied from interface: `IObjectWithState`
Gets the state with the given id.

Specified by:
  `getState` in interface `IObjectWithState`
Parameters:
  `stateId` - The identifier of the state to retrieve; must not be `null`.
Returns:
  The state; may be `null` if there is no state with the given id.

### getStateIds

public final String[] getStateIds()
Description copied from interface: `IObjectWithState`
Gets the identifiers for all of the state associated with this object.

Specified by:
  `getStateIds` in interface `IObjectWithState`
Returns:
  All of the state identifiers; may be empty, but never `null`.