eclipse.orgが打ち出すRIAプラットフォーム「Eclipse RAP」(Java Traveler 第2回補足)

この記事を読むのに必要な時間:およそ 5.5 分

サンプルアプリケーションのコード

では,今回のサンプルを紹介しましょう。⁠左のビューで名前と年齢を入力して[追加]ボタンを押すと,右の一覧にそれが追加される」というシンプルなアプリケーション図5で,先ほど作成したプロジェクトにコードを追加して作成します。

プロジェクトを作成した際に選択した「RAP Application with a View」テンプレートは,ビューを1つ持っているアプリケーションとなっています。これにもう1つビューを追加して,情報入力ビューと情報一覧ビューという構成を作っていきます。

図5 Eclipse RAPのサンプルアプリケーション

図5 Eclipse RAPのサンプルアプリケーション

情報入力ビューの追加

まず,新規にInputViewという名前のクラスを作成します。コードの内容はリスト1のようにします。

リスト1 InputView

package rap_sample;

import org.eclipse.jface.dialogs.*;  ---①
import org.eclipse.swt.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.part.*;

public class InputView extends ViewPart {
    public static final String ID = "rap_sample.view.input";
    private Text text;
    private Spinner spinner;

    public void createPartControl(Composite parent) {
        GridLayout layout = new GridLayout();  ---②
        layout.numColumns = 2; 
        parent.setLayout(layout); 
        Label label = new Label(parent, SWT.NONE); 
        label.setText("名前"); 
        text = new Text(parent, SWT.SINGLE | SWT.BORDER); 
        label = new Label(parent, SWT.NONE); 
        label.setText("年齢"); 
        spinner = new Spinner(parent, SWT.BORDER); 
        spinner.setMinimum(0); 
        spinner.setMaximum(120); 
        spinner.setSelection(33); 
        Button button = new Button(parent, SWT.PUSH); 
        button.setText("追加"); } 
        button.addSelectionListener(new SelectionListener() {  ---③
            public void widgetDefaultSelected(SelectionEvent e) {
            }
            public void widgetSelected(SelectionEvent e) {
                String name = text.getText();
                if (name == null || name.length() == 0) {  ----④
                    MessageDialog.openError(getSite().getShell(), "エラー", "名前を入力してください");
                } else {
                    String person = name + "(" + spinner.getSelection() + ")";
                    Activator activator = Activator.getDefault();
                    activator.addPerson(person);  ---⑤
                }
            }
        });
    }

    public void setFocus() {
        text.setFocus();
    }
}

①のimport文を見ると,Eclipseプラグインを作る際に使用するSWTおよびJFaceのパッケージのみが記述されています。つまり,このリストはこのままデスクトップアプリケーションとして利用できます。JavaScriptが出てくるわけでもなく,特別なAPIを使うわけでもなく,RIAアプリケーションが開発できることがわかります。

②はラベルやテキストフィールド,年齢を選択するスピナーなどのUI部品を生成し登録しているコードです。GridLayoutクラスを使ってUIの配置を調整しています。

登録された[追加]ボタンが押されたときの処理は,そのbuttonインスタンスにSelectionListenerインタフェースのオブジェクトを生成して登録します。それが③の部分です。実際にWebブラウザ上でボタンが押された際には,widgetSelected( )メソッドが「サーバ上で」呼び出されます。Webブラウザ上でwidgetSelected( )メソッドの内容が実行されるわけではありません。

Webブラウザ上のテキストフィールドに入力された値は,Ajaxによる非同期通信を経て,SWTコンポーネントのインスタンスに反映されます。widgetSelected( )メソッド内では,getText( )メソッドによって入力文字列を取得し,入力されたかどうかを判断しています。④の部分で,もし入力されていなかった場合にMessageDialogクラスのopenError( )メソッドによってエラーダイアログを表示しています。これに関しても,普通に考えればOSのGUI上にダイアログが表示されるのですが,Eclipse RAPではWebブラウザ上でダイアログが表示されます図6⁠。

図6 MessageDialog.openError( )の結果

図6 MessageDialog.openError( )の結果

ちゃんと入力されていれば,⑤でActivatorクラスのaddPerson( )メソッドに入力された文字列と選択された年齢をもとに作成した文字列を渡し,隣の情報一覧ビューに追加を依頼します。

このInputViewビュークラスを実際に利用するためには,plugin.xmlファイルにリスト2の内容を追記します。追記個所は,org.eclipse.ui.views拡張の定義が書かれているextensionタグの中です。

この記述により,自作したビューがEclipseに登録されます。

リスト2 plugin.xmlへの追記内容

<view
      name="InputView"
      class="sample.InputView"
      id="rap_sample.view.input">
</view>

Eclipseに登録されたビューはパースペクティブに追加して表示します。パースペクティブ内をどのようなビューで構成するかはPerspectiveクラスで指定します。今回のサンプルでは2つのビューを登録しますので,PerspectiveクラスのcreateInitialLayout( )メソッド内をリスト3のように修正します。

リスト3 Perspectiveクラスの修正

・修正前
layout.addStandaloneView(View.ID, false, IPageLayout.LEFT, 1.0f, editorArea);
・修正後
layout.addView(InputView.ID, IPageLayout.LEFT, 0.5f, editorArea);
layout.addView(View.ID, IPageLayout.LEFT, 0.5f, editorArea);

先ほど作成したInputViewビューとテンプレートに含まれているViewビューを横に均等に並べて,パースペクティブとしています。StandaloneViewではなくなるので,それぞれのビューにタブが表示されるようになります。

著者プロフィール

田中洋一郎(たなかよういちろう)

株式会社ミクシィ所属。Google API Expert (OpenSocial)。Mash up Award 3rd 3部門同時受賞。書籍「OpenSocial入門」を出版。

URL:http://www.eisbahn.jp/yoichiro

著書

バックナンバー

java

  • eclipse.orgが打ち出すRIAプラットフォーム「Eclipse RAP」(Java Traveler 第2回補足)