これまでは、ユーザーのファイル・システムに配置されたリソースを変更するためにリソース API が使用されていると想定してきました。 実際、これがワークスペースの基本構造なのですが、別の場所で管理されているリソースの操作についての機能をプラグインが追加することも可能です。 例えば、プラットフォームのチーム・サポート・プラグインは、 バージョン管理リポジトリーの管理の元にあるリソースを操作する機能を追加します。
リソース API には、チーム・サポート・プラグインと、 チーム・サポートを使用してリポジトリー・プロバイダーをインプリメントするプラグインを使用可能にするために特別に追加された機能が組み込まれています 以降で、リソース・フックを登録するための汎用メカニズムについて説明します。 チームによるこれらのフックの使用方法については、『リポジトリー・プロバイダーの実装』を参照してください。
このフックを使用すると、チーム・プラグインとそのプロバイダーによって、リソースの移動と削除を実装する方法を制御できます。 フックには、これらの操作の実行を防ぐ機能が組み込まれています。 インプリメンターは、ファイル、フォルダー、およびプロジェクトを移動または削除するための代替実装を提供できます。
チーム・プラグインは、 org.eclipse.core.resources.moveDeleteHook 拡張ポイントを使用してフックを登録します。
<extension point="org.eclipse.core.resources.moveDeleteHook" id="MoveDeleteHook"> <moveDeleteHook class="org.eclipse.team.internal.core.MoveDeleteManager"/> </extension>
指定されたクラスは、IMoveDeleteHook をインプリメントする必要があります。 これは、リソースが移動または削除されるたびにプラットフォームによって呼び出されます。 チーム・プラグインは、リソースを管理しているチーム・プロバイダーを判別してその特定のフックを起動できる移動削除フック・マネージャーをインストールします。
チーム・リポジトリー・プロバイダーが、ファイルの編集または保管を防ぐか、それらに介入する必要が生じる可能性もあります。 チーム・プラグインは、拡張ポイント org.eclipse.core.resources.fileModificationValidator を使用して、リソースが変更されようとするたびに呼び出されるバリデーターを登録することによって、これを実行します。
<extension point="org.eclipse.core.resources.fileModificationValidator" id="FileValidator"> <fileModificationValidator class="org.eclipse.team.internal.core.FileModificationValidatorManager"/> </extension>
指定されたクラスは、IFileModificationValidator をインプリメントする必要があります。 これは、リソースが保管されるか開かれるたびにプラットフォームによって呼び出されます。 チーム・プラグインは、リソースを管理しているチーム・プロバイダーを判別して、 その特定のバリデーターを起動できるファイル変更マネージャーをインストールします。
リポジトリー・プロバイダーは、追加の制限を課したり、ワークスペースの振る舞いをカスタマイズするために、追加のワークスペース操作をフック処理する必要があります。org.eclipse.core.resources.teamHook 拡張ポイントは、チーム・プロバイダーに他の特殊機能を提供します。特に、このフックを使用することにより、チーム・プロバイダーは、リンクされたフォルダーおよびファイルを所定のプロジェクトで許可する必要があるかどうかを判別できます。一部のリポジトリー・システムでは、ディスク上のプロジェクトの物理的なレイアウトに関する厳密なルールがあるため、任意のロケーションにリンクされたリソースを処理できません。
また、チーム・フックを使用することにより、リポジトリー・プロバイダーは、すべてのワークスペース操作で使用されるスケジュール・ルール・ファクトリーを提供できます。ワークスペースを何らかの方法で変更する API メソッドが呼び出されるたびに、スケジュール・ルールがワークスペースから取得されます。 このスケジュール・ルールは、API メソッドの呼び出し中に、他のスレッドがこれらのリソースを変更できないようにします。リポジトリー・プロバイダーがファイル変更バリデーターまたは移動/削除フック内で追加作業を実行している場合、プロバイダーはどのスケジュール・ルールが追加で必要となるかをワークスペースに通知します。ワークスペースがスケジュール・ルールを使用する方法の詳細については、『リソースのバッチ』のセクションを参照してください。
チーム・フックに提供されたクラスは、TeamHook をインプリメントする必要があります。 チーム・プラグインは、リソースを管理しているチーム・プロバイダーを判別してその特定のフックを起動できる単一チーム・フックをインストールします。
注: これら 3 つのチーム・フックすべては、チーム・コア・プラグインによって使用されるために特別に設計されました。 一般的な使用は意図されていません。 チーム・プロバイダーは、これらの拡張ポイントを使用してフックをインストールせずに、代わりにフックをリポジトリー・プロバイダー・クラスにインプリメントしなければなりません。 これらのフックの使用法については、『リソース変更フック』を参照してください。