구조 표시기 구현

구조 병합 표시기는 해당 입력에 대한 2방향 또는 3방향 비교를 수행하고, 결과를 계층 구조 보기로 제공하고, 사용자가 입력 사이에서 병합할 수 있게 해줍니다. 구조 병합 표시기는 작업공간 자원이나 아카이브 파일의 구성원에 공통입니다.

트리 모양 구조 표시기

여러 가지 구조 비교 표시기의 구현이 트리를 기반으로 하므로, 비교 플러그인은 일반 트리 기반의 StructureDiffViewer를 제공합니다. 플러그인은 단일 입력 오브젝트를 계층 구조로 구분하는 구조 작성자를 제공해야 합니다. StructureDiffViewer는 결과 구조에 대한 비교를 수행하고 해당 결과를 트리로 표시합니다.

org.eclipse.compare.structureCreators 확장을 사용하여 플러그인의 구조 작성자를 지정하십시오. 컨텐츠 표시기와 마찬가지로 구조 작성자를 파일 확장자 세트에 지정하거나 컨텐츠 유형을 특정 구조 작성자와 연관시키는 데 contentTypeBinding을 사용할 수 있습니다. 구조 작성자는 컨텐츠 표시기와 매우 유사하므로 여기에서는 마크업을 검토하지 않습니다. JDT 플러그인은 org.eclipse.compare.structureCreators에 대해 몇 가지 컨트리뷰션을 정의합니다.

기타 계층 구조 표시기

일부의 경우, 트리 기반의 StructureDiffViewer는 플러그인에 적합하지 않을 수 있습니다. org.eclipse.compare.structureMergeViewers 확장점을 사용하여 구조 병합 표시기에 해당하는 사용자 고유의 구현을 정의할 수 있습니다. 구조 병합 표시기를 파일 확장자에 지정하거나 컨텐츠 유형을 특정 구조 병합 표시기와 연관시키는 데 contentTypeBinding을 사용할 수 있습니다. org.eclipse.compare.structureMergeViewers 컨트리뷰션에 대한 예는 JDT 플러그인을 참조하십시오.

검색 플러그인은 검색 표시기를 구현하는 데 도움이 되는 몇 가지 유틸리티 클래스를 제공합니다.

차별기 

차별기는 계층적으로 구조화된 데이터의 차별 엔진입니다. 두 개나 세 개의 입력을 필요로 하고 해당 입력에 대해 2방향 또는 3방향 비교를 수행합니다.

차별 엔진에 대한 입력 요소에서 IStructureComparator 인터페이스를 구현할 경우 엔진은 자체적으로 입력 요소의 하위에 반복적으로 적용합니다. 리프 요소에서 IStreamContentAccessor 인터페이스를 구현해야 차별기에서 해당 컨텐츠에 대해 바이트식 비교를 수행할 수 있습니다.

플랫폼 구현에 포함된 차별기에 대한 여러 가지 좋은 예제가 있습니다.

기본적으로 차별 엔진에서는 비교 조작 결과를 DiffNode 오브젝트의 트리로 리턴합니다. DiffNode에서는 두 개 또는 세 개의 입력 간 변경사항에 대해 설명합니다. 엔진의 단일 메소드를 대체하여 결과 노드의 유형을 변경할 수 있습니다.

차이 표시기

DiffNode의 트리를 DiffTreeViewer에 표시할 수 있습니다. DiffTreeViewer에서는 트리의 내부 노드에서 IDiffContainer 인터페이스를 구현해야 하고 구현을 IDiffElement 인터페이스에게 남겨둡니다.

계층적으로 구조화된 데이터를 비교하고 차이를 표시하기 위한 일반적인 단계는 다음과 같습니다.

  1. IStructureComparatorIStreamContentAccessor 인터페이스를 모두 구현하는 오브젝트의 트리로 입력 데이터를 맵핑합니다.
  2. 차별기를 통해 비교 작업을 수행합니다.
  3. 차별 결과를 DiffTreeViewer로 공급합니다.

StructureDiffViewer는 위 세 단계를 자동화하는 특수한 DiffTreeViewer입니다. 이 표시기는 비교할 두 개 또는 세 개의 입력 요소를 검색하는 ICompareInput 유형의 단일 입력 오브젝트를 사용합니다. 이 표시기는 IStructureCreator를 사용하여 IStructureComparatorIStreamContentAccessor 오브젝트가 있는 트리를 추출합니다. 그런 다음 이 트리를 차별 엔진과 비교하고 결과를 트리 표시기에 표시합니다.

ZipFileStructureCreatorIStructureCreator 인터페이스의 구현이고, 차별 엔진(차별기)을 통해 쉽게 비교할 수 있는 Zip 아카이브의 컨텐츠를 IStructureComparator의 계층 구조로 사용할 수 있게 합니다. 이는 비교 플러그인의 계층 구조 비교 기능에 구조화된 파일을 사용할 수 있게 하는 방법을 위한 좋은 예제입니다.