minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

RCP とは、Eclipse 上で作成する Rich Client Platform のことです。

Swing の代わりに SWT を使います。
開発手順はほぼプラグイン開発と同様なので、
プラグイン開発をした事がある人ならば比較的簡単に習得できるはずです。

通常のプラグインとの違い

先程も話した通り、RCPはプラグイン開発と非常に似ています。
新規プロジェクトを作成するときも Plug-in Project を使います。
ウィザードの中で Rich Client Application の欄を Yes にするだけで
そのプロジェクトはRCPになります。

実は通常のプラグインプロジェクトも
plugin.xml に手を加えていくつかのクラスを生成すればRCPにすることが可能です。
新規ウィザードを使えばこの手間が省けるというだけのことです。

plugin.xml

org.eclipse.core.runtime.applications の extension 要素が必要です。
逆に言えば、この要素があればそのプロジェクトはRCPになります。

<extension
      id="application"
      point="org.eclipse.core.runtime.applications">
   <application>
      <run
            class="test_rcp.Application">
      </run>
   </application>
</extension>

要素内では、メインとなるアプリケーションのクラス名を定義しています。
このクラスは IApplication を実装している必要があります。

IApplication

RCPの実行時および終了時に呼ばれるのがこのクラスです。
start / stop メソッドを実装する必要があります。
自動生成すると、start メソッドは以下のような感じです。

public Object start(IApplicationContext context) {
    Display display = PlatformUI.createDisplay();
    try {
        int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
        if (returnCode == PlatformUI.RETURN_RESTART) {
            return IApplication.EXIT_RESTART;
        }
        return IApplication.EXIT_OK;
    } finally {
        display.dispose();
    }
}

ApplicationWorkbenchAdvisor というのも、自動生成によって作成されたクラスです。
では次にこれを見ていきましょう。

WorkbenchAdvisor

このクラスでは、二つのメソッドが実装されています。

private static final String PERSPECTIVE_ID = "test_rcp.perspective";
public String getInitialWindowPerspectiveId() {
    return PERSPECTIVE_ID;
}

まずはこれによって、ウィンドウのパースペクティブが決まります。
特にパースペクティブを使わなくても、一応定義する必要があります(IDだけ)。
もう一つの実装メソッドは以下のようになります。

public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
        IWorkbenchWindowConfigurer configurer) {
    return new ApplicationWorkbenchWindowAdvisor(configurer);
}

今度も、自動生成された ApplicationWorkbenchWindowAdvisor を使っています。
続いてこれも見ていきます。

WorkbenchWindowAdvisor

このクラスは abstract では無いので、実際には何のメソッドも
定義しなくても構いません。
とりあえず自動生成されたコードは以下のようになります。

public void preWindowOpen() {
    IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
    configurer.setInitialSize(new Point(400, 300));
    configurer.setShowCoolBar(false);
    configurer.setShowStatusLine(false);
    configurer.setTitle("RCP Application");
}

ここで、ウィンドウのサイズやタイトルなどを設定しています。

public ActionBarAdvisor createActionBarAdvisor(
        IActionBarConfigurer configurer) {
    return new ApplicationActionBarAdvisor(configurer);
}

ここではさらに ApplicationActionBarAdvisor が自動生成されています。
このクラスを簡単に説明すると、その名の通りアクションバー(要するにメニューバー)に
表示する各種アクションを定義したものです。
ウィンドウの何のメニューも表示しないのならば、このクラスを作成する必要はありません。

Perspective

WorkbenchAdvisor で定義したパースペクティブのIDですが
実は plugin.xml と連動しています。

<extension
      point="org.eclipse.ui.perspectives">
   <perspective
         name="Perspective"
         class="test_rcp.Perspective"
         id="test_rcp.perspective">
   </perspective>
</extension>

ここのIDと合わせる必要があります。
もちろん自動生成時には合っていますが、その後IDを変更したい場合などは
Javaソース、XML共に変更しなければならないので気を付けましょう。

Perspective の実体は以下のようになっています。

public void createInitialLayout(IPageLayout layout) {
    String editorArea = layout.getEditorArea();
    layout.setEditorAreaVisible(false);
    layout.setFixed(true);
    
    layout.addStandaloneView(View.ID,  false, IPageLayout.LEFT, 1.0f, editorArea);
}

このように、初期レイアウトを作成しています。
ここで出てきたビューのIDも、plugin.xml と連動しています。

<extension
      point="org.eclipse.ui.views">
   <view
         name="View"
         class="test_rcp.View"
         id="test_rcp.view">
   </view>
</extension>

view要素のclass属性で定義されたクラスが、ビューの実体になります。

public class View extends ViewPart {
    public static final String ID = "test_rcp.view";
    ...
}

という風に、ここで定義されているIDも plugin.xml のものと合わせる必要があります。
ビューについては、もう通常のSWT開発と同じです。

public void createPartControl(Composite parent) {
    ...
}

このように、abstractメソッドを実装して
レイアウトを作成するだけです。

実行方法

プラグインの実行と全く同じです。
Overview タブから実行用のリンクをクリックするだけです。

配布方法

RCPはもちろんEclipse上から起動できるのですが
単体でも起動させることが可能です。
そのためにはいくつか手順を踏む必要があります。

Product Configuration の作成

New ウィザードで、Plug-in Development -> Product Configuration を選択します。
すると、ファイル名および初期設定を選択する欄があるので
まずはファイル名を適当に入力します。

次に、Initialize the file content の欄で
Use a launch configuration を選択してランチャーの設定を指定します。
ここでは、RCPをEclipse上で実行したときのランチャ設定を選択します。

すると、ファイル名.product というファイルが出来上がります。
まずは Overview タブで Product ID のNew...ボタンを選択。
開いたダイアログ内で Defining Plug-in にRCPプロジェクトのプラグインIDを指定。
Product Name に適当な名前を入力、最後にProduct Appication で
RCPアプリケーションのIDを選択します。

これでProductファイルの準備は完了です。
同タブ内に実行用のリンクがあるので、試しに実行してみましょう。
RCPが起動すれば成功です。一つでも設定にミスがあると、
エラーになってしまいます。

なお、Product を一つ生成する度に plugin.xml 内に
org.eclipse.core.runtime.products という extension が一つずつ増えていきます。
ここの値は手動で修正すると整合性が取れなくなる可能性が高いので
止めておいた方が無難です。

Export

さて、Product ファイルからの実行に成功したら
ようやく Export することが可能になります。
Export ダイアログを開き、Plug-in Development -> Eclipse Product を選択します。
Export 先を指定すれば、その場所に eclipse ディレクトリが作成され
その中に eclipse.exe ファイルがあるはずです。
これを実行すれば、無事RCPプログラムが起動します。