Ausdrücke

Beschreibung: Boolesche Ausdrücke werden zum Definieren der Sichtbarkeit (visibility) und Aktivierung (enablement) für viele Aktionserweiterungen innerhalb der Workbench verwendet.  Ein Element enablement kann beispielsweise innerhalb einer beliebigen Aktionserweiterung definiert werden. Dieses Element enthält einen booleschen Ausdruck, der die Aktivierungskriterien für die Aktion definiert. Ein Element visibility kann für eine Kontextmenü-Aktionserweiterung definiert werden.  Dieses Element enthält einen booleschen Ausdruck, der die Sichtbarkeitskriterien für die Aktion definiert.

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
   >

   <!ELEMENT objectState EMPTY>
   <!ATTLIST objectState
      name       CDATA #REQUIRED
      value      CDATA #REQUIRED
   >    <!ELEMENT systemProperty EMPTY>
   <!ATTLIST systemProperty
      name       CDATA #REQUIRED
      value      CDATA #REQUIRED
   >    <!ELEMENT pluginState EMPTY>
   <!ATTLIST pluginState
      id         CDATA #REQUIRED
      value      (installed | activated)
   >
  • 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".
  • Beispiele:

    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 (A-Befehl) aktiviert. Die Aktion Red (B-Befehl) wird aktiviert, wenn ein Listenelement mit name = red ausgewählt wird. Die Aktion Not Red (C-Befehl) wird aktiviert, wenn ein Listenelement mit name != red ausgewählt wird.

    <extension point = "org.eclipse.ui.actionSets">
        <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>
    A-Befehl     <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>
    B-Befehl     <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>
    C-Befehl     <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>
    Im nächsten Beispiel wird das Element pluginState verwendet, um die Aktivierung von Aktionen in einem Aktionsset zu steuern.   Die Aktion "Installiert" (A tag) wird aktiviert, wenn das Plug-in mit x.y.z.myPlugin installiert wird.  Die Aktion "Aktiviert" (B tag) wird aktiviert, wenn dasselbe Plug-in aktiviert wird.
    <extension point = "org.eclipse.ui.actionSets">
        <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>
    A-Befehl     <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>
    B-Befehl     <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>
    Im nächsten Beispiel wird das Element systemProperty demonstriert. Die Aktion System Property (A-Befehl) wird aktiviert, wenn die Systemeigenschaft ActionExpressionVar gleich "bubba" ist.
    <extension point = "org.eclipse.ui.actionSets">
        <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>
    A-Befehl     <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>
    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.
    <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.

    Copyright IBM Corporation und Andere 2000, 2002. Alle Rechte vorbehalten.