本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

IBM Lotus Sametime Connect 7.5.1への辞書機能の追加

Kulvir Bhogal (kbhogal@us.ibm.com), Java Services Consultant, IBM Corporation
Kulvir Singh Bhogal works as an IBM consultant, devising and implementing Java-centric solutions at customer sites across the nation. You can contact Kulvir at kbhogal@us.ibm.com.
Mark Talbot (talbotm@us.ibm.com), Developer, Industry Solutions, IBM
Mark Talbot works for IBM as a developer for Industry Solutions. You can reach Mark at talbotm@us.ibm.com.

概要: IBM Lotus Sametime 7.5.1のEclipseベースの特性を活用する方法を理解しましょう。IBM Lotus Sametime Connectに辞書機能を追加するプラグインを作成します。また、Dictionary and Thesaurus API for Javaを使用して、Lotus Sametimeクライアント・アプリケーションに言語機能を追加する方法を学習します。

日付:  2007年 5月 30日
レベル:  中級 この記事の原文:  英語
アクティビティー: 1563 ビュー
お気軽にご意見・ご感想をお寄せください: 


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サービスの呼び出しを実行したり、他のメカニズムを用いて辞書の定義などの言語情報を収集できることです。

DictionaryUtilityクラス

com.devworks.example.dictionary.DictionaryUtilityクラスについて詳しく調べてみましょう。プラグインはこのクラスを使用してJADTとやり取りします。このクラスは、loadDictionary静的メソッドとgetMeanings静的メソッドの2つメソッドを持ちます。loadDictionary静的メソッドをリスト1に示します。


リスト1. loadDictionary静的メソッド
public static Dictionary loadDictionary(String dictionaryLocation) 
{
    try {
        Class.forName("com.ibm.jadtdrivers.TextDriver.JADTTextDriverFactory");
        JADTDriverFactory factory = 
        JADTDriverFactoryManager.getJADTDriverFactory("JADTTextDriverFactory");
        JADTDriver driver = factory.createJADTDriver();
        driver.setProperty("JADTTextDriverDir",dictionaryLocation);
        dictionaryCache = driver.getDictionary("english","english");
        dictionaryLoaded = true;
        return dictionaryCache;
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (JADTException e) {
        e.printStackTrace();
    } 
    return null;
}


JADT APIの複雑さを詳しく説明するのは避けますが、このメソッドの役割はJADTDriverオブジェクトを作成することです。このオブジェクトは、ここで必要としている辞書サービスを含めさまざまなサービスへのアクセスを提供します。このメソッドでは、デフォルト・ドライバーJADTTextDriverを使用することを指定します。これを行うには、factoryオブジェクトからドライバーのインスタンスを取得します。JADTTextDriverオブジェクトから、次の呼び出しを使用してcom.ibm.jadt.Dictionaryオブジェクトを取得します。

dictionaryCache = driver.getDictionary("english","english");

上記のメソッド呼び出しでは、両方のパラメーターでenglishが指定されていることに注目してください。JADTは他の言語(たとえば、スペイン語)への変換を行うDictionaryオブジェクトを取得できます。ここでは、単語の意味を英語で返してもらうようにします。

Dictionaryオブジェクトは、dictionaryCacheという静的変数に格納します。これを行うのは、使用するたびにDictionaryオブジェクトをロードするオーバーヘッドを避けるためです。後で使用するときのために、これをメモリー内に保管しておきます。

Dictionaryオブジェクトがロードされると、定義を知りたい単語の意味を検索できます。この機能は、DictionaryUtilityクラスのgetMeanings静的メソッドによって実現されます(リスト2参照)。


リスト2. getMeanings静的メソッド
public static String getMeanings(String wordToLookup)
    {
        String returnString = "";
        if (dictionaryLoaded)
        {
            DictionaryRecord dr = dictionaryCache.getMeaning(wordToLookup);		
            while (dr!=null)
            {
                returnString+= dr.getType() + " " + dr.getPronunciation() 
                + " " + dr.getDescription() + "\n";
                dr=dr.getNextRecord();
            }
            if (returnString.equals("")) returnString = DEFINITION_NOT_FOUND_STR;
            
        }
        else returnString = DICTIONARY_NOT_LOADED;
        return returnString;
    }


getMeaningsメソッドはJADT DictionaryオブジェクトのgetMeaningメソッドに基づいて、指定された単語の意味を背後にある辞書プロバイダーから検索します。メソッドに返されるのは、DictionaryRecordオブジェクトです。このオブジェクトは、JDBCレルムのResultSetオブジェクトにたいへんよく似ています。開発者はDictionaryRecordオブジェクトに格納されたレコードを反復処理し、単語の意味を含むストリングを連結します。DictionaryRecordオブジェクトの以下のメソッドを活用します。

  • getPronunciation()このメソッドは、DictionaryRecordに格納されている単語の正しい発音を取得します。
  • getDescription()このメソッドは、DictionaryRecordに格納されている単語の意味を取得します。
  • getUsage()このメソッドは、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ユーティリティーの初期化

プラグインがアクティブ化されたときに、辞書データを持つDictionaryオブジェクトの生成を促進するには、プラグインの作成時に自動的に生成されたcom.devworks.example.dictionary.Activatorクラスのstartメソッドに、DictionaryUtilityクラスのloadDictionary静的メソッド呼び出しを含めます。そして、Dictionaryオブジェクトを用いて、DictionaryUtilityクラスの静的なdictionaryCache変数を生成します。

開発者は、startメソッドでEclipse APIを使用して、JADTTextDriverがそのデータ・ストアとして必要とするファイルのロケーションを動的に検索します。データ・ファイルが見つかった後、構成ファイルのロケーションをDictionaryUtilityのloadDictionaryメソッドに渡します。リスト3のコードは、JARファイルにプラグインが格納されていないという前提に基づいています。


リスト3. 辞書のロケーション
/**
* This method is called upon plug-in activation
*/
public void start(BundleContext context) throws Exception {
    super.start(context);
    String dictionaryLocation = "";
    try {
        URL urlLocation =  Activator.getDefault().getBundle().getEntry("jadt_en_en.txt");
        URL fileURL = FileLocator.toFileURL(urlLocation);
        String filePath = fileURL.getFile();
        File dictionaryFile = new File(filePath);
        File dictionaryFolder = dictionaryFile.getParentFile();
        dictionaryLocation = dictionaryFolder.getPath();
    
    } catch (IOException e) {
        e.printStackTrace();
    }
    DictionaryUtility.loadDictionary(dictionaryLocation);
}



サンプル・アプリケーションの実行

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アプリケーションに追加する方法についても説明しました。



ダウンロード

内容ファイル名サイズダウンロード形式
サンプルのDictionaryプラグインdictionarySource.zip5.3 KBHTTP

ダウンロード形式について


参考文献

学ぶために

製品や技術を入手するために

議論するために

著者について

Kulvir Singh Bhogal works as an IBM consultant, devising and implementing Java-centric solutions at customer sites across the nation. You can contact Kulvir at kbhogal@us.ibm.com.

Mark Talbot works for IBM as a developer for Industry Solutions. You can reach Mark at talbotm@us.ibm.com.

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Lotus
ArticleID=337973
ArticleTitle=IBM Lotus Sametime Connect 7.5.1への辞書機能の追加
publish-date=05302007
author1-email=kbhogal@us.ibm.com
author1-email-cc=
author2-email=talbotm@us.ibm.com
author2-email-cc=

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。