ポップアップメニューをカスタマイズする

GMFを用いて自動生成するグラフィカルエディタでは、以下のように、必要に応じてポップアップメニューを表示する機能が追加されます。


上記スクリーンショットは、id:kojihashi:20070921で紹介したもので、以下のメタモデルのように、ルートクラス(PurchaseOrder)に同じ型の属性が複数ある場合(billToとshipTo)に、どの属性にオブジェクト(Address)を追加するかユーザに問い合わせるポップアップメニューです。

しかし、デフォルトでは上記スクリーンショットのように、billToとshipToのどちらの属性に追加するか、非常にわかりにくいポップアップメニューとなってしまっています。

このようなポップアップメニューをカスタマイズするには、GMFが自動生成したdiagramプロジェクト内のplugin.xmlにおいて拡張ポイント「org.eclipse.gmf.runtime.emf.type.core.elementTypes」に登録しているElementTypeのname属性を変更します。

<extension point="org.eclipse.gmf.runtime.emf.type.core.elementTypes">
   <?gmfgen generated="true"?>
   <metamodel nsURI="http://www.example.org/po/">
      <metamodelType
            id="example.po.diagram.Address_1002"
            name="%metatype.name.Address_1002"
            kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
            eclass="Address"
            edithelper="po.diagram.edit.helpers.AddressEditHelper">
         <param name="semanticHint" value="1002"/>
      </metamodelType>
   </metamodel>
   <metamodel nsURI="http://www.example.org/po/">
      <specializationType
            id="example.po.diagram.Address_1003"
            name="%metatype.name.Address_1003"
            kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType">
         <specializes id="example.po.diagram.Address_1002"/>
         <param name="semanticHint" value="1003"/>
      </specializationType>
   </metamodel>
</extension>

ただし、GMF2.0では、上記のようにElementTypeのname属性(文字列)はplugin.propertiesに外部化されています。従って、実際にはplugin.properties内の文字列を変更することにより、カスタマイズすることができます。

例えば、上記メタモデルの例では、plugin.propertiesはデフォルトで以下のように生成されます。

# Providers
metatype.name.Address_1002=Address
metatype.name.Address_1003=Address

これを以下のように修正します。

# Providers
metatype.name.Address_1002=billToAddress
metatype.name.Address_1003=shipToAddress

これにより、以下のようにポップアップメニューが改善されます。

なお、GMFでは、diagramプロジェクトの再生成時には、plugin.propertiesファイルは再生成の対象になりませんので、上記変更は残ります。