独自のWisdomEngineをつくる
- ゴール
- 最低限の動作をするエンジンの作成
- 独自のエンジンを作成するためにやるべきことの理解
- 前提知識
- Eclipseのプラグインの作り方をかじったことのある(SWTを知らなければ画面は作れません)
- Webアプリの起動ができる(起動方法は詳しく説明しません)
- 用意する環境
- WisdomClientがインストールされたEclipse(インストール方法はGetting Startを参照してください)
- WisdomServerが動く環境(構築方法はWisdom Server参照ください)
1. 事前準備
ダウンロードのページよりWisdom Engine TemplateのZipファイルをダウンロードします。
ダウンロードしたファイルを解凍し、中にあるWisdomEngineServer_blankをEclipseのプロジェクトとしてインポートします。
2. 独自のエンジンの実装
独自のエンジンの実装を作成します。
インターフェイス org.ashikunep.yukara.wisdom.server.engine.WisdomEngine を実装します。 サンプルの実装がプロジェクトの src/main/java/testengine/TestEngine.java に配置されているので、 そちらも参照してください。
このクラスは、クライアントから送られてきた文字列を元に結果を返します。
public class TestEngine implements WisdomEngine {
public String proceed(String query) throws EngineExecutionException {
return "ここで結果を返す";
}
}
3. 起動
- 作成したクラスをエンジンとして設定
作ったクラスを設定ファイルsrc/main/resources/app.diconに登録します。
エンジンIDをcomponentのnameに記述します。
エンジンIDとは、エンジンの識別子でクライアントがどのエンジンにリクエストするのかを指定するのに使用します。
<components>
<component
name="エンジンID"
class="先ほど作ったWisdomEngineの実装クラス"
/>
</components>
- Tomcatを起動
src/main/webappをコンテキストRootとして起動します。 もしくはmavenでwarを作成しデプロイ後起動します。
(WisdomEngineServer_blankにEclipseのTomcatプラグイン用の設定ファイルとpom.xmlがついています)
1. 事前準備
サーバサイドと同じように、
ダウンロードのページよりWisdom Engine TemplateのZipファイルをダウンロードします。
ダウンロードしたファイルを解凍し、中にあるWisdomEngineClient_blankをEclipseのプロジェクトとしてインポートします。
サーバに対してのリクエストを生成する部分の作成
- org.ashikunep.yukara.wisdom.client.core.IQueryContextの実装クラスを作成
このクラスは、サーバに問い合わせを行う際のリクエストを表します。 サンプルの実装がプロジェクトの src/testengine/TestClientQueryContext.java に配置されているので、 そちらも参照してください。
public class TestClientQueryContext implements IQueryContext {
public String getQuery() {
return "サーバーに投げたい情報を書きます。";
}
public Object getKeyObject() {
return null;// 今回は無視します。詳細はJavaDocを見てください。
}
}
- org.ashikunep.yukara.wisdom.client.core.IContextAnalyzerの実装クラスを作成
ここでは先ほど作ったIQueryContextの実装クラスを返します。 サンプルの実装がプロジェクトの src/testengine/TestClientContextAnalyzer.java に配置されているので、 そちらも参照してください。
public class TestClientContextAnalyzer implements IContextAnalyzer{
public List<? extends IQueryContext> getQueries(IQuestionContext context)
throws ContextAnalyzeException {
return Arrays.asList(new TestClientQueryContext());
}
}
結果を受け取り画面を生成する部分の作成
- org.ashikunep.yukara.wisdom.client.ui.ISuggestionViewDetailFactoryの実装クラス作成
このクラスは結果の要約と表示用画面の生成を行います。 サンプルの実装がプロジェクトの src/testengine/TestClientViewDetailFactory.java に配置されているので、 そちらも参照してください。
public class TestClientViewDetailFactory implements ISuggestionViewDetailFactory{
public void createPartControl(IWorkbenchPartSite site, Composite composite, IViewHandler handler) {
// ここで画面を作ります。
Label label = new Label(composite, SWT.NONE);
label.setText("ここで画面を作ります");
label.setLayoutData(new GridData(GridData.FILL_BOTH));
}
public String getSummary() {
return "結果個別の要約を返します。";
}
}
- org.ashikunep.yukara.wisdom.client.ui.ISuggestionViewFactoryの実装クラス作成
このクラスは結果内容画面を作るクラス(先ほど作ったISuggestionViewDetailFactoryの実装クラス)を返します。 サンプルの実装がプロジェクトの src/testengine/TestClientViewFactory.java に配置されているので、 そちらも参照してください。
public class TestClientViewFactory implements ISuggestionViewFactory {
public List extends ISuggestionViewDetailFactory> createResultViewer() {
return Arrays.asList(new TestClientViewDetailFactory());
}
public String getSummary() {
return "結果全体の要約を返します。";
}
}
- org.ashikunep.yukara.wisdom.client.ui.ISuggestionAnalyzerの実装クラス作成
このクラスではISuggestionResultの中身に応じてISuggestionViewFactoryを作ります。 ここでは先ほど作ったISuggestionViewFactoryの実装クラスを返します。 サンプルの実装がプロジェクトの src/testengine/TestClientSuggestionAnalyzer.java に配置されているので、 そちらも参照してください。
引数のISuggestionResultのgetContentsからサーバから受け取った結果情報を取得できます。
public class TestClientSuggestionAnalyzer implements ISuggestionAnalyzer {
public ISuggestionViewFactory createFactory(ISuggestionResult result) {
String contents = result.getContents(); // これがサーバから帰ってきた内容です。
return new TestClientViewFactory();
}
public void catchError(ISuggestionResult result) {
// エラー処理を行います。何もしなくても問題ないです。
}
}
拡張ポイントの設定
plugin.xmlに先ほど作成したクラスについて登録します。
リクエストを投げるIContextAnalyzerの実装クラスを拡張ポイントorg.ashikunep.yukara.wisdom.client.core.ContextAnalyzerに登録します。
<extension point="org.ashikunep.yukara.wisdom.client.core.ContextAnalyzer">
<ContextAnalyzer
class="IQueryContextの実装クラス名を書きます"
id="IDをかきます。classと同じ内容を書いておけばよいです"
name="このエンジンクライアントの名前を書きます"
engineId="エンジンIDを指定します。サーバ側のものと合わせます"
summary="簡単な説明文を書きます"
icon="icons/hoge.png"
>
</ContextAnalyzer>
</extension>
結果を受け取るISuggestionAnalyzerの実装クラスを拡張ポイントorg.ashikunep.yukara.wisdom.client.ui.SuggestionAnalyzerに登録します。
<extension point="org.ashikunep.yukara.wisdom.client.ui.SuggestionAnalyzer">
<SuggestionAnalyzer
class="ISuggestionAnalyzerの実装クラス名を書きます"
id="IDをかきます。classと同じ内容を書いておけばよいです"
engineId="エンジンIDを指定します。サーバ側のものと合わせます"
/>
</extension>
動作確認
Eclipse Applicationをデバック実行します。
起動後QueryWindowを開きます。 先ほど作ったContextAnalyzerが追加されているため、 plugin.xmlのContextAnalyzerのiconに指定したアイコンが表示されます。
エンジンへリクエストをおくり、その結果を表示します。
org.ashikunep.yukara.wisdom.client.ui.ISuggestionViewFactoryの実装クラス作成のgetSummaryの内容と org.ashikunep.yukara.wisdom.client.ui.ISuggestionViewDetailFactoryの実装クラスのgetSummaryの内容が表示されます。
リンクをクリックすると詳細Viewで org.ashikunep.yukara.wisdom.client.ui.ISuggestionViewDetailFactory の実装クラスのcreatePartControlで作られる画面が表示されます。


