Eclipse/プラグイン開発のTIPS集/GooglePlugin/実際の検索ロジックをビューに実装
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
***概要 [#l6465af6]
さて[[前回>Eclipse/プラグイン開発のTIPS集/GooglePlugin/検...
public void search(String text) ;
をテスト実装したところまで行いました。今回はいよいよその...
この検索メソッドはエディタのポップアップメニューなどから...
またこのメソッドは処理時間が長いことが予想されるので、バ...
***スクリーンショット [#n39eed60]
#ref(job.png)
***バックグラウンドで処理を行うクラス org.eclipse.core.ru...
さてEclipseを使っているとよく出てくる、先のようなバックグ...
protected abstract IStatus run(IProgressMonitor monitor);
を実装すればOKです。このメソッドにはバックグラウンドで...
***検索メソッドの実装 [#ya55418f]
さて、検索メソッドは以下のようにしました。
/**
* 引数の文字列で検索を行うメソッドです。 検索結果をビュ...
*
* @param text 検索文字列
*/
public void search(final String text) {
Job job = new SearchJob("Google Search", text, viewer)
// ダイアログを出す
job.setUser(true);
job.schedule();
}
searchメソッド内でJobクラス(のサブクラス)を作成し、job.sc...
Jobの実装方法については[[バックグラウンドで処理を実行する...
結果的にSearchJobのソースはこんな感じになっています。
***ソースコード [#ecb57aa1]
class SearchJob extends Job {
private final Logger logger = Logger.getLogger(SearchJ...
private String text;
private ResultElement[] elements;
private final TableViewer viewer;
/**
* @param name
*/
public SearchJob(String name, String text, TableViewer...
super(name);
this.text = text;
this.viewer = viewer;
}
public IStatus run(IProgressMonitor monitor) {
logger.debug("run(IProgressMonitor) - start");
// タスクは全体で10単位
monitor.beginTask("「" + text + "」でGoogleを検索中....
try {
String searchText = null;
// スペルチェック開始
monitor.subTask("スペルチェック");
monitor.worked(1); // ちょっと終わったので+1
searchText = GooglePlugin.getDefault().getSpelling...
monitor);
monitor.worked(3); // ちょっと終わったので+3
// スペルチェック終了
if (monitor.isCanceled()) {
logger.debug("run(IProgressMonitor) - end");
return Status.CANCEL_STATUS;
}
// 検索開始
monitor.subTask("検索中");
monitor.worked(1); // ちょっと終わったので+1
// 設定画面より、Google Keyを取得
String myGoogleKey = GooglePlugin.getDefault().get...
.getString(PreferenceConstants.GOOGLE_KEY);
GoogleSearchResult result = GoogleCorePlugin.getDe...
myGoogleKey, searchText);
monitor.worked(3); // ちょっと終わったので+3
// 検索終了
logger.debug("run(IProgressMonitor) - 検索終了");
if (monitor.isCanceled()) {
logger.debug("run(IProgressMonitor) - end");
return Status.CANCEL_STATUS;
}
elements = result.getResultElements();
logger.debug("run(IProgressMonitor) - Elementsの取...
} catch (CoreException e) {
logger.error("run(IProgressMonitor)", e);
return e.getStatus();
}
// ////////////////////////
// 結果が0件でない場合は描画する。
// UIスレッドに委譲
if (elements.length != 0) {
checkAsyncExec(new Runnable() {
public void run() {
logger.debug("run() - start");
// Viewerがユーザによって消されたしまった場合
if (!viewer.getTable().isDisposed()) {
viewer.setInput(elements);
}
logger.debug("run() - end");
}
});
} else {
// 結果が0件の場合はエラーダイアログ。
checkAsyncExec(informationThread("検索結果は0件で...
}
// ////////////////////////
monitor.worked(2); // ちょっと終わったので+2
monitor.done(); // 全部終わった
logger.debug("run(IProgressMonitor) - end");
return Status.OK_STATUS;
}
private Runnable informationThread(final String messag...
return new Runnable() {
public void run() {
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getActiveWor...
MessageDialog.openInformation(window.getShell(),...
message);
}
};
}
&aname(uithread);
private boolean checkAsyncExec(Runnable thread) {
if (!Display.getDefault().isDisposed()) {
Display.getDefault().asyncExec(thread);
return true;
} else {
return false;
}
}
}
***タスクの開始 monitor.beginTask() メソッド [#m1c6c010]
monitor.beginTask("「" + text + "」でGoogleを検索中...",...
***タスクが進行すると monitor.worked() メソッド [#k50e51ba]
monitor.worked(1); // ちょっと終わったので+1
***タスクが完了すると monitor.done() メソッド [#s14e2dc1]
monitor.worked(1); // ちょっと終わったので+1
***サブタスク monitor.subTask() メソッド [#m79be349]
monitor.done(); // 全部終わった
***キャンセルしたときの処理 [#e95c36b2]
***メソッドの戻り値について [#w6d6eb4d]
return Status.OK_STATUS;
return Status.CANCEL_STATUS;
return e.getStatus();
***スペルチェックする [#qeefa8ff]
***Google検索する [#xe74f0ba]
***検索結果をGUIにセットする [#g38bc6fd]
次はこのビューのメソッドを実行する、[[ポップアップメニュ...
----
この記事は
#vote(おもしろかった[2],そうでもない[2])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
***概要 [#l6465af6]
さて[[前回>Eclipse/プラグイン開発のTIPS集/GooglePlugin/検...
public void search(String text) ;
をテスト実装したところまで行いました。今回はいよいよその...
この検索メソッドはエディタのポップアップメニューなどから...
またこのメソッドは処理時間が長いことが予想されるので、バ...
***スクリーンショット [#n39eed60]
#ref(job.png)
***バックグラウンドで処理を行うクラス org.eclipse.core.ru...
さてEclipseを使っているとよく出てくる、先のようなバックグ...
protected abstract IStatus run(IProgressMonitor monitor);
を実装すればOKです。このメソッドにはバックグラウンドで...
***検索メソッドの実装 [#ya55418f]
さて、検索メソッドは以下のようにしました。
/**
* 引数の文字列で検索を行うメソッドです。 検索結果をビュ...
*
* @param text 検索文字列
*/
public void search(final String text) {
Job job = new SearchJob("Google Search", text, viewer)
// ダイアログを出す
job.setUser(true);
job.schedule();
}
searchメソッド内でJobクラス(のサブクラス)を作成し、job.sc...
Jobの実装方法については[[バックグラウンドで処理を実行する...
結果的にSearchJobのソースはこんな感じになっています。
***ソースコード [#ecb57aa1]
class SearchJob extends Job {
private final Logger logger = Logger.getLogger(SearchJ...
private String text;
private ResultElement[] elements;
private final TableViewer viewer;
/**
* @param name
*/
public SearchJob(String name, String text, TableViewer...
super(name);
this.text = text;
this.viewer = viewer;
}
public IStatus run(IProgressMonitor monitor) {
logger.debug("run(IProgressMonitor) - start");
// タスクは全体で10単位
monitor.beginTask("「" + text + "」でGoogleを検索中....
try {
String searchText = null;
// スペルチェック開始
monitor.subTask("スペルチェック");
monitor.worked(1); // ちょっと終わったので+1
searchText = GooglePlugin.getDefault().getSpelling...
monitor);
monitor.worked(3); // ちょっと終わったので+3
// スペルチェック終了
if (monitor.isCanceled()) {
logger.debug("run(IProgressMonitor) - end");
return Status.CANCEL_STATUS;
}
// 検索開始
monitor.subTask("検索中");
monitor.worked(1); // ちょっと終わったので+1
// 設定画面より、Google Keyを取得
String myGoogleKey = GooglePlugin.getDefault().get...
.getString(PreferenceConstants.GOOGLE_KEY);
GoogleSearchResult result = GoogleCorePlugin.getDe...
myGoogleKey, searchText);
monitor.worked(3); // ちょっと終わったので+3
// 検索終了
logger.debug("run(IProgressMonitor) - 検索終了");
if (monitor.isCanceled()) {
logger.debug("run(IProgressMonitor) - end");
return Status.CANCEL_STATUS;
}
elements = result.getResultElements();
logger.debug("run(IProgressMonitor) - Elementsの取...
} catch (CoreException e) {
logger.error("run(IProgressMonitor)", e);
return e.getStatus();
}
// ////////////////////////
// 結果が0件でない場合は描画する。
// UIスレッドに委譲
if (elements.length != 0) {
checkAsyncExec(new Runnable() {
public void run() {
logger.debug("run() - start");
// Viewerがユーザによって消されたしまった場合
if (!viewer.getTable().isDisposed()) {
viewer.setInput(elements);
}
logger.debug("run() - end");
}
});
} else {
// 結果が0件の場合はエラーダイアログ。
checkAsyncExec(informationThread("検索結果は0件で...
}
// ////////////////////////
monitor.worked(2); // ちょっと終わったので+2
monitor.done(); // 全部終わった
logger.debug("run(IProgressMonitor) - end");
return Status.OK_STATUS;
}
private Runnable informationThread(final String messag...
return new Runnable() {
public void run() {
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getActiveWor...
MessageDialog.openInformation(window.getShell(),...
message);
}
};
}
&aname(uithread);
private boolean checkAsyncExec(Runnable thread) {
if (!Display.getDefault().isDisposed()) {
Display.getDefault().asyncExec(thread);
return true;
} else {
return false;
}
}
}
***タスクの開始 monitor.beginTask() メソッド [#m1c6c010]
monitor.beginTask("「" + text + "」でGoogleを検索中...",...
***タスクが進行すると monitor.worked() メソッド [#k50e51ba]
monitor.worked(1); // ちょっと終わったので+1
***タスクが完了すると monitor.done() メソッド [#s14e2dc1]
monitor.worked(1); // ちょっと終わったので+1
***サブタスク monitor.subTask() メソッド [#m79be349]
monitor.done(); // 全部終わった
***キャンセルしたときの処理 [#e95c36b2]
***メソッドの戻り値について [#w6d6eb4d]
return Status.OK_STATUS;
return Status.CANCEL_STATUS;
return e.getStatus();
***スペルチェックする [#qeefa8ff]
***Google検索する [#xe74f0ba]
***検索結果をGUIにセットする [#g38bc6fd]
次はこのビューのメソッドを実行する、[[ポップアップメニュ...
----
この記事は
#vote(おもしろかった[2],そうでもない[2])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: