저장소 제공자

저장소 제공자(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의 서브클래스이어야 합니다. 이 클래스의 기본 역할은 저장소 지원을 위해 프로젝트를 구성 및 구성 해제하고 필요한 자원 수정 후크를 제공하는 것입니다. CVS 클라이언트는 좋은 예제입니다. CVS 클라이언트의 저장소 제공자는 CVSTeamProvider입니다.

   public class CVSTeamProvider extends RepositoryProvider {
...

RepositoryProviderconfigureProjectdeconfigure라는 두 개의 추상 메소드를 정의합니다. 모든 제공자는 이들 메소드를 구현해야 합니다.

프로젝트는 특정 저장소 제공자와 처음 연관될 때 구성됩니다. 일반적으로 프로젝트를 선택하고 팀 마법사를 사용하여 프로젝트를 저장소와 연관시킬 때 이러한 구성이 이루어집니다. 조작이 트리거되는 방법에 상관 없이 이 때가 저장소 기능을 제공할 필요가 있는 프로젝트에 대한 데이터를 연산하고 캐시하기에 가장 적절한 시기입니다. 이 경우 이미 프로젝트를 제공자에 맵핑했다고 가정합니다. 맵핑에 대해서는 구성 마법사에서 살펴보겠습니다.

CVS 제공자는 프로젝트가 구성되었음을 단순히 브로드캐스트합니다.

public void configureProject() throws CoreException {
CVSProviderPlugin.broadcastProjectConfigured(getProject());
}

플러그인 브로드캐스트 메커니즘의 구현을 수행하지 않습니다. 지금은 프로젝트별 데이터를 연산하거나 초기화하는 데 필요한 부분을 언급하는 것만으로 충분합니다.

사용자가 더 이상 팀 제공자를 프로젝트에 연관시키고 싶지 않은 경우 프로젝트는 구성 해제됩니다. 이러한 작업을 수행하는 사용자 조치를 구현하는 것은 사용자 플러그인입니다. 그리고 팀 제공자에서 프로젝트를 맵핑하지 않는 작업도 이 플러그인에서 수행됩니다. 구성 해제 메소드는 프로젝트 관련 캐시를 삭제하거나 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 및 확장을 구현하는 클래스를 제공합니다. 선택할 수 있는 제공자가 여러 개 있는 경우 이름아이콘이 프로젝트 구성 마법사의 첫 페이지에 표시됩니다.

사용자가 제공자를 선택하면 그 다음 페이지에는 제공자에 대한 특정 구성 정보가 표시됩니다. 제공자가 설치된 유일한 팀 제공자 플러그인일 경우 마법사는 사용자 페이지로 직접 건너뜁니다. 마법사는 지정된 Workbench 및 프로젝트에 대해 마법사를 초기화하는 IConfigurationWizard를 구현해야 합니다. 구현의 나머지 단계는 마법사 디자인에 따라 달라집니다. 프로젝트를 팀 지원과 연관시키는 데 필요한 모든 정보를 수집해야 합니다.

마법사가 완료되면 RepositoryProvider.map(IProject, String)을 사용하여 팀 제공자를 프로젝트에 맵핑해야 합니다. 맵핑은 프로젝트에 대한 정확한 프로젝트 지속 특성 지정을 처리합니다.

CVS 클라이언트는 제공자의 setSharing 메소드에서 이 작업을 수행합니다. 이 메소드는 마법사가 완료될 때 호출됩니다.

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

// Ensure provided info matches that of the project
...
// Ensure that the provided location is managed
...
// Register the project with Team
RepositoryProvider.map(project, CVSProviderPlugin.getTypeId());
}

제공자 찾기

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>

팀 플러그인에서 정의하는 두 개의 기능 트리거 확장점이 있습니다. 첫 번째 확장점은 Workbench 기능의 사용/사용 안함 상태를 기준으로 저장소 제공자의 필터링을 허용하는 팀 > 프로젝트 공유... 마법사이며, 다른 하나는 팀 플러그인 자동 인에이블먼트 트리거입니다.

자원 수정 후크

저장소 제공자와 연관된 대부분의 기능은 사용자가 제공자에 대해 구성되어 있는 프로젝트의 자원에 대해 작업할 때 발생합니다.  사용자가 자원에 대해 작성하는 변경사항을 알기 위해 제공자는 자원 수정 후크를 구현해야 합니다.  자원 플러그인은 이러한 후크를 확장점으로 제공합니다. IMoveDeleteHook, IFileModificationValidatorResourceRuleFactory에 대한 문서에서 이러한 후크를 구현하기 위한 세부사항을 설명합니다.

팀 플러그인은 자원 플러그인에 일반 후크를 등록하여 후크를 최적화된 방법으로 간단하게 적절한 자원에 연관시킵니다. 이 일반 후크는 주어진 자원에 대한 저장소 제공자를 찾아 후크를 얻습니다. 이렇게 하면 각 제공자 구현이 후크를 등록하여 제공자가 자원 관리 여부를 우선 확인하지 않고도 하나의 제공자 후크만을 호출할 수 있습니다.

플러그인에 대해 이는 RepositoryProvider의 메소드를 대체하여 필요한 후크를 제공한다는 것을 의미합니다. 이러한 메소드의 기본 구현은 널(null)로 응답하는데, 이것은 후크가 필요하지 않음을 표시합니다(아래에 설명된 자원 규칙 팩토리 제외).