Un comando, command, è la dichiarazione di un'azione dell'utente mediante l'id. I comandi sono utilizzati per dichiarare azioni semantiche in modo che le implementazioni dell'azione definite negli insiemi di azioni e negli editor possano essere associate ad un particolare comando semantico. La separazione del comando dall'implementazione dell'azione consente a più plugin di definire azioni che implementano lo stesso comando semantico. Il comando viene associato ad una particolare associazione di tasti.
Il workbench definisce molti comandi comuni nel file plugin.xml e, se opportuno, i plugin possono associare le proprie azioni a questi comandi. In questo modo, azioni semanticamente simili implementate in plugin differenti possono condividere la stessa associazione di tasti.
I comandi sono definiti utilizzando il punto di estensione org.eclipse.ui.commands. Di seguito viene riportato il tag del 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> ...
La definizione del comando specifica name, description e id per l'azione. Viene anche specificato l'id di una categoria per il comando, utilizzato per raggruppare i comandi nella finestra di dialogo delle preferenze. Le categorie sono inoltre definite nel punto di estensione org.eclipse.ui.commands:
... <category name="%category.file.name" description="%category.file.description" id="org.eclipse.ui.category.file"> </category> ...
Si noti che non è specificata alcuna implementazione per il comando. Un comando diventa concreto solo quando un plugin associa un'azione all'id del comando.
È possibile associare azioni a comandi nel codice o nel file plugin.xml per gli insiemi di azioni. La scelta dipende da dove è stata definita l'azione.
Le azioni per le quali è stata creata un'istanza nel codice possono essere anche associate a una definizione dell'azione utilizzando il protocollo IAction. Questa operazione viene eseguita tipicamente nel momento in cui l'azione viene creata. SaveAction utilizza questa tecnica al momento dell'inizializzazione.
public SaveAction(IWorkbenchWindow window) { ... setText... setToolTipText... setImageDescriptor... setActionDefinitionId("org.eclipse.ui.file.save"); }
Nota: il nome del metodo setActionDefinitionID dovrebbe più correttamente essere setCommandID. Il nome del metodo è relativo all'implementazione originale delle associazioni di tasti e utilizza una terminologia superata.
Richiamando setActionDefinitionID, l'azione di implementazione (SaveAction) viene associata all'id del comando utilizzato nel tag di definizione del comando. Si consiglia di definire delle costanti per le definizioni delle azioni in modo che possano essere facilmente referenziate nel codice.
Se si definisce un'azione in un insieme di azioni, di solito non è necessario crearne un'istanza. A questo provvederà il workbench nel momento in cui l'utente richiamerà l'azione da un menu o da tastiera. In questo caso, è possibile associare l'azione a un ID comando nel tag XML. Di seguito viene mostrato un ipotetico tag per un insieme di azioni:
<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>
L'attributo definitionID viene utilizzato per dichiarare un id di comando per l'azione.
Utilizzando una di queste tecniche, l'associazione dell'azione a un ID di comando determina una associazione di tasti che viene definita per il comando org.eclipse.ui.file.save per richiamare l'azione al momento opportuno.
Di seguito verrà discusso il modo in cui le associazioni di tasti vengono definite.