この記事では、拡張、アクティビティー・セット、プラグイン、フィーチャー、および更新サイトなどのEclipseのコア・テクノロジーの使用法に重点を置きます。これらのテクノロジーを使用して、Eclipseベースの任意の製品に機能をデプロイできます。ここでは、IBM Lotus Notesクライアントに注目し、新しいMail Rule Runnerを追加してメールを拡張します。この機能を使用すると、クライアントでもメール・ルールを手動で実行できるようになります。
|
メモ:この記事では、自宅でのPOP3およびSMTPメールの1次クライアントとしてLotus Notesメールを使用します。この場合、不足する唯一の機能はメール・ルールです。ご存じのように、Lotus Notesのメール・ルールはSMTPサーバーで実行されるため、Lotus Domino SMTPサーバーがないとメールのソート機能は使用できません。このツールは完全ではありませんが、Eclipseを使用してLotus Notesを拡張する方法、およびLotus Notes Javaバックエンド・クラスを使用して、Lotus Notesデータにアクセスし操作する方法を示しています。 |
まず、Eclipseを使用してプラグインを作成するところから始めます。『ダウンロード』セクションにあるコードおよびサンプルは、基本のEclipseバージョン3.2.1を使用して作成されています。
この記事では、メール・ルールをローカルで実行するアクション(アイコン)としてLotus Notesメール・ビューに表示される新しいメニュー・オプションを作成します。ユーザーが「Run Mail Rules」ボタンをクリックすると、有効なすべてのメール・ルールが選択された状態でダイアログ・ボックスが開かれ、メール・ルールを実行するビューまたはフォルダーを選択するためのコンボ・ボックスが表示されます。「Run Mail Rules」ダイアログ・ボックスを図1に示します。(ぼかした領域は、個人情報がマスクされています。)
図1. 「Run Mail Rules」ダイアログ・ボックス

これは基本的な Eclipse SWTベースのダイアログ・ボックスで、SWTのGridLayoutを使用して、異なるUI要素を画面上に配置する方法が定義されています。
「Run」ボタンをクリックすると、進行状況を示すEclipseの標準ダイアログ・ボックスが表示されます(図2参照)。「Run in Background」ボタンをクリックすることにより、このダイアログ・ボックスをバックグラウンドで実行できます。ルールを実行したビューが開いている場合は、処理の終了後に「F9」を押してしてビューを更新します。あるいは、メール・ルールの処理が完了した後で現在の画面を更新するようこのツールを拡張することもできます。
図2. 「Run Mail Rules Job」の進行状況

他のプラグインと同様に、Eclipseプラグイン・ウィザードを使用した作成手順は簡単です。Eclipseは開発者のために多くの作業を行いますが、それはソフトウェア開発における一般的なことであり、ほんのスタート段階に過ぎません。このサンプルでは、私たちはEclipse 3.2.2を使用して、インストール済みのLotus Notes 8ベータ・クライアントをターゲット・プラットフォームとして指定しました。Lotus Notesは、すべてのマシンで常に同じ場所(c:\notes)にインストールすることをお勧めします。Eclipseでターゲット・プラットフォームを選択するには、「Window」-「Preferences」を選択します。次に、「Plug-in Development」->「Target Platform」を選択し、ターゲット・プラットフォームを指定します。Lotus Notesをターゲット・プラットフォームとして選択するようすを図3に示します。重要なのは、\framework\eclipseディレクトリーを選択することです。これはEclipseランタイムのルート・ディレクトリーです。この場合、ディレクトリーはc:\notes\framework\eclipseとなります。
図3. ターゲット・プラットフォームの指定

これで、Lotus Notesランタイムをプラットフォームとして選択したので、新しいプラグインを作成し、依存関係を設定し、コードを書くことができます。Lotus Notesをターゲット・プラットフォームにすることにより、Eclipse、Lotus Expeditor、Lotus Notes APIおよび拡張をすべて利用できるようになります。パッケージ・エクスプローラーで、右クリックし、「New」->「Project」を選択します。ここで、Eclipseプラグイン・プロジェクトを選択します。表示される「New Project」ウィザードの画面を図4に示します。
図4. 「New Project」ウィザード

「Next」をクリックし、プロジェクトに「com.ibm.notes.mail.utils」という名前を付けます。これが、後で作成するすべてのメール・ユーティリティー用の主な場所となります。ウィザードの残りの部分では、提示されたデフォルト値をそのまま選択できます。このプラグインに基づく既存のテンプレートを指定する画面が表示されたときは、テンプレート・オプションの選択を解除します。テンプレートは使用しないでください。
新規作成したプロジェクトをパッケージ・エクスプローラーで展開し、META-INFフォルダー内のMANIFEST.MFをダブルクリックします。
「Dependencies」タブに移動し(図5参照)、com.ibm.notes.java.java.apiバンドルを依存関係に追加します。これにより、すべてのLotus Domino Javaバックエンド・クラスにアクセスできるようになります。
図5. 「Dependencies」タブ

通常は、「インポートされたパッケージ」による方法で依存関係を定義します。インポートを使用することは、ここで行ったように開発者が特定のバンドルを指定するのではなく、OSGIフレームワークがパッケージのインポートと要求されたクラスを解決することを意味します。もし、指定されたバンドルがリネームまたは削除されると、依存関係が壊れ、実行時にクラスが解決されないでしょう。これに対し、使用する予定のすべてのパッケージをインポートすると、どのプラグインもこれらのパッケージを公開できます。プラグインのコードを記述した後、この依存関係を削除し、必要なパッケージだけを同じ画面でインポートできます。これで依存関係を指定したので、コーディングを開始できます。
新しいアクションをビューのツールバーに追加することにより、CSI Viewsを拡張します。Lotus Notes 8ベータでは、「Run Mail Rule」と書かれたボタンが表示されますが、製品版では正しいアイコンが表示されます。メール・アウトラインから「メール・ルール」アイコンのスクリーン・ショットを流用し、このアイコンを利用します。スクリーン・ショットを得るには、「Alt」+「PrtSc」キーを押します。アイコンをアイコン・フォルダーに保存し、mailrules.gifという名前を付けます。最終的に、アクションは図6のように表示されます。
図6. 「メール・ルール」アイコン

このアイコンを表示するために、Eclipseアクション・セットに拡張を定義します。これを行うには、ウィザードを使用してアクション・セットを追加するか、リスト1のコードを単にplugin.xmlにコピーします。plugin.xmlは、この時点で作成されていないことがあります。このような場合は、ウィザードを通じてplugin.xmlを作成できます(または、『ダウンロード』セクションのZIPファイルに含まれるplugin.xmlを使用します)。最初の拡張は、新規作成されたアクション・セットです。これは、メニュー、ツールバー・パス、ツール・ヒント、アイコン、および選択されたときに呼び出すアクションを定義します。2番目の拡張は、新しいアクション・セットをCSIViewsツールバーに関連付けます。CSI Viewsは必ずしもパブリックAPIではありませんが、Eclipse拡張として公開されているため、コードの記述対象として利用できます。これはactionSetPartAssociations拡張です。アクション・セットID (com.ibm.notes.mail.utils.actionSets)を、その内部に表示したいパートID (com.ibm.rcp.csiviews.CSIViewPart)とともに指定することにより、これらを関連付けます。これにより、アクション・セットをCSIViewPartに関連付け、コントリビューションをそのView partとともに表示することがEclipseフレームワークに伝えられます。
リスト1. CSI拡張
<extension
point="org.eclipse.ui.actionSets">
<actionSet
id="com.ibm.notes.mail.utils.actionSet"
label="Mail Tools">
<menu
id="RunMailRules"
label="Run Mail Rules">
</menu>
<action
class="com.ibm.notes.mail.utils.actions.RunMailRules"
icon="icons/mailrules.gif"
id="com.ibm.notes.mail.utils.actions.RunMailRules"
label="&Run Mail Rules"
toolbarPath="actions/additions"
tooltip="Run Mail Rules"/>
</actionSet>
</extension>
<extension point="org.eclipse.ui.actionSetPartAssociations">
<actionSetPartAssociation
targetID="com.ibm.notes.mail.utils.actionSet">
<part id="com.ibm.rcp.csiviews.CSIViewPart" />
</actionSetPartAssociation>
</extension>
|
作成した新しいアクション・クラスによってロジックへのエントリー・ポイントが得られたので、処理を実行するコードの開発を始められます。RunMailRulesクラスにはrun()メソッドがあります。ボタンがクリックされたときに、このメソッド内のコードが呼び出されます。ここでは、データベース、文書、およびビューなどのバックエンドのLotus Notesオブジェクトにアクセスするので、またUIスレッドに呼び出しを行うので、このメソッドで新規スレッドを生成します。Lotus Dominoオブジェクトへの他のアクセスと同様に、NotesThread.sinitThread()を呼び出すことにより、スレッドを初期化する必要があります。最後のブロックで、NotesThread.stermThread()を呼び出します。
コードは、メール・データベースと、そのデータベースに含まれるすべてのフォルダーおよびビューのリストを取得することから開始します。このリストを使用して、メール・ルールを実行するビューのドロップダウン・コンボ・ボックスを作成します。セッションの取得は、この演習の一番重要な部分です。リスト2のコードは、セッション、データベース・ハンドル、およびビューとフォルダーのリストを取得する方法を示しています。
リスト2. セッションの取得
Session session = null;
try{
NotesThread.sinitThread();
session = NotesFactory.createSessionWithFullAccess();
DbDirectory dbdir = session.getDbDirectory(null);
Database mail = dbdir.openMailDatabase();
Vector views = mail.getViews();
Enumeration vEnum = views.elements();
…
View rules = mail.getView("(Rules)");
…
}finally{
NotesThread.stermThread();
|
私たちは、テンプレート設計と保存済みデータを調べることにより、メール・ルール文書にリバース・エンジニアリングを実施する必要があったため、メール・ルール文書を利用して、ルールのさまざまな要素をJavaオブジェクトとして作成するクラスを持つとよいだろうと考えました。このクラスは、フィールド実装の詳細を抽象化し、プラグインの他の部分でそれを読みやすくします。MailRuleオブジェクトは、メール・ルール文書に含まれているアクション、条件、および例外のリストを保持します。これら(アクション、条件、および例外)はすべてメール・ルール文書から得られるので、このオブジェクトはDocumentオブジェクトによって初期化します。
このコードは、容易に拡張できるように構築されています。拡張性を念頭に置き、このコードは何回もリファクタリングされました。新しいアクション、例外、またはブール・ロジックを簡単に追加できます。プロジェクト全体のスクリーン・ショットを図7に示します。
図7. メール・ユーティリティー・プロジェクト

メインのutilsパッケージには、プラグインActivator、メインEclipse Job (ルールが処理されるときに標準Eclipse進行状況ダイアログ・ボックスに表示されます)、Mail
Ruleオペレーション(ルール・ロジックの大部分が含まれます)、および特定の条件下でルールの処理を停止する例外クラスが含まれています。
この例では、モデルに関連するすべてをmodelsパッケージとしてまとめ、ダイアログに関連するすべてのクラスをdialogsパッケージとしてまとめました。Eclipseの多くのサンプルでは、コンテンツおよびラベル・プロバイダーのクラスをdialogsクラスのサブクラスとしていますが、私たちはこれらをそれぞれ固有のファイルに抽出することにしました。
Lotus Notes 8クライアントへのプラグインのデプロイ
次の手順では、新規作成したプラグインを1つのフィーチャーおよび1つの更新サイトとともにパッケージ化し、これをクライアントにデプロイします。Eclipseはプラグイン(またはバンドル)をEclipseフィーチャーにパッケージ化します。Eclipseのコントリビューターが作成した使いやすいウィザードにより、これを実行できます。最初に、新規プラグインを参照するフィーチャーを作成します。前と同様の方法で、新規プロジェクトを作成します。ただし今回は、「Feature Project」を選択します(図8参照)。
図8. 「New Feature」ウィザード

簡潔にするために、新規フィーチャーにはプラグインと同じ名前を付けますが、最後に「feature」という単語を追加します(例: com.ibm.notes.mail.utils.feature)。次のウィンドウで、使用するプラグインをリストから選択します。これで設定完了です。複数のプラグインを作成した場合は、このフィーチャーに含めるプラグインを選択します。後で、任意のプラグインをいつでも追加できます。
次に、クライアントが新規フィーチャーをインストールできるようにするために、Eclipse更新サイトが必要です。図8に示したものと同じ「New Project」ウィザード・ダイアログ・ボックスで、「Update Site Project」を選択します。サイトが作成された後、フィーチャーをこのサイトに追加します。site.xmlは基本であり、これをリスト3に示します。
リスト3. Update site.xml
<?xml version="1.0" encoding="UTF-8"?> <site> <feature url="features/com.ibm.notes.mail.utils.feature_1.0.0.jar" id="com.ibm.notes.mail.utils.feature" version="1.0.0"/> </site> |
「Build All」ボタンをクリックする前に、すべてのプロジェクトをクリーニングし、バイナリーを再ビルドするとよいでしょう。「File」メニューから、「Project」->「Clean」を選択します。「Build All」ボタンをクリックすると、サイトはデプロイの準備が整います。サイトのビルド・オペレーションにより、フィーチャーとプラグイン用のディレクトリーが生成され、コンパイルされたフィーチャーおよびプラグインがこのディレクトリーに保存されます。これで、プラグイン、フィーチャー、およびEclipse更新サイトが得られました。唯一残っている作業は、Lotus Notes 8ユーザー・インターフェースでフィーチャーのインストールを有効にすることです。
Lotus Notes 8ベータでは、新規フィーチャーをインストールするEclipseメニュー・オプションがクライアントにありません。システム管理者がこのプリファレンスを無効にしていない限り、<notes directory>/framework/rcpディレクトリーでplugin_customization.iniを編集することにより、このオプションをオンにできます。
<notes directory>/framework/rcp/plugin_customization.iniファイルに、次の行を追加してください。
com.ibm.notes.branding/enable.update.ui=true
Lotus Notesクライアントを再起動すると、新規メニュー・オプションが表示されます。「ファイル」->「アプリケーション」->「インストール」を選択します。これは、フィーチャーをインストールするための標準Eclipseインターフェースです。ウィザードの最初のウィンドウで、2番目のオプション(「インストールする新規フィーチャーを検索」)を選択します。「次へ」をクリックします。作成したEclipse更新サイトのロケーションを指定するウィンドウが表示されます。「フォルダー・ロケーションの追加」ボタンをクリックし、前に作成したsite.xmlファイルが含まれるディレクトリーに移動します。図9のようなウィンドウが表示されます。
図9. フィーチャーのインストール

「終了」をクリックし、残りのプロンプトをすべて受け入れます。プラグインが署名されていないにもかかわらず、それをインストールするかどうかを確認されます。これは、Lotus Notesが署名を検証する機能を持ち、外部からのプラグインをインストールするときに署名をチェックするためです。プラグインには署名しなかったので、プラグインは署名を持っていません。新規フィーチャーがインストールされると、Lotus Notesの再起動を求められます。再起動後、すべてのメール・ビューに新規ボタンが表示されます。
別の方法として、私たちはLotus Notes 8ユーザー用にNSFベースの更新サイトを用意しました。この記事の『ダウンロード』セクションに示されているNSFファイルをLotus Notesデータ・ディレクトリーにコピーするだけで準備できます。このデータベースを開くと、「メール・ツール」フィーチャーがインストールされるようすが標準Eclipse進行状況ダイアログ・ボックスに表示されます。インストールが完了し、Lotus Notesを再起動すると、アクションが利用可能になります。
この記事では、Eclipseを使用してIBM Lotus Notesクライアントを拡張する方法を説明しました。基本のEclipse SWTユーザー・インターフェース・ウィジェットを使用し、問題に対するクロスプラットフォームの完全なソリューションを作成しました。この方法により、Lotus Notes NSFおよびNTFからコントリビューションを分離できるだけでなく、IBM Lotus Notes 8へのアップグレードの際にコードへの影響も回避できます。最後に、新しいプラグイン・モデルで既存のLotus Domino Java APIスキルを活用する方法を説明しました。JavaバックエンドAPIを使用すると、IBM Lotus Notes/Dominoアーキテクチャーへの接続を容易に得られます。この記事では、Eclipseフレームワークの柔軟性とLotus Notesアプリケーションの実証済みの手法により、カスタム・コードおよびプラグインを用いて簡単に拡張する方法を解説しました。
| ファイル名 | サイズ | ダウンロード形式 |
|---|---|---|
| mail_utils.nsf | 2560KB | HTTP |
| NotesMailUtils.zip | 61KB | HTTP |
学ぶために
- developerWorks Japan: Lotus: Lotusの日本の技術情報サイトです
- developerWorks: Lotus(US) : Lotusの英語の技術情報サイトです
- developerWorksの記事「IBM Lotus Notes 8 のサイドバーおよびツールバーに Lotus Notes データを統合する」をお読みください。
- developerWorksの記事「IBM Lotus Notes/Domino 8の新機能」をお読みください。
- developerWorksの記事「IBM Lotus Notes 8 のサイドバーとツールバーの拡張」をお読みください。
- developerWorksの記事「IBM Lotus Notes 8 の新しい不在通知機能」をお読みください。
- developerWorksの記事「IBM Lotus Expeditorでの簡単な Web Services Resourceの構築とデプロイ」をお読みください。
- developerWorksの記事「Creating a Notes/Domino plug-in with Eclipse」(US)をお読みください。
- 「IBM Lotus Notes/Domino 8 機能評価ガイド」をお読みください。
製品や技術を入手するために
- Eclipseをダウンロードできます。
Eclipse (US)
議論するために
- ディスカッション・フォーラム (US) にご参加ください。
- Bob Balfeのブログにご参加ください。
Bob Balfeのブログ (US) - developerWorks Lotusチーム・ブログ (US) にご参加ください。