Bei einem Befehl handelt es sich um die Deklaration einer Benutzeraktion anhand des Parameters id. Befehle werden zum Deklarieren semantischer Aktionen verwendet, so dass die in den Aktionssets und Editoren definierten Aktionen sich einem bestimmten semantischen Befehl zuordnen können. Die Trennung des Befehls von der Aktionsimplementierung ermöglicht verschiedenen Plug-ins das Definieren von Aktionen, die den gleichen semantische Befehl implementieren. Dem Befehl wird hierbei eine spezielle Tastenbelegung zugeordnet.
Die Workbench definiert in der Datei plugin.xml zahlreiche allgemeine Befehle. Die Plug-ins sollten, sofern dies im konkreten Fall sinnvoll ist, eigene Aktionen diesen Befehlen zuordnen. Auf diese Weise können semantisch ähnliche Aktionen, die in unterschiedlichen Plug-ins implementiert sind, die gleiche Tastenbelegung verwenden.
Befehle werden über den Erweiterungspunkt org.eclipse.ui.commands definiert. Die folgenden Befehle stammen aus der Befehlsdatei der Workbench:
<extension point="org.eclipse.ui.commands"> ... <command name="%command.save.name" description="%command.save.description" categoryId="org.eclipse.ui.category.file" id="org.eclipse.ui.file.save"> </command> ...
Die Befehlsdefinition gibt die Parameter name, description und id für die Aktion an. Außerdem bestimmt sie die ID einer Kategorie für den Befehl. Diese wird verwendet, um Befehle im Benutzervorgabendialog zu gruppieren. Die Kategorien werden auch im Erweiterungspunkt org.eclipse.ui.commands definiert:
... <category name="%category.file.name" description="%category.file.description" id="org.eclipse.ui.category.file"> </category> ...
Bitte beachten Sie, dass für einen Befehl keine Implementierung angegeben ist. Ein Befehl wird nur dann konkret, wenn ein Plug-in seine Aktion der Befehls-ID zuordnet.
Aktionen können einem Befehl über den Code oder in der Datei plugin.xml für Aktionssets zugeordnet werden. Die Auswahl dieser Optionen hängt davon ab, wo die Aktion definiert wird.
Aktionen, die im Code als Exemplar erstellt werden, können auch mit Hilfe des Protokolls IAction einer Aktionsdefinition zugeordnet werden. Dieser Arbeitsschritt wird normalerweise bei der Erstellung der Aktion ausgeführt. Die Aktion SaveAction verwendet dieses Verfahren, um sich selbst zu initialisieren.
public SaveAction(IWorkbenchWindow window) { ... setText... setToolTipText... setImageDescriptor... setActionDefinitionId("org.eclipse.ui.file.save"); }
(Hinweis: Der Methodenname setActionDefinitionID müsste eigentlich passender setCommandID lauten. Der Methodenname gibt die ursprüngliche Implementierung von Tastenbelegungen wieder und verwendete veraltete Terminologie.)
Durch das Aufrufen von setActionDefinitionID wird die Implementierungsaktion (SaveAction)der Befehls-ID zugeordnet, die im Befehlsformat der Befehlsdefinition verwendet wurde. Es wird empfohlen, Konstanten für die verwendeten Aktionsdefinitionen zu definieren, so dass im Code auf einfache Weise auf sie verwiesen werden kann.
Wenn Sie eine Aktion in einem Aktionsset definieren, müssen Sie normalerweise selbst kein Exemplar einer Aktion erstellen. Die Workbench übernimmt diesen Schritt, wenn der Benutzer Ihre Aktion über ein Menü oder die Tastatur aufruft. In diesem Fall können Sie Ihre Aktion einer Befehls-ID in Ihrer XML-Befehlsdatei zuordnen. Im Folgenden wird ein hypothetisches Befehlsformat für ein Aktionsset dargestellt:
<extension point = "org.eclipse.ui.actionSets"> <actionSet id="com.example.actions.actionSet" label="Example Actions" visible="true"> <action id="com.example.actions.action1" menubarPath="additions" label="Example Save Action" class="org.example.actions.ExampleActionDelegate" definitionID="org.eclipse.ui.file.save"> </action> ... </actionSet> </extension>
Das Attribut definitionID wird zum Deklarieren einer Befehls-ID für eine bestimmte Aktion verwendet.
Wenn Sie mit einem dieser beiden Verfahren Ihre Aktion einer Befehls-ID zuordnen, dann rufen die dabei für den Befehl org.eclipse.ui.file.save definierten Tastenbelegungen die Aktion zum geeigneten Zeitpunkt auf.
Im Folgenden wird die Definition dieser Tastenbelegungen beschrieben.