儲存庫提供者

儲存庫提供者(RepositoryProvider) 為儲存庫實作的中間類別。這個類別負責為儲存庫管理配置專案並提供資源修改必要的連結鉤。提供者使用專案持續性內容對映至專案。對映提供者至專案的機制不是團隊 API 的中心, 但是過濾 UI 中的資源時您必須知道。大部分您將使用與專案一起作用的團隊 API 並與您的提供者產生關聯。

要實作一個提供者,您必須使用 org.eclipse.team.core.repository 定義儲存庫並提供從   RepositoryProvider 中衍生的類別。我們使用 CVS 用戶端作為範例來檢視這個如何作用。

延伸點

org.eclipse.team.core.repository 延伸點用來新增儲存庫定義。這是 CVS 用戶端標記。

   <extension

point="org.eclipse.team.core.repository">
<repository
class="org.eclipse.team.internal.ccvs.core.CVSTeamProvider"
id="org.eclipse.team.cvs.core.cvsprovider">
</repository>
</extension>

這個登錄了您的團隊提供者與團隊支援外掛程式,並指派一個 ID,在您的提供者與專案相關聯時使用。為儲存庫所指派的類別必須延伸 RepositoryProvider

實作 RepositoryProvider

延伸中所識別的類別必須為 RepositoryProvider 的子類別。 它主要責任是為儲存庫支援配置和取消配置專案,並提供任何必要的資源修改連結鉤。CVS 用戶端是一個好範例。它的儲存庫提供者是 CVSTeamProvider

   public class CVSTeamProvider extends RepositoryProvider {

...

RepositoryProvider 定義二 abstract 方法, configureProjectdeconfigure。所有提供者必須實作這些方法。

專案第一次建立與特定儲存庫提供者的關聯性時,進行配置。這一般發生在當使用者選取專案並使用團隊精靈來建立儲存庫與專案的關聯性時。無論這項作業如何觸發, 這是計算或快取需要您提供儲存庫功能之專案資料的適當時間,則您需要提供您的儲存庫功能。(假設已將專案對映至您的提供者。您必須在配置精靈中處理這個部分。)

CVS 提供者簡單的廣播已配置的專案的事實:

public void configureProject() throws CoreException {

CVSProviderPlugin.broadcastProjectConfigured(getProject());
}

我們將不遵循外掛程式廣播機制的實作。足以說需要計算或初值設定專案特定的資料的任何人也可以在這時這麼做。

當使用者不再想要建立團隊提供者與專案的關聯性時,解除配置專案。 依據您的外掛程式的需求實作使用者動作,造成解除配置專案(解除對映團隊 提供者中的專案也在此發生)。deconfigure 方法是在適當的時機來刪除專案相關的快取或移除 UI 中參照的專案。CVS 提供者清空保存在視圖中的專案相關的快取並廣播專案已解除配置的事實。

      public void deconfigure() throws CoreException {

...
try {
EclipseSynchronizer.getInstance().flush(getProject(), true, true /*flush deep*/, null);
} catch(CVSException e) {
throw new CoreException(e.getStatus());
} finally {
CVSProviderPlugin.broadcastProjectDeconfigured(getProject());
}
}

配置專案

一般來說,建置團隊 UI 的最初步驟是實作精靈頁面,讓使用者 為外掛程式的團隊支援配置專案。這是新增團隊提供者 ID 至專案的內容的地方。您藉著提供 org.eclipse.team.ui.configurationWizards 延伸點參與專案配置。當使用者選取團隊->共用專案... 時,出現精靈頁面。

我們會在 CVS 用戶端實作的內容中看一下這件事。這是配置精靈的 CVS UI 標記:

   <extension

point="org.eclipse.team.ui.configurationWizards">
<wizard
name="%SharingWizard.name"
icon="icons/full/wizards/newconnect_wiz.png"
class="org.eclipse.team.internal.ccvs.ui.wizards.SharingWizard"
id="org.eclipse.team.ccvs.ui.SharingWizard">
</wizard>
</extension>

如同往常,外掛程式提供實作延伸的類別和專屬的 ID 來識別他們的延伸。如果有多個提供者可供選取,顯示在專案配置精靈第一頁的是名稱圖示

一旦使用者選取提供者,下一頁顯示提供者的特定配置資訊。(如果您的提供者是唯一已安裝的團隊提供者外掛程式,則精靈直接跳至頁面。)您的精靈必須實作 IConfigurationWizard,為指定的工作台和專案初值設定精靈。剩餘的實作視精靈的設計而定。您必須收集專案與團隊支援關聯的所需要的資訊。

當精靈已完成時,您必須使用 RepositoryProvider.map(IProject, String) 將您的團隊提供者對映至專案。對映會處理指派正確的專案持續性內容至您的專案。

CVS 用戶端在提供者的 setSharing 方法中完成這項工作,當精靈已完成時會呼叫它:

public void setSharing(IProject project, FolderSyncInfo info, IProgressMonitor monitor) throws TeamException {


// 確定提供的資訊符合專案的資訊
...
// 確定已管理提供的位置
...
// 登錄專案團隊
RepositoryProvider.map(project, CVSProviderPlugin.getTypeId());
}

尋找提供者

Static 方法位於 RepositoryProvider 中,使得用戶端易於將專案對映至提供者並尋找與給定的專案相關聯的提供者。

儲存庫提供者和功能

如果產品選擇將「儲存庫」外掛程式加入功能,應該連結功能到儲存庫 ID。以下是啟用 RepositoryProvider 為功能的兩個步驟︰

  1. 連結功能至儲存庫提供者 ID。這樣可讓「團隊」外掛程式根據儲存庫提供者 ID 來啟用/停用。
    <activityPatternBinding
    
        activityId="org.eclipse.team.cvs"
        pattern="org\.eclipse\.team\.cvs\.core/.*cvsnature">
    </activityPatternBinding>
  2. 下一步連結功能至提供者的所有 UI 套件︰
    <activityPatternBinding
    
         activityId="org.eclipse.team.cvs"
         pattern="org\.eclipse\.team\.cvs\.ui/.*">
    </activityPatternBinding>

「團隊」外掛程式定義兩個功能觸發點。第一個是團隊 > 共用專案...精靈,可允許根據工作台功能的啟用/停用狀態來過濾儲存庫提供者,另一個是「團隊」外掛程式自動啟用觸發。

資源修改連結鉤

與儲存庫提供者相關聯的最有趣功能會發生在使用者使用了專案中配置給提供者的資源。為了能夠知道使用者變動了資源,提供者可以實作資源修改連結鉤。資源外掛程式將這些連結鉤提供為延伸點。IMoveDeleteHookIFileModificationValidatorResourceRuleFactory 的文件說明了實作這些連結鉤的詳細資料。

團隊外掛程式藉由以資源外掛程式登錄通用連結鉤來最佳化並簡化連結鉤與適當資源的關聯。這些通用連結鉤簡單的查閱儲存庫提供者是否有提供的資源並取得連結鉤。只呼叫一個提供者連結鉤而不是讓每一個提供者實作更有好處,必須先檢查資源是否由提供者所管理。

對外掛程式而言,這表示您利用置換 RepositoryProvider 中的方法來提供任何必要的連結鉤。這些方法的預設實作傳回 null,表示不需要連結鉤(除了資源規則 Factory 之外,如下所述)︰