Unabhängig davon, wo sich der boolesche Ausdruck befindet, folgt die Syntax des Ausdrucks dem gleichen Format. Das Stammelement für Aktivierung und Sichtbarkeit muss ein Unterelement enthalten. Im einfachsten Fall besteht dieses aus einem Element objectClass, objectState, systemProperty oder pluginState. In komplexeren Fällen können die Elemente and, or und not zu einem booleschen Ausdruck kombiniert werden. Ein Element and bzw. or kann ein oder mehrere Unterelemente enthalten. Ein Element not darf nur ein Unterelement enthalten.
Ein Element objectClass wird zur Bewertung der Klasse aller Objekte in der Auswahl verwendet. Das Namensattribut des Elements objectClass enthält einen vollständig qualifizierten Klassennamen. Wenn jedes Objekt in der Auswahl diese Klasse implementiert, wird der Ausdruck als "wahr" (true) bewertet.
Ein Element objectState wird zur Bewertung des Status aller Objekte in der Auswahl verwendet. In den meisten Fällen kann die Aktivierung bzw. Sichtbarkeit einer Aktion über den Auswahltyp ermittelt werden. In anderen Fällen reicht dies jedoch nicht aus, und die Aktivierung bzw. Sichtbarkeit müssen unter Verwendung des Auswahlstatus ermittelt werden. Sie können beispielsweise eine Aktion für alle Objekte des Typs IFile zur Verfügung stellen, die nur zum Lesezugriff dienen. Dieses Kriterium für den ausschließlichen Lesezugriff kann nur durch die Angabe eines Elements objectState angegeben werden. Es kann das folgenden Format aufweisen:
<objectState name="readOnly" value="true"/>In der Workbench lässt sich die Bewertung dieses Ausdrucks nur schwer ausführen, da die Attribute eines Objekts typenspezifisch sind und außerhalb der Workbench-Domäne liegen. Von daher arbeitet die Workbench zur Bewertung des Ausdrucks mit den Objekten in der Auswahl zusammen. Dies geschieht unter Verwendung eines IActionFilter (einer Bewertungsstrategie für Elemente objectState). Wenn ein Element objectState bewertet wird, fragt die Workbench jedes Objekt nach einem IActionFilter. Hierzu wird getestet, ob IActionFilter implementiert wird. Schlägt diese Aktion fehl, verwendet die Workbench den Mechanismus IAdaptable, um nach einem Filter zu fragen. Wird ein Filter gefunden, übergibt die Workbench die Attribute des Elements objectState an den Filter, um zu ermitteln, ob sie mit dem Status des ausgewählten Objekts übereinstimmen. Trifft dies zu, wird der Term als "true" (wahr) bewertet. Wenn kein Aktionsfilter bzw. keine Übereinstimmung vorliegt, wird der Term als "false" (falsch) bewertet.
Sichten und Editoren wird empfohlen, einen IActionFilter für jedes Objekt in ihrer Auswahl definieren. Dies erleichtert anderen Plug-in-Entwicklern das Erweitern dieser Sichten oder Editoren mit neuen, qualifizierten Aktionen.
Ein Element systemProperty wird zur Bewertung des Status einer bestimmten Systemeigenschaft verwendet. Der Wert der Systemeigenschaft wird verdeckt durch Aufrufen von 'System.getProperty' ermittelt.
Ein Element pluginState wird zur Bewertung des Status eines Plug-in verwendet. Der Status des Plug-in kann "installiert" oder "aktiviert" sein.
Seit: Release 2.0
Konfigurationsbefehle:
<!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
>
Beispiele:id: Eine ID eines Plug-in, die in der Plug-in-Registrierungsdatei registriert sein kann oder nicht. value: Der erforderliche Status des Plug-in. Derzeit werden zwei Status unterstützt: "installiert" und "aktiviert".
Nachfolgend ein Beispiel eines Aktionssets, das das Element enablement verwendet. Das Aktionsset deklariert ein Menü mit der Bezeichnung 'Listenelement' (List Element) und füllt es anschließend mit Aktionen auf, die durch eine Auswahl von ListElements mit unterschiedlichen Status aktiviert werden. Ein
ListElement hat zwei Attribute: name (Name) und flag (Markierung, ein boolesches Attribut). Im vorliegenden Beispiel wird bei jeder Auswahl eines Listenelements die Aktion All
()
aktiviert. Die Aktion Red (
)
wird aktiviert, wenn ein Listenelement mit name = red ausgewählt wird. Die Aktion Not Red
(
)
wird aktiviert, wenn ein Listenelement mit name != red ausgewählt wird.
<extension point = "org.eclipse.ui.actionSets">Im nächsten Beispiel wird das Element pluginState verwendet, um die Aktivierung von Aktionen in einem Aktionsset zu steuern. Die Aktion "Installiert" (
<actionSet id="org.eclipse.ui.tests.internal.ListElementActions"
label="Listenelement">
<menu id="org.eclipse.ui.tests.internal.ListElementMenu"
label="Listenelement"
path="additions">
<separator name="group1"/>
</menu><action id="org.eclipse.ui.tests.internal.ac1"
label="Alle"
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="Rot"
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="rot"/>
</and>
</enablement>
</action><action id="org.eclipse.ui.tests.internal.ac3"
label="Nicht Rot"
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"/>
<nicht>
<objectState name="name" value="rot"/>
</not>
</and>
</enablement>
</action>
</actionSet>
</extension>
<extension point = "org.eclipse.ui.actionSets">Im nächsten Beispiel wird das Element systemProperty demonstriert. Die Aktion System Property (
<actionSet id="org.eclipse.ui.tests.internal.ListElementActions"
label="Listenelement">
<menu id="org.eclipse.ui.tests.internal.ListElementMenu"
label="Listenelement"
path="additions">
<separator name="group1"/>
</menu><action id="org.eclipse.ui.tests.internal.ac8"
label="Installiert"
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="Aktiviert"
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">Ein letztes Beispiel demonstriert das Deklarieren von Sichtbarkeit für eine Kontextmenü-Aktionserweiterung. Die Aktion Red und True ist jedes Mal sichtbar, wenn ein ListElement mit name = red und flag = true ausgewählt wird.
<actionSet id="org.eclipse.ui.tests.internal.ListElementActions"
label="Listenelement">
<menu id="org.eclipse.ui.tests.internal.ListElementMenu"
label="Listenelement"
path="additions">
<separator name="group1"/>
</menu><action id="org.eclipse.ui.tests.internal.ac11"
label="Systemeigenschaft"
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="rot"/>
<objectState name="flag" value="true"/>
</and>
</visibility>
<action id="oc4" label="Rot und True"
class="org.eclipse.ui.tests.api.MockActionDelegate"/>
</objectContribution>
</extension>
Bereitgestellte Implementierung: Aus Bequemlichkeitsgründen wurden Aktionsfilter für Markierungen, Ressourcen und Projekte definiert. Die
Name/Wert-Paare für jeden Filter werden auf IMarkerActionFilter,
IResourceActionFilter und IProjectActionFilter deklariert.