|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IBM Lotus Sametime Connect 7.5.1への辞書機能の追加 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Kulvir Singh Bhogal (kbhogal@us.ibm.com), IBM Software Services for WebSphere, IBM Corporation
IBM Lotus Sametime Connect 7.5.1はEclipseベースであるため、その機能を拡張してカスタム機能を追加できます。この記事では、Lotus Sametime Connect用のDictionaryプラグインを最初から作成する方法について説明します。使用中のDictionaryプラグインのスクリーン・ショットを図1に、表示された単語の意味を図2に示します。 図1.「Lookup in Dictionary」コンテキスト・メニューのプレビュー ![]() 図2. Dictionaryプラグインによって表示された単語の意味 ![]() Lotus Sametime Connectユーザーに、新しいコンテキスト・メニュー・オプション「Lookup in Dictionary」が提供されます。これは、Lotus Sametime Connectに本来組み込まれている機能ではありません。”単語の意味を検索する”機能は、IBM alphaWorksプロジェクトのDictionary and Thesaurus API for Javaによってもたらされたものです(「リソース」参照)。 役に立つLotus Sametimeプラグインを作成できますが、それは副次作用に過ぎません。この記事の目的は、com.ibm.collaboration.realtime.browser.BrowserEventListenerLotus Sametime拡張ポイントの活用方法およびcom.ibm.swt.xulrunner.browser.SWTXULRunnerBrowserオブジェクトの使用方法を説明することです。
alphaWorks Dictionary and Thesaurus API for Java(JADT)の使用ユーザーが単語を右クリックし、「Lookup in Dictionary」コンテキスト・メニュー・オプションを選択すると、この記事で説明するDictionaryプラグインはDictionary and Thesaurus API for Java (JADT)を使用し、単語の意味を検索します。 JADTは、Javaアプリケーションで言語機能にアクセスするためのクラス・ライブラリーです。JADTの詳細については、developerWorksの連載記事「Getting started with JADT (US)」に記載されています。JADTは「辞書と非構造的な単語、およびそれらに関する情報にアクセスする透過的でJava中心の方法」を提供します。JADTにより、Lotus SametimeプラグインなどのJavaアプリケーションは、使用する辞書/データ・プロバイダーから自分自身を抽象化することができます。この抽象化のレイヤーを用いることにより、利用側のアプリケーションは、使用する辞書プロバイダーを簡単に交換できます。これを行うために、辞書サービス用のユーザー・インターフェースを使用するクライアント・アプリケーションを変更する必要はありません。この分離は、バックエンドの言語データへのドライバー・ベースのアクセスを提供するJADTのアーキテクチャーによって可能になります。JADTアーキテクチャーとこの分離に関する説明図を図3に示します。 図3. JADTアーキテクチャー ![]() JADTを使用することにより、アプリケーションは単語の意味、発音、同意語、反意語、および他の多数の言語データにアクセスできます。取得できる言語データの詳細については、JADTの連載記事を参照してください。以降の例では、単語の意味、発音、および品詞(たとえば、形容詞、名詞、動詞、副詞など)を取得します。 JADTアーキテクチャーにより、クライアントに関する課題だけでなく、辞書プロバイダーに関する課題も解決されます。APIにより、辞書プロバイダーはドライバー・サイドのインターフェースをインプリメントすることで、JADTプロバイダーとして動作します。この記事では、辞書プロバイダーのインプリメント方法については触れません。代わりに、JADTに含まれるデフォルト・ドライバーの1つであるJADTTextDriverを使用します。このドライバーは、テキスト形式で保存されている言語データを収集します。 alphaWorks (US) からJADTをダウンロードおよびインストールできます。 jar xvfコマンドを使用して、ご使用になっているハード・ディスク上のディレクトリーにJADTInstaller.jarファイルを抽出します。埋め込まれたJARファイルjadt.jarおよびjadttextdriver.jarが必要です。また、jadt_en_en.txtファイルの場所を記録します。これは、抽出したインストーラーJARファイル内にあります。このファイルをテキスト・エディターで開き、内容を確認するとよいでしょう。このテキスト・ファイルは検索する単語の意味を保持していて、データ・ストアとして機能します。 使用するテキスト・ファイルを見るとわかるように、デフォルトのテキスト・ドライバーはすべての機能を装備した辞書プロバイダーではありません。英語の多数の単語とその意味がテキスト・ファイルから抜けています。しかし、JADTの利点は、独自のドライバーを作成することにより、データベースへのアクセスやWebサービスの呼び出しを実行したり、他のメカニズムを用いて辞書の定義などの言語情報を収集できることです。 com.devworks.example.dictionary.DictionaryUtilityクラスについて詳しく調べてみましょう。プラグインはこのクラスを使用してJADTとやり取りします。このクラスは、loadDictionary静的メソッドとgetMeanings静的メソッドの2つメソッドを持ちます。loadDictionary静的メソッドをリスト1に示します。 リスト1. loadDictionary静的メソッド
JADT APIの複雑さを詳しく説明するのは避けますが、このメソッドの役割はJADTDriverオブジェクトを作成することです。このオブジェクトは、ここで必要としている辞書サービスを含めさまざまなサービスへのアクセスを提供します。このメソッドでは、デフォルト・ドライバーJADTTextDriverを使用することを指定します。これを行うには、factoryオブジェクトからドライバーのインスタンスを取得します。JADTTextDriverオブジェクトから、次の呼び出しを使用してcom.ibm.jadt.Dictionaryオブジェクトを取得します。
上記のメソッド呼び出しでは、両方のパラメーターでenglishが指定されていることに注目してください。JADTは他の言語(たとえば、スペイン語)への変換を行うDictionaryオブジェクトを取得できます。ここでは、単語の意味を英語で返してもらうようにします。 Dictionaryオブジェクトは、dictionaryCacheという静的変数に格納します。これを行うのは、使用するたびにDictionaryオブジェクトをロードするオーバーヘッドを避けるためです。後で使用するときのために、これをメモリー内に保管しておきます。 Dictionaryオブジェクトがロードされると、定義を知りたい単語の意味を検索できます。この機能は、DictionaryUtilityクラスのgetMeanings静的メソッドによって実現されます(リスト2参照)。 リスト2. getMeanings静的メソッド
getMeaningsメソッドはJADT DictionaryオブジェクトのgetMeaningメソッドに基づいて、指定された単語の意味を背後にある辞書プロバイダーから検索します。メソッドに返されるのは、DictionaryRecordオブジェクトです。このオブジェクトは、JDBCレルムのResultSetオブジェクトにたいへんよく似ています。開発者はDictionaryRecordオブジェクトに格納されたレコードを反復処理し、単語の意味を含むストリングを連結します。DictionaryRecordオブジェクトの以下のメソッドを活用します。
単語の意味を構築した後、getMeaningsメソッドを通じて、生成したストリングを呼び出し側のLotus Sametimeプラグイン・メソッドに渡します。 Lotus Sametimeプラグイン開発環境のセットアップ Eclipse 3.2.2を使用してLotus Sametime 7.5.1プラグインを開発およびテストするには、Eclipse設定のいくつかを変更する必要があります。最初のステップでは、ターゲット・プラットフォームをEclipseからLotus Sametimeに変更します。 ターゲット・プラットフォームはEclipse設定として指定されています。ターゲット・プラットフォームを変更するには、「Window」->「Preferences」を選択します。左側のペインで「Plug-in Development」オプションを展開し、「Target Platform」を選択します。 「location」フィールドで、「Browse」ボタンを使用してLotus Sametime Connectがインストールされているディレクトリーに移動することにより、Lotus Sametime Connectのロケーションを指定します(デフォルトではC:\Program Files\IBM\Sametime Clientです)。「Reload」をクリックします。com.ibm.collaboration.realtimeプラグインがロードされるのを確認し、「OK」をクリックします。 トラブルシューティングのヒントとして、Lotus Sametimeプラグイン(com.ibm.collaboration.realtime)が図4のように表示されない場合は、ブラウザー・ウィンドウで指定したターゲット・プラットフォームのロケーションに移動します。ターゲット・プラットフォームのディレクトリーには、プラグイン・ディレクトリーとフィーチャー・ディレクトリーがあります。ターゲット・プラットフォームのディレクトリーにプラグイン・ディレクトリーとフィーチャー・ディレクトリーがない場合は、Lotus Sametime Connectのターゲット・プラットフォームとして、正しいロケーションを使用していないことになります。このような場合は、ロケーションをLotus Sametimeクライアントの正しいロケーションに変更してください。 図4. Eclipseのターゲット・プラットフォームをLotus Sametimeに変更![]()
Dictionaryプラグインの開始それでは、Dictionaryプラグインの作成および構成手順を説明します。最初に、com.devworks.example.dictionaryという名前の新規プラグイン・プロジェクトを作成します。「File」->「New」->「Project」を選択して、新規プロジェクトを作成してください。「New Project」ウィザードが表示されます(図5参照)。「New Project」ウィザードで、「Plug-in Project」を選択し、「Next」をクリックします。 図5.「New Project」ウィザードでの「Plug-in Project」の選択![]() 次に、「New Plug-in Project」ウィザードが表示されます(図6参照)。プロジェクト名として「com.devworks.example.dictionary」を入力し、「Next」をクリックします。 図6. 新規プラグイン・プロジェクト名の指定![]() 次のウィンドウで(図7参照)、プラグイン・オプション「This plug-in will make contributions to the UI」の選択を解除します。「Finish」をクリックします。 図7. プラグインをUIに追加しないことの指定![]()
DictionaryプラグインへのDictionaryコードのインポートDictionaryプラグインでは、JADT JARファイルおよびDictionaryUtilityクラスへのアクセスを可能にする必要があります。このため、必要なJADT JARファイルをDictionaryプラグインのクラスパスおよびDictionaryUtility.javaファイルに追加しなければなりません。DictionaryUtility.javaクラスは、この記事の『ダウンロード』セクションにあるプロジェクトZIPファイルから入手できます。JADTインストーラーJARファイルを抽出したディレクトリーと同じディレクトリーに、このZIPファイルを抽出してください。 まず、「File」->「Import」を選択します。「Import」ウィザードが表示されます(図8参照)。「File System」を選択し、「Next」をクリックします。 図8. ファイル・システムからのDictionaryコードのインポート![]() 次に、JADT JARが含まれるディレクトリーを指定します。前にダウンロードしたJADTを抽出したディレクトリーから、インポートするJADT JAR (jadt.jarおよびjadttextdriver.jar)を選択し、さらに辞書ソース・ファイル(jadt_en_en.txt)を選択します。「Into folder」の値として「com.devworks.example.dictionary」を指定します。「Finish」をクリックしてインポートを実行します。 DictionaryUtility.javaクラス・ファイルを取り込むために、このプロセスを少し変更して繰り返す必要があります。「Into folder」として「com.devworks.example.dictionary/src/com/devworks/example/dictionary」を指定します(図9参照)。 図9. ソース・フォルダーへのDictionaryUtility.javaのインポート![]() 次に、いまインポートしたJARファイルをプラグインのクラスパスに追加します。META-INF/MANIFEST.MFファイルを開きます。これにより、プラグインのマニフェスト・エディターが開かれます。プラグインのマニフェスト・エディターで「Runtime」タブを選択します(図10参照)。「Runtime」タブの「Classpath」セクションで、「Add」ボタンをクリックします。 図10. プラグインのランタイム・クラスパスの変更![]() 「Add」ボタンをクリックすると、「JAR Selection」ウィンドウが表示されます(図11参照)。jadt.jarおよびjadttextdriver.jarを強調表示します。この2つのJARファイルが存在しない場合は、これらのファイルをDictionaryプラグイン・プロジェクトにインポートしたかどうか確認します。 図11. Dictionaryプラグインを補助するJARファイルの選択![]() プラグインのマニフェスト・エディターのページを保存して閉じます。 Dictionaryプラグインでは、MANIFEST.MFファイルでそのプラグインの依存関係を定義する必要があります。幸い、プラグインのマニフェスト・エディターを使用すると、このプロセスを簡素化できます。このエディターを使用して、org.eclipse.jface、com.ibm.swt.xulrunner、com.ibm.collaboration.realtime.browserの各プラグインを、作成中のプラグインが依存するプラグインとして定義します。これを行うには、まずMETA-INF/MANIFEST.MFファイルを開きます。次に、「Dependency」タブを開きます。 ここで、org.eclipse.jfaceプラグインをプラグイン依存関係として追加するプロセスを実行します。最初に、「Add」ボタンをクリックします。「Plug-in Selection」ウィンドウが表示されます。プラグインのリストの範囲を狭めるために、「org.eclipse.jface」と入力します。選択可能な3つのプラグインが表示されます(図12参照)。org.eclipse.jfaceプラグインを選択します。 図12.「Plug-in selection」ウィンドウ![]() この手順を繰り返し、com.ibm.swt.xulrunnerプラグインとcom.ibm.collaboration.realtime.browserプラグインをプラグイン依存関係として追加します。プラグインのマニフェスト・エディターを保存して閉じます。 プラグインがアクティブ化されたときに、辞書データを持つDictionaryオブジェクトの生成を促進するには、プラグインの作成時に自動的に生成されたcom.devworks.example.dictionary.Activatorクラスのstartメソッドに、DictionaryUtilityクラスのloadDictionary静的メソッド呼び出しを含めます。そして、Dictionaryオブジェクトを用いて、DictionaryUtilityクラスの静的なdictionaryCache変数を生成します。 開発者は、startメソッドでEclipse APIを使用して、JADTTextDriverがそのデータ・ストアとして必要とするファイルのロケーションを動的に検索します。データ・ファイルが見つかった後、構成ファイルのロケーションをDictionaryUtilityのloadDictionaryメソッドに渡します。リスト3のコードは、JARファイルにプラグインが格納されていないという前提に基づいています。 リスト3. 辞書のロケーション
BrowserEventListener拡張ポイントを使用したチャット・ウィンドウ・イベントの捕捉この時点で、辞書の意味を調べるためのすべてのものが揃っています。しかし、辞書機能をLotus Sametime Connectユーザーに見やすく公開する方法については、まだ解決していません。辞書をLotus Sametimeユーザーとやり取りさせる方法が必要です。これを行うには、com.ibm.collaboration.realtime.BrowserEventListener拡張ポイントを使用します。BrowserEventListener拡張ポイントを使用すると、単語を強調表示して右クリックするイベントと、単語を検索してその意味を表示する以降のアクションとをプログラマチックに関連付けることができます。 com.ibm.collaboration.realtime.BrowserEventListener拡張ポイントは、イベント(org.w3c.dom.events.Event)をトリガーするeventType (この場合は、ユーザーが右クリックによってコンテキスト・メニューを開いたことを示すコンテキスト・メニューです)を定義します。この拡張ポイントは、そのイベントを捕捉するクラスも定義します。独自のクラスでこのイベントを捕捉するには、com.ibm.collaboration.realtime.browser.BrowserListenerクラスを拡張します。図13のクラス図に、BrowserListenerとcom.devworks.example.dictionary.DictionaryBrowserListenerクラスの関係を示します。 図13. DictionaryBrowserListenerクラスのクラス階層![]() 強調表示した単語をユーザーが右クリックしたときにイベントをトリガーするには、contextmenu型のeventTypeを定義します。また、Lotus Sametimeユーザーに表示するコンテキスト・メニュー・オプションのラベルも定義します。ここでは、メニュー・オプションを「Lookup in Dictionary」にします。この拡張の完全な定義をリスト4に示します。 リスト4. 拡張の定義
この拡張は、plugin.xmlというファイルで定義します。「File」->「New」->「File」を選択し、plugin.xmlファイルを作成します。「New File」ウィザードが表示されます(図14参照)。ファイルに「plugin.xml」という名前を付け、com.devworks.example.dictionaryフォルダーに保存します。 図14. DictionaryBrowserListenerクラスのクラス階層![]() これで、拡張の定義が完了したので、com.devworks.example.dictionary.DictionaryBrowserListenerクラスのコードを扱うことができます。DictionaryBrowserListenerクラス(一部をリスト5に表示)には、com.ibm.collaboration.realtime.browser.Browserクラスのインスタンスが含まれています。Browserインスタンスから、getRealBrowser()メソッドを使用して、com.ibm.swt.xulrunner.browser.SWTXULRunnerBrowserオブジェクトにアクセスできます。 リスト5. DictionaryBrowserListenerクラス
SWTXULRunnerBrowserオブジェクトは、チャット・ウィンドウの内部でチャットが表示される領域を表します(図15参照)。 図15. チャット・ウィンドウ内部の領域を表すSWTXULRunnerBrowserオブジェクト![]() SWTXULRunnerBrowserクラスを使用すると、イベント(DictionaryBrowserListenerによって処理されるイベント)が呼び出された瞬間に強調表示されていたテキストを取得できます。図16では、「cafeteria」が強調表示され、その後で「Dictionary」コンテキスト・メニューが選択されています。 図16.「Lookup in Dictionary」コンテキスト・メニュー・オプションの使用![]() 次に、リスト6のコードを使用して、強調表示されたテキストをhandleEventメソッドで取得します。強調表示されたテキストの取得には、xulrunner APIを使用します。 リスト6. handleEventメソッドでのテキストの取得
検索する単語の範囲を狭め、それをwordToLookupストリングに格納した後、DictionaryUtilityクラスの静的メソッドgetMeaningsに基づいて、JADTを使用して意味を取得します。
意味を取得した後は、org.eclipse.swt.widgets.MessageBoxで意味を表示します(図17参照)。 図17. 辞書の意味を表示するMessageBoxウィジェット![]() MessageBox内に意味をレンダリングするには、リスト7に示すコードを使用します。 リスト7. MessageBox内での意味のレンダリング
サンプル・アプリケーションの実行Eclipse 3.2.2でプラグインをテストするには、「Run」->「Run」を選択します。次に、「Eclipse Application」オプションを右クリックし、「New」を選択します(図18参照)。 図18. Eclipse 3.2.2環境でLotus Sametimeを実行するための新規Eclipse構成の作成![]() 「Run Configuration」ダイアログ・ボックスでデフォルト値を受け入れ、「Run」をクリックします。
まとめこの記事では、IBM Lotus Sametimeクライアントに辞書機能を追加する、IBM Lotus Sametime Connectの役に立つプラグインの作成方法を学習しました。この機能を実現するために、Lotus Sametime拡張ポイントのcom.ibm.collaboration.realtime.browser.BrowserEventListenerを活用し、com.ibm.swt.xulrunner.browser.SWTXULRunnerBrowserオブジェクトを使用しました。また、この記事では、IBM alphaWorksが提供するDictionary and Thesaurus API for Javaを使用して、言語機能をLotus Sametime Connectアプリケーションに追加する方法についても説明しました。 ダウンロード
リソース学習
製品とテクノロジーの入手
ディスカッション
筆者について(原文のまま)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||