Komenda to deklaracja akcji użytkownika przy użyciu atrybutu id. Komendy służą do definiowania akcji semantycznych, dzięki czemu implementacje akcji zdefiniowane w zbiorach akcji i edytorach mogą powiązać się z konkretną komendą semantyczną. Oddzielenie komend od implementacji akcji umożliwia definiowanie przez wiele modułów dodatkowych akcji, które implementują tę samą komendę semantyczną. Komendą jest to, co zostaje powiązane z konkretnym przypisaniem klawisza.
Środowisko robocze definiuje wiele typowych komend w swoim pliku plugin.xml, a moduły dodatkowe powinny tworzyć powiązania swoich akcji z tymi komendami, gdy jest to celowe. Dzięki temu semantycznie podobne akcje implementowane w różnych modułach dodatkowych mogą współużytkować tę samą kombinację klawiszy.
Komendy definiuje się przy użyciu punktu rozszerzenia org.eclipse.ui.commands. Poniższy fragment pochodzi z kodu znaczników środowiska roboczego.
<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> ...
Definicja komendy określa atrybuty name, description i id dla akcji. Określa ona także identyfikator kategorii dla komendy, który służy do grupowania komend w oknie dialogowym preferencji. Kategorie te są także definiowane w punkcie rozszerzenia org.eclipse.ui.commands:
... <category name="%category.file.name" description="%category.file.description" id="org.eclipse.ui.category.file"> </category> ...
Należy zauważyć, że nie określono implementacji dla komendy. Komenda staje się konkretna tylko wtedy, gdy moduł dodatkowy utworzy powiązanie swojej akcji z identyfikatorem komendy.
Powiązania akcji z komendami można tworzyć w kodzie lub w pliku plugin.xml dla zbiorów akcji. Wybór zależy od tego, gdzie jest definiowana akcja.
Akcje, których instancje są tworzone w kodzie, można także powiązać z definicją akcji, używając protokołu IAction. Zwykle robi się to podczas tworzenia akcji. Techniki tej używa akcja SaveAction, gdy sama się inicjuje.
public SaveAction(IWorkbenchWindow window) { ... setText... setToolTipText... setImageDescriptor... setActionDefinitionId("org.eclipse.ui.file.save"); }
Uwaga: Dla metody setActionDefinitionID bardziej odpowiednia byłaby nazwa setCommandID. Nazwa metody odzwierciedla oryginalną implementację przypisań klawiszy i używa nieaktualnej terminologii.
Wywołanie metody setActionDefinitionID powoduje powiązanie akcji implementacji (SaveAction) z identyfikatorem komendy użytym w kodzie znaczników z definicją komendy. Dobrym zwyczajem jest definiowanie stałych dla definicji akcji, aby można było łatwo się do nich odwoływać w kodzie.
Po zdefiniowaniu akcji w zbiorze akcji najczęściej nie ma potrzeby samodzielnego tworzenia instancji akcji. Zrobi to środowisko robocze, gdy użytkownik wywoła akcję z menu lub z klawiatury. W takim przypadku można powiązać akcję z identyfikatorem komendy w kodzie znaczników XML. Poniżej przedstawiono hipotetyczny kod znaczników dla zbioru akcji:
<extension point = "org.eclipse.ui.actionSets"> <actionSet id="com.example.actions.actionSet" label="Przykładowe akcje" visible="true"> <action id="com.example.actions.action1" menubarPath="additions" label="Przykładowa akcja Zapisz" class="org.example.actions.ExampleActionDelegate" definitionID="org.eclipse.ui.file.save"> </action> ... </actionSet> </extension>
Atrybut definitionID służy do zadeklarowania identyfikatora komendy dla akcji.
W każdej z opisanych technik powiązanie akcji z identyfikatorem komendy spowoduje, że do wywołania akcji można będzie użyć dowolnych przypisań klawiszy zdefiniowanych dla komendy org.eclipse.ui.file.save.
W następnej sekcji omówiono sposób definiowania tych przypisań klawiszy.