いくつかのプラグインで構成される Eclipse RCP アプリケーションを開発しています。これらのプラグインの 1 つ (「共通 ui」プラグイン) は、他のいくつかのプラグインで使用されるビューを提供します。ビューは、共通 ui プラグインの plugin.xml で定義され、そのツールバーとコンテキスト メニューのコントリビューション (menus 拡張ポイント内) と同様に定義されます。
プラグインが 1 つありますが、それを「特別なビジネス プラグイン」と呼びましょう。これは、共通の ui プラグインによって提供されるビューにいくつか追加する必要があります。そのため、共通の UI ビューパーツ クラスからビューパーツ クラスを拡張しました (列を追加し、独自のラベルとコンテンツ プロバイダーを追加するため)。
拡張ビューパーツには、共通ビューパーツと同じメニュー コントリビューションが必要です。もちろん、それらを 2 回書きたくはありません。共通プラグインの plugin.xml で定義されているメニューの投稿を使用したいだけです。ただし、それらは共通ビューパーツのビュー ID にバインドされています。特別なビュー パーツに同じビュー ID を使用すると、特別なビュー パーツは開かれず、代わりに共通のビュー パーツが開かれます (もちろん、同じ ID を共有しているため)。別の ID を使用すると、メニューの投稿を 2 回書かなければならず、これは避けたいと思います。
では、上書きしたいビューと同じメニュー投稿を使用したい場合、別のプラグインによって定義されたビューを上書きするにはどうすればよいですか?
共通プラグインの plugin.xml
<plugin>
<extension point="org.eclipse.ui.views">
<view
allowMultiple="true"
category="org.eclipse.ui"
class="com.mycompany.client.common.ui.view.CommonViewPart"
icon="icons/CommonView.gif"
id="com.mycompany.client.common.ui.view.CommonView"
name="%CommonView"
restorable="false">
</view>
</extension>
<extension point="org.eclipse.ui.menus">
<menuContribution
locationURI="toolbar:com.mycompany.client.common.ui.view.CommonView">
<command
commandId="com.mycompany.client.common.ui.handler.RefreshCommand"
label="%refresh"
style="push">
</command>
</menuContribution>
</extenstion>
</plugin>
専用プラグインの plugin.xml
<plugin>
<extension point="org.eclipse.ui.views">
<view
allowMultiple="true"
category="org.eclipse.ui"
class="com.mycompany.client.special.view.SpecialViewPart"
icon="icons/CommonView.gif"
id="com.mycompany.client.common.ui.view.CommonView"
name="%CommonView"
restorable="false">
</view>
</extension>
</plugin>
ビューは、次のコード行を持つハンドラーによって開かれます。
一般:
AbstractViewPart view = (AbstractViewPart).
getActiveWorkbenchPage(event).showView(CommonViewPart.ID, null,
IWorkbenchPage.VIEW_VISIBLE);
特別な:
AbstractViewPart view = (AbstractViewPart).
getActiveWorkbenchPage(event).showView(SpecialViewPart.ID, null,
IWorkbenchPage.VIEW_VISIBLE);