實作結構檢視器

結構合併檢視器執行雙向或三向的輸入比較,用階層式方式呈現結果,讓使用者在輸入間合併資料。 對工作區資源或保存檔成員來說,結構合併檢視器是常見的。

類樹狀的結構檢視器

因為許多結構比較檢視器的實作是以樹狀結構為基礎, 所以比較外掛程式提供了一個通用的樹狀結構型 StructureDiffViewer。您的外掛程式負責提供一個結構建立器,將單一輸入物件打斷成階層式結構。StructureDiffViewer 根據結果結構來執行比較,並將結果顯示成樹狀結構。

您可以使用 org.eclipse.compare.structureCreators 延伸,為外掛程式指定一個結構建立器。與內容檢視器非常相似,一組副檔名可以用於指定結構建立者,或者可以使用 contentTypeBinding 來建立內容類型與特定結構建立者的關聯性。我們不會在這裡檢視標記,因為與內容檢視器非常類似。JDT 外掛程式定義 org.eclipse.compare.structureCreators 的若干構成要素。

其他階層式結構檢視器

在某些情況下,樹狀結構型的 StructureDiffViewer 可能不適合您的外掛程式。 org.eclipse.compare.structureMergeViewers 延伸點可讓您為結構合併檢視器定義您自己的實作。副檔名可以指定用於結構合併檢視器,或者可以使用 contentTypeBinding 來建立內容類型與特定結構合併檢視器的關聯性。請參閱 org.eclipse.compare.structureMergeViewers構成要素範例的 JDT 外掛程式。

搜尋外掛程式提供數個公用程式類別可幫助您實作搜尋檢視器。

差異器

差異器 是階層化結構資料的差異引擎。它採用兩個或三個輸入,並對它們執行雙向或三向比較。

如果差異引擎的輸入元素實作 IStructureComparator 介面,則引擎會循環地將自己套用至輸入元素的子項。 葉節點元素必須實作 IStreamContentAccessor 介面,以便差異器可以對它們的內容執行位元組比較。

包含了一些有關差異器不錯的範例:

依預設,差異分析引擎會以 DiffNode 物件的樹狀結構方式, 傳回比較作業的結果。 DiffNode 說明兩個或三個輸入之間的變更。您可以置換單一引擎方法來變更節點結果的類型。

差異檢視器

DiffNode 的樹狀結構 可顯示在 DiffTreeViewer 之中。 DiffTreeViewer 需要樹狀結構的內部節點實作 IDiffContainer 介面,以及葉節點實作 IDiffElement 介面。

比較階層化結構資料及顯示差異的典型步驟如下:

  1. 將輸入資料對映至實作 IStructureComparatorIStreamContentAccessor 介面之物件的樹狀結構
  2. 利用差異器執行比較作業
  3. 將差異結果饋送至 DiffTreeViewer

StructureDiffViewer 是特殊化的 DiffTreeViewer, 可使上述的三個步驟自動進行。它採用類型 ICompareInput 的單一輸入物件, 並且從中擷取兩個或三個要比較的輸入元素。 它使用 IStructureCreator, 從它們之中擷取包含 IStructureComparatorIStreamContentAccessor 的樹狀結構。 然後,這些樹狀結構會與差異引擎做比較,而且結果會顯示在樹狀結構檢視器中。

ZipFileStructureCreatorIStructureCreator 介面的實作,使得可用的 ZIP 保存檔的內容為 IStructureComparator 階層式結構,可使用差異引擎(差異器)輕鬆的作比較。 這是如何使得結構化檔案可供比較外掛程式的階層式比較功能使用的良好範例。