到目前为止,我们假定资源 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。小组插件安装单个小组挂钩,该挂钩可以确定哪个小组提供程序管理资源并调用其特定挂钩。
注意:全部三个小组挂钩是专门指定供小组核心插件使用的。未打算将它们用于一般目的。小组提供程序不应该使用这些扩展点来安装挂钩,而是应该在它们的存储库提供程序类中实现它们的挂钩。有关使用这些挂钩的更多信息,请参阅小组资源修改挂钩。