for Developer

独自の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をcomponentnameに記述します。

エンジンIDとは、エンジンの識別子でクライアントがどのエンジンにリクエストするのかを指定するのに使用します。

<components> 
  <component 
    name="エンジンID" 
    class="先ほど作ったWisdomEngineの実装クラス" 
  /> 
</components> 
  • Tomcatを起動

src/main/webappをコンテキストRootとして起動します。 もしくはmavenでwarを作成しデプロイ後起動します。

(WisdomEngineServer_blankにEclipseのTomcatプラグイン用の設定ファイルとpom.xmlがついています)

4. エンジンの登録

Publisherに対してURLを登録します。(http://サーバ名/コンテキスト名/エンジンID)

詳細は、Server Settingsを参照してください。

クライアントサイド

1. 事前準備

サーバサイドと同じように、 ダウンロードのページよりWisdom Engine TemplateのZipファイルをダウンロードします。
ダウンロードしたファイルを解凍し、中にあるWisdomEngineClient_blankをEclipseのプロジェクトとしてインポートします。

2. 独自のエンジンクライアントの実装

クライアントサイドでは、サーバに対してのリクエストを生成する部分と結果を受け取り画面を生成する部分を作成します。

サーバに対してのリクエストを生成する部分の作成

  • 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 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) { 
    // エラー処理を行います。何もしなくても問題ないです。
  } 
} 

3. プラグインの設定

拡張ポイントの設定

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に指定したアイコンが表示されます。

プラグインのID変更

エンジンへリクエストをおくり、その結果を表示します。

org.ashikunep.yukara.wisdom.client.ui.ISuggestionViewFactoryの実装クラス作成のgetSummaryの内容と org.ashikunep.yukara.wisdom.client.ui.ISuggestionViewDetailFactoryの実装クラスのgetSummaryの内容が表示されます。

プラグインのID変更

リンクをクリックすると詳細Viewで org.ashikunep.yukara.wisdom.client.ui.ISuggestionViewDetailFactory の実装クラスのcreatePartControlで作られる画面が表示されます。

プラグインのID変更