ブール式が見つかった場所にかかわらず、式の構文は同じ書式に従います。 使用可能性または可視性のためのルート・エレメントには、sub エレメントが 1 つ含まれていることが 必要です。 最も簡単なケースでは、これは objectClass、 objectState、systemProperty、または pluginState エレメントで構成されます。 より複雑なケースでは、and、 or、not、エレメントが組み合わされ、ブール式が 形成されることがあります。 and または or エレメントには、1 つ以上の sub エレメントが含まれる可能性があります。 not エレメントには、1 つの sub エレメントしか含むことはできません。
objectClass エレメントは、選択内の各オブジェクトのクラスを評価するために使用されます。 objectClass の名前属性には、完全修飾クラス名が含まれます。 選択内の各オブジェクトがこのクラスをインプリメントする場合、拡張は真と評価されます。
objectState エレメントは、選択内の各オブジェクトの状態を評価するために使用されます。 多くの場合、アクションの使用可能性または可視性は、選択タイプによって決定されます。 そうでない場合、これでは十分ではなく、選択状態を使用して使用可能性または可視性を決定する必要が あります。 たとえば、読み取り専用の IFile 型のすべてのオブジェクトのために、アクションを付与できます。 この読み取り専用の基準は、objectState エレメントを指定することでのみ宣言できます。 書式は次のようになります。
<objectState name="readOnly" value="true"/>オブジェクトの属性は型に特有のものであり、ワークベンチ自身のドメインの範囲外であるため、 ワークベンチでこの式の評価を行うのは非常に困難です。 このため、ワークベンチは選択内のオブジェクトと共同で式を評価します。 これは、objectState エレメントの評価戦略である IActionFilter を使用して行われます。 objectState エレメントが評価されるとき、ワークベンチは、選択内の各オブジェクトに IActionFilter を要求します。 ワークベンチは IActionFilter をインプリメントするかどうかをテストすることで、これを 行います。 これが失敗した場合、ワークベンチは、IAdaptable 機構を通じてフィルターを要求します。 フィルターが見つかった場合、ワークベンチは objectState 属性をフィルターに渡し、 選択済みオブジェクトの状態に一致するかどうかを判別します。 一致する場合、条件は真と評価されます。 アクション・フィルターがない、または一致しない場合は、その条件は偽と評価されます。
ビューおよびエディターは、その選択内の各オブジェクトについて、IActionFilter を 定義するよう促されます。 これにより、他のプラグイン・デベロッパーのビューやエディターを、新しい、十分に修飾された アクションを使用して拡張することが容易になります。
systemProperty エレメントは、いくつかのシステム・プロパティーの状態を評価するために 使用されます。 隠れていますが、システム・プロパティーの値は System.getProperty を起動することによって決定できます。
pluginState エレメントは、プラグインの状態を評価するために使用されます。 プラグインの状態は、インストール済み、または活動化済みのいずれかになります。
リリース 2.0 以降
構成マークアップ:
<!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
>
例:id- プラグインの ID。プラグイン・レジストリーに登録される場合とされない場合があります。 value - プラグインの必要な状態。現在、installed と activated の 2 つの状態が サポートされています。
以下は、使用可能性エレメントを使用するアクション・セットの例です。
アクション・セットは、ラベル List Element でメニューを宣言し、それをアクションと共に取り込みます。
このアクションは、様々な状態の ListElements の選択によって使用可能になります。
ListElement には、name (ストリング) および flag (ブール値) の 2 つの属性があります。
この例では、ListElement が選択されているときはいつでも、All アクション
() を使用できます。
name = red の名前の ListElement が選択されているときは、Red アクション
(
) を使用できます。
さらに、name != red の ListElement が選択されているときは、Not Red アクション
(
) を使用できます。
<extension point = "org.eclipse.ui.actionSets">次の例では、pluginState エレメントが、アクション・セット内のアクションの使用可能性を制御するために使用されています。 プラグインが x.y.z.myPlugin とともにインストールされているときは、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">次の例では、systemProperty エレメントを説明します。 ActionExpressionVar システム・プロパティーが "bubba" と等しいときは、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">これは最後の例で、ポップアップ・メニュー・アクション拡張のための可視性の宣言のデモを行います。 ListElement が name = red および flag = true とともに選択されているときは いつでも、Red and 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>
提供されるインプリメンテーション: 便宜を図るために、アクション・フィルターが
マーカー、リソース、およびプロジェクトのために定義されました。
この名前値の対はそれぞれ、 IMarkerActionFilter、IResourceActionFilter、
および IProjectActionFilter 上で宣言されます。