La sintassi dell'espressione segue la stessa forma indipendentemente dalla posizione dell'espressione booleana. L'elemento radice relativo all'abilitazione e alla visibilità deve contenere un elemento secondario. Nel caso più semplice, sarà costituito da un elemento objectClass, objectState, systemProperty, o pluginState. Nel caso più complesso, è possibile combinare gli elementi and, or, not per formare un'espressione booleana. Un elemento and o or può contenere uno o più elementi secondari. Un elemento not deve contenere soltanto un elemento secondario.
Per valutare la classe di ciascun oggetto della selezione, è utilizzato un elemento objectClass. L'attributo del nome dell'elemento objectClass contiene un nome di classe completo. Se tutti gli oggetti della selezione implementano questa classe, l'espressione è valutata true.
Per valutare lo stato di ciascun oggetto della selezione, è utilizzato un elemento objectState. Spesso l'abilitazione o la visibilità di un'azione può essere determinata dal tipo di selezione. A volte, però, ciò non è sufficiente e l'abilitazione o la visibilità deve essere determinata utilizzando lo stato della selezione. Ad esempio, è possibile fornire un'azione a tutti gli oggetti del tipo IFile che sono di sola lettura. Il criterio di sola lettura può essere dichiarato soltanto specificando un elemento objectState. Potrebbe avere la seguente forma:
<objectState name="readOnly" value="true"/>Nel workbench, è molto difficile eseguire la valutazione di questa espressione perché gli attributi di un oggetto sono di un tipo specifico e diverso rispetto al dominio del workbench. Conseguentemente, il workbench collaborerà con gli oggetti della selezione per valutare l'espressione. L'operazione viene effettuata utilizzando IActionFilter, una strategia di valutazione per gli elementi objectState. Durante la valutazione di un elemento objectState, il workbench richiede a ciascun oggetto della selezione un IActionFilter. L'operazione viene effettuata controllando se viene implementato IActionFilter. In caso negativo, il workbench richiede un filtro attraverso il meccanismo IAdaptable. Se un filtro viene trovato, il workbench trasferisce gli attributi objectState al filtro per determinare se corrispondono allo stato dell'oggetto selezionato. Se corrispondono, il termine è valutato true. In assenza di un filtro delle azioni o in assenza della corrispondenza, il termine è valutato false.
Si consiglia di definire un IActionFilter per ciascun oggetto presente nella selezione di visualizzazioni o editor. L'operazione consente agli sviluppatori di altri plug-in di estendere in maniera più semplice queste visualizzazioni o editor con nuove azioni complete.
Un elemento systemProperty è utilizzato per valutare lo stato di alcune proprietà del sistema. Il valore del sistema è determinato richiamando System.getProperty.
Un elemento pluginState è utilizzato per valutare lo stato di un plug-in. Lo stato del plug-in potrebbe essere installed o activated.
Da: versione 2.0
Tag di configurazione:
<!ELEMENT visibility (and | or | not | objectClass
| objectState | systemProperty
| pluginState)>
<!ELEMENT enablement (and | or | not | objectClass
| objectState | systemProperty
| pluginState)>
<!ELEMENT and (and | or | not | objectClass | objectState | systemProperty | pluginState)*>
<!ELEMENT or (and | or | not | objectClass | objectState | systemProperty | pluginState)*>
<!ELEMENT not (and | or | not | objectClass | objectState | systemProperty | pluginState)>
<!ELEMENT objectClass EMPTY>
<!ATTLIST objectClass
name
CDATA #REQUIRED
>
Esempi:id - identificativo di un plug-in che potrebbe anche non essere registrato nel registro dei plug-in. value - lo stato richiesto del plug-in. Attualmente sono supportati due stati: installed e activated.
Di seguito è riportato l'esempio di una serie di azioni che utilizza
l'elemento enablement. La serie di azioni dichiara un menu con
l'etichetta List Element, quindi lo compila con azioni abilitate
selezionando vari stati di ListElements. Un elemento
ListElement è forntio di due attributi: name (una stringa)
e flag (un booleano). In questo esempio il comando All
action () è abilitato ogni volta che viene selezionato un elemento
ListElement. L'azione Red
(
)
è abilitata quando viene selezionato un elemento ListElement con name =
red. L'azione Not Red
(
)
è abilitata quando viene selezionato un elemento ListElement con name !=
red.
<extension point = "org.eclipse.ui.actionSets">Nell'esempio seguente viene utilizzato l'elemento pluginState per controllare l'abilitazione delle azioni in una serie. L'azione Installed (
<actionSet id="org.eclipse.ui.tests.internal.ListElementActions"
label="List Element">
<menu id="org.eclipse.ui.tests.internal.ListElementMenu"
label="List Element"
path="additions">
<separator name="group1"/>
</menu><action id="org.eclipse.ui.tests.internal.ac1"
label="All"
menubarPath="org.eclipse.ui.tests.internal.ListElementMenu/group1"
class="org.eclipse.ui.tests.api.MockActionDelegate"
enablesFor="1">
<enablement>
<objectClass name="org.eclipse.ui.tests.api.ListElement"/>
</enablement>
</action><action id="org.eclipse.ui.tests.internal.ac2"
label="Red"
menubarPath="org.eclipse.ui.tests.internal.ListElementMenu/group1"
class="org.eclipse.ui.tests.api.MockActionDelegate"
enablesFor="1">
<enablement>
<and>
<objectClass name="org.eclipse.ui.tests.api.ListElement"/>
<objectState name="name" value="red"/>
</and>
</enablement>
</action><action id="org.eclipse.ui.tests.internal.ac3"
label="Not Red"
menubarPath="org.eclipse.ui.tests.internal.ListElementMenu/group1"
class="org.eclipse.ui.tests.api.MockActionDelegate"
enablesFor="1">
<enablement>
<and>
<objectClass name="org.eclipse.ui.tests.api.ListElement"/>
<not>
<objectState name="name" value="red"/>
</not>
</and>
</enablement>
</action>
</actionSet>
</extension>
<extension point = "org.eclipse.ui.actionSets">Nell'esempio seguente è dimostrato l'elemento systemProperty. L'azione System Property (
<actionSet id="org.eclipse.ui.tests.internal.ListElementActions"
label="List Element">
<menu id="org.eclipse.ui.tests.internal.ListElementMenu"
label="List Element"
path="additions">
<separator name="group1"/>
</menu><action id="org.eclipse.ui.tests.internal.ac8"
label="Installed"
menubarPath="org.eclipse.ui.tests.internal.ListElementMenu/group1"
class="org.eclipse.ui.tests.api.MockActionDelegate">
<enablement>
<pluginState id="x.y.z.myPlugin" value="installed"/>
</enablement>
</action><action id="org.eclipse.ui.tests.internal.ac10"
label="Activated"
menubarPath="org.eclipse.ui.tests.internal.ListElementMenu/group1"
class="org.eclipse.ui.tests.api.MockActionDelegate">
<enablement>
<pluginState id="x.y.z.myPlugin" value="activated"/>
</enablement>
</action>
</actionSet>
</extension>
<extension point = "org.eclipse.ui.actionSets">Nell'ultimo esempio è dimostrata la dichiarazione di visibilità per l'estensione di un'azione di un menu di scelta rapida. L'azione Red and True è visibile ogni volta che viene selezionato un elemento ListElement con name = red e flag = true.
<actionSet id="org.eclipse.ui.tests.internal.ListElementActions"
label="List Element">
<menu id="org.eclipse.ui.tests.internal.ListElementMenu"
label="List Element"
path="additions">
<separator name="group1"/>
</menu><action id="org.eclipse.ui.tests.internal.ac11"
label="System Property"
menubarPath="org.eclipse.ui.tests.internal.ListElementMenu/group1"
class="org.eclipse.ui.tests.api.MockActionDelegate">
<enablement>
<systemProperty name="ActionExpressionVar" value="bubba"/>
</enablement>
</action>
</actionSet>
</extension>
<extension point="org.eclipse.ui.popupMenus">
<objectContribution id="oc6"
objectClass="org.eclipse.ui.tests.api.ListElement">
<visibility>
<and>
<objectState name="name" value="red"/>
<objectState name="flag" value="true"/>
</and>
</visibility>
<action id="oc4" label="Red And True"
class="org.eclipse.ui.tests.api.MockActionDelegate"/>
</objectContribution>
</extension>
Implementazione fornita: per comodità, i filtri di azione sono stati definiti per indicatori, risorse e progetti. Ciascuna coppia nome-valore è stata dichiarata su IMarkerActionFilter, IResourceActionFilter,
e IProjectActionFilter.