Top / Eclipse / プラグイン開発のTIPS集 / GooglePlugin / UI部のロジックをつくる

次はUI部のビジネスロジックを作成します。プラグインクラスで、先ほど作ったcoreプラグイン機能のGUIラッパを作成します。具体的には、

  • プログレスバー上で、coreプラグインのスペルミスチェッククラスを使って、スペルミスをチェックするメソッド。
  • スペルミスがあった場合は正しいスペルに変更して検索するかを尋ねるダイアログを表示するスレッドクラス。

などを作成します。ひとつめのメソッドgetSplellingSuggestion?は後に作成するorg.eclipse.core.runtime.jobs.Jobのサブクラスのrun(IProgressMonitor? monitor)メソッドから起動されます。二つめのスレッドは、そのメソッド内でダイアログを出すために呼ばれるスレッドです。

スクリーンショット

thread.png

プラグインクラス nu.mine.kino.plugin.google.ui.GooglePlugin のソースコード

public class GooglePlugin extends AbstractUIPlugin {
  いろいろ省略

    /**
     * 引数の文字列でGoogleにリクエストし、単語の誤りをチェックします。
     * 候補があった場合、候補が返ります。候補がなかった場合、入力した単語が返ります。
     * 
     * @param text
     * @param monitor
     * @return
     */
    public String getSplellingSuggestion(final String text,
            IProgressMonitor monitor) {
        String searchText;
        String suggestionText = null;

        // 設定画面より、Google Keyを取得
        String myGoogleKey = GooglePlugin.getDefault().getPreferenceStore()
                .getString(PreferenceConstants.GOOGLE_KEY);
        // Googleにリクエスト
        suggestionText = GoogleCorePlugin.getDefault().getSplellingSuggestion(
                myGoogleKey, text);

        // nullでない場合は候補が返ってきた
        if (suggestionText != null) {
            CheckThread dialog = new CheckThread(text, suggestionText);
            // ユーザに変更するかを選ばせる
            checkSyncExec(dialog);
            // dialogより結果を取得する
            if (dialog.isOK()) {
                // 変更する
                searchText = suggestionText;
                logger.debug("スペルミスの候補に変更します");
                monitor.setTaskName("「" + suggestionText
                        + "」に変更してGoogleを検索中...");
            } else {
                // 変更しない
                searchText = text;
                logger.debug("スペルミスの候補に変更しません(ユーザがキャンセル)");
            }
        } else {
            logger.debug("スペルミスの候補がありませんでした");
            // 例外が発生した場合もこのケース
            searchText = text;
        }
        return searchText;
    }

    /**
     * プログレスバー上でダイアログを出す際に使用するスレッドです。
     * 
     * @author Masatomi KINO
     * @see GoogleResultView#checkSyncExec(Runnable)
     */
    private class CheckThread implements Runnable {
        /**
         * Logger for this class
         */
        private final Logger logger = Logger.getLogger(CheckThread.class);

        // ダイアログでユーザがどちらを押したかを判定するフラグ
        // 0 : する
        // 1 : しない
        private int returnCode;

        private String text;

        private String suggestionText;

        /**
         * @param text
         * @param suggestionText
         */
        public CheckThread(String text, String suggestionText) {
            this.text = text;
            this.suggestionText = suggestionText;
        }

        public void run() {
            StringBuffer message = new StringBuffer();
            message.append("補正しますか? ");
            message.append(text);
            message.append(" -> ");
            message.append(suggestionText);

            IWorkbench workbench = PlatformUI.getWorkbench();
            IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
            MessageDialog dialog = new MessageDialog(window.getShell(),
                    "スペルミスしていませんか?", null, new String(message),
                    MessageDialog.QUESTION, new String[] { "する", "しない" }, 1);
            returnCode = dialog.open();
        }

        /**
         * ダイアログでユーザがどちらを押したかを判定します。
         * 
         * @return 0 : する 1 : しない
         */
        public boolean isOK() {
            if (returnCode == 0) {
                return true;
            }
            return false;
        }
    }

    private boolean checkSyncExec(Runnable thread) {
        if (!Display.getDefault().isDisposed()) {
            Display.getDefault().syncExec(thread);
            return true;
        } else {
            return false;
        }
    }
}

設定を保持するIPreferenceStore?について

さて、うえのソースコード上で

String myGoogleKey = GooglePlugin.getDefault().getPreferenceStore()
               .getString(PreferenceConstants.GOOGLE_KEY);

とやってGoogleのキー値を設定画面から取得していますが、これについては設定を保持するIPreferenceStoreを使うで説明しています。

次は上のビジネスロジックを利用する、検索結果一覧を表示するビューを作成します。


この記事は

選択肢 投票
おもしろかった 2  
そうでもない 0  

Top / Eclipse / プラグイン開発のTIPS集 / GooglePlugin / UI部のロジックをつくる

現在のアクセス:9711


添付ファイル: filethread.png 893件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-04-03 (日) 06:57:52 (4997d)