#topicpath
----
//ここにコンテンツを記述します。
#contents

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

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

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

***スクリーンショット [#u8208d0b]
#ref(thread.png)

***プラグインクラス [[nu.mine.kino.plugin.google.ui.GooglePlugin:http://www.masatom.in/cgi-bin/viewvc.cgi/nu.mine.kino.plugin.google.ui/source/nu/mine/kino/plugin/google/ui/GooglePlugin.java?root=cvs]]  のソースコード[#y0e3cabd]
 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について[#p6eba7b0]
さて、うえのソースコード上で
 String myGoogleKey = GooglePlugin.getDefault().getPreferenceStore()
                .getString(PreferenceConstants.GOOGLE_KEY);
とやってGoogleのキー値を設定画面から取得していますが、これについては[[設定を保持するIPreferenceStoreを使う>Eclipse/プラグイン開発のTIPS集/GooglePlugin/設定を保持するIPreferenceStoreを使う]]で説明しています。


 
次は上のビジネスロジックを利用する、[[検索結果一覧を表示するビュー>Eclipse/プラグイン開発のTIPS集/GooglePlugin/検索結果一覧を表示するビューの作成]]を作成します。



----
この記事は
#vote(おもしろかった[1],そうでもない[0])
#vote(おもしろかった[2],そうでもない[0])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS