Espressioni

Descrizione: le espressioni booleane sono utilizzate per definire la visibilità e l'abilitazione di molte estensioni di azioni all'interno del workbench.  E possibile definire, ad esempio, un elemento enablement in ogni estensione di un'azione.  L'elemento contiene un'espressione booleana che definisce il criterio di abilitazione dell'azione.  Per l'estensione di un'azione del menu di scelta rapida, è possibile definire un elemento visibility.  L'elemento contiene un'espressione booleana che definisce il criterio di visibilità dell'azione.

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
   >

   <!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 - 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.
  • Esempi:

    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 (tag
A) è abilitato ogni volta che viene selezionato un elemento ListElement.  L'azione Red (tag B) è abilitata quando viene selezionato un elemento ListElement con name = red.  L'azione Not Red (tag C) è abilitata quando viene selezionato un elemento ListElement con name != red.

    <extension point = "org.eclipse.ui.actionSets">
        <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>
    tag A     <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>
    tag
B     <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>
    tag C     <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>
    Nell'esempio seguente viene utilizzato l'elemento pluginState per controllare l'abilitazione delle azioni in una serie.  L'azione Installed (tag A) viene abilitata quando è installato il plugin con x.y.z.myPlugin.  L'azione Activated (tag B) viene abilitata quando è stato attivato lo stesso plugin.
    <extension point = "org.eclipse.ui.actionSets">
        <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>
    tag
A     <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>
    tag B     <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>
    Nell'esempio seguente è dimostrato l'elemento systemProperty.  L'azione System Property (tag A) è abilitata quando la proprietà del sistema ActionExpressionVar corrisponde a "bubba".
    <extension point = "org.eclipse.ui.actionSets">
        <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>
    tag A     <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>
    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.
    <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.

    Copyright
IBM Corporation e altri 2000, 2002.