第5回 HSQLDBプラグインを動かしてみよう


萩原 巧
リトルソフト株式会社
2006/11/18


追加した情報を反映

 設定画面の遷移を実装した田中君。続いて、入力したHSQLDBの設定情報を編集できるようにする。

長尾君 「復習だけど、このプラグインで管理する項目って何だっけ?」
田中君 「[HSQLDB Database名称][HSQLDB Databaseパス][HSQLDB Databaseポート]の3つだよね」
長尾君 「そのとおりだよ。ここでは、その3つの項目を保持するクラスをまず作成しよう。作成するクラスは、ゲッターメソッドとセッターメソッドを持つだけの単純なものだよ」

 このクラスは、HSQLDBの設定情報を1件保持できます。各設定項目にはゲッターおよびセッターメソッドが存在し、情報を取得、設定できます。

項目名称 内容
パッケージ hsqldb.util]と設定してください
名前(クラス名) HSQLDBConnectDefinition]と設定してください

 ソースは以下のようになります。

HSQLDBConnectDefinition クラス
package hsqldb.util;

public class HSQLDBConnectDefinition {

    private String dbName = null;                  //(1)
    private String dbPath = null;                  //(2)
    private String dbPort = null;                  //(3)

    public HSQLDBConnectDefinition(String dbName
        , String dbPath, String dbPort){           //(4)
        this.dbName = dbName;
        this.dbPath = dbPath;
        this.dbPort = dbPort;
    }

    public String getDBName(){
        return dbName;
    }

    public String getDBPath(){
        return dbPath;
    }

    public String getDBPort(){
        return dbPort;
    }

    public void setDBName(String dbName){
        this.dbName = dbName;
    }

    public void setDBPath(String dbPath){
        this.dbPath = dbPath;
    }

    public void setDBPort(String dbPort){
        this.dbPort = dbPort;
    }
}

 フィールドの[dbName](1)はHSQLDB Database名称、[dbPath](2)はHSQLDB Databaseパス、[dbPort](3)はHSQLDB Databaseポートに対応しています。各フィールドには、それぞれゲッター、セッターメソッドが用意されています。コンストラクタ(4)では与えられた引数から値を設定しています。

長尾君 「[HSQLDBConnectDefinition]クラスを作成したら、HSQLDBの設定情報を編集できるように実装をしよう。まずは、先ほど作成した[HSQLDB新規追加ダイアログ]で入力した内容を、[HSQLDB設定画面]に反映させる部分から始めよう」

[HSQLDB新規追加ダイアログ]の[OK]ボタンがクリックされたら、入力された内容を[HSQLDB設定画面]に反映させる処理

addDefinitionData メソッド
private void addDefinitionData(){
    final HSQLAddDefinitionDialog dlg
    = new HSQLAddDefinitionDialog(
        new Shell(),"HSQLDB 新規追加ダイアログ");

    if (dlg.open() == Dialog.OK){
        String dbName = dlg.getDBName();               //(1)
        String dbPath = dlg.getDBPath();
        String dbPort = dlg.getDBPort();

        connectDefinition = new HSQLDBConnectDefinition(
                                dbName,dbPath,dbPort); //(2)

        listDBList.setData(dbName, connectDefinition); //(3)

        // リストにデータベース名称を追加
        listDBList.add(dbName);

        // 選択状態の設定
        listDBList.select(listDBList.getItemCount() - 1);

        setupDefinitionInputText(
            listDBList.getItemCount() - 1);            //(4)
    }
}

田中君 「[HSQLPreferencePageComposite]クラスの[addDefinitionData]メソッドに対して、OKボタンがクリックされたときの処理を記述しているね」
長尾君 「ローカルフィールドの[dbName,dbPath,dbPort]に対して、ダイアログにて入力した値を設定(1)して、その値から[HSQLDBConnectDefinition]クラスのインスタンス化(2)を行っているね。そして、リストボックスの[listDBList]に[HSQLDBConnectDefinition]クラスのインスタンスをセットし(3)、最後に、setupDefinitionInputTextを実行(4)しているよ」

コラム listDBList(org.eclipse.swt.widgets.Listクラス)のメソッドについて
addDefinitionDataメソッド内では、org.eclipse.swt.widgets.ListクラスのsetData、add、select 3つのメソッドを使用しています。 これらメソッドの仕様については、Eclipseのオンラインヘルプの[Platformプラグイン・デベロッパー・ガイド]―[参照]―[API参照]にある、EclipseプラグインAPIドキュメントをご覧ください。

HSQLPreferencePageComposite クラス
setupDefinitionInputText メソッド
private void setupDefinitionInputText(int idx){
    // DBPath、DBPortテキストボックスに値を設定
    textDBPath.setText(getDBPath(idx));
    textDBPort.setText(getDBPort(idx));

    // 選択状態の設定、インデックスが負の値でなければ編集可能
    textDBPath.setEditable(idx >= 0);
    textDBPort.setEditable(idx >= 0);
}

// インデックスの番号に設定されているデータベース名称を取得
public String getDBName(int idx){
    String result = "";
    if (idx >= 0) {
        // listDBListに登録されている
        // HSQLDBConnectDefinitionクラスのインスタンスを取得
        HSQLDBConnectDefinition dbDef
        = (HSQLDBConnectDefinition)listDBList.getData(
            listDBList.getItem(idx));
        // データベース名称を取得
        result = dbDef.getDBName();
    }
    return result;
}

// インデックスの番号に設定されているデータベースパスを取得
public String getDBPath(int idx){
    String result = "";
    if (idx >= 0) {
        HSQLDBConnectDefinition dbDef
        = (HSQLDBConnectDefinition)listDBList.getData(
            listDBList.getItem(idx));
        result = dbDef.getDBPath();
    }
    return result;
}

// インデックスの番号に設定されているデータベースポートを取得
public String getDBPort(int idx){
    String result = "";
    if (idx >= 0) {
        HSQLDBConnectDefinition dbDef
        = (HSQLDBConnectDefinition)listDBList.getData(
            listDBList.getItem(idx));
        result = dbDef.getDBPort();
    }
    return result;
}

 setupDefinitionInputTextは、引数のインデックスに設定されているHSQLDBの各種情報を取得して、その内容をtextDBPath、textDBPort.setTextに設定するメソッドです。getDBName等のゲッターメソッドは、引数のインデックスに設定されている情報をlistDBListから取得して文字列を返却できます。

長尾君 「ここまで実装したら、動作の確認を行おう」

 田中君はEclipseをテスト起動して、HSQLDBの情報が登録できることを確認した。

田中君 「HSQLDBの情報が登録できたね」

コラム パス選択ダイアログについて
[HSQLDB新規追加ダイアログ]のボタンをクリックすると、バス選択ダイアログが表示され、選択したパスを反映させるためにはHSQLDB新規追加ダイアログ(HSQLAddDefinitionDialogクラス)に以下のソースコードを記述します。この場合、あらかじめボタンに対してaddSelectionListenerを設定する必要があります。

setupDatabasePath メソッド
private void setupDatabasePath(){
    DirectoryDialog dialog
     = new DirectoryDialog(this.getShell());
    dialog.setMessage(
        "HSQLDB Database のパスを選択してください。");
    String dir = dialog.open();
    if (dir != null) {
        dir = dir.trim();
        if (dir.length() != 0) textDBPath.setText(dir);
    }
}

削除ボタンの処理を実装

 HSQLDBの情報が登録できた田中君は続いて、HSQLDBの情報を削除する処理の実装を行った。

HSQLDB情報の削除

 削除ボタンがクリックされたら、選択中のDB(この場合、[plugin_db])の情報が削除されます。初めに、削除ボタンのaddSelectionListenerを設定します。

buttonRemove.addSelectionListener(
    new org.eclipse.swt.events.SelectionAdapter() {
        public void widgetSelected(
        org.eclipse.swt.events.SelectionEvent e) {
            removeDefinitionData(
                 listDBList.getSelectionIndex());
        }
    }
);

 ボタン選択時に実行されるメソッド[widgetSelected]内でremoveDefinitionDataメソッドが実行されます。removeDefinitionDataメソッドの引数には、選択中のDBリストのインデックス(listDBList.getSelectionIndex())を設定します。

 続いて、削除ボタンがクリックされたときに実行されるremoveDefinitionDataメソッドは、以下のとおり実装します。

removeDefinitionData メソッド
private void removeDefinitionData(int idx){
    if (idx < 0) return;
    listDBList.remove(idx); // リストの削除
    if (listDBList.getItemCount() >0){
        if (idx == 0) idx += 1;
        listDBList.select(idx-1); // リストを選択状態にする
    }
}

 上記処理で、選択したDBの定義情報が削除されます。

 リスト選択時の処理やデータベース情報の変更については、紙幅の関係で説明を割愛します。ソースをダウンロードすることにより、処理を確認できますので、興味のある方はご覧ください。ダウンロードのリンクは記事の一番最後にあります。

 これで、HSQLDB情報の入力や削除についての実装はすべて完了です。

2/3

Index
第5回 HSQLDBプラグインを動かしてみよう
Page1
HSQLDB情報画面の処理実装の概要
新規追加ダイアログの作成
追加ボタンのクリックイベントの実装とダイアログの表示
Page2
追加した情報を反映
削除ボタンの処理を実装
Page3
入力情報をEclipseに保存
今回の実装の動作確認と最終回予告



Java Solution全記事一覧



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間