Implementace prohlížeče struktury

Prohlížeč sloučení struktur provádí dvojcestné nebo trojcestné porovnání svých vstupů, prezentuje výsledky v hierarchickém zobrazení a umožňuje uživateli slučovat mezi vstupy.  Prohlížeče sloučení struktur jsou obvyklé pro prostředky pracovního prostoru nebo pro členy archivního souboru.

Prohlížeče stromových struktur

Jelikož je implementace řady prohlížečů porovnání struktury založena na stromu, poskytuje porovnávací modul plug-in obecný stromový StructureDiffViewer. Váš modul plug-in odpovídá za poskytování autora struktury, který rozděluje jeden vstupní objekt do hierarchické struktury. StructureDiffViewer provádí porovnání ve výsledné struktuře a zobrazí výsledek jako strom.

Autora struktury pro váš modul plug-in označíte pomocí rozšíření org.eclipse.compare.structureCreators. Velice podobně jako u prohlížečů obsahu může být autor struktury zadán pro skupinu přípon souborů nebo je možné použít contentTypeBinding pro přiřazení typu obsahu ke konkrétnímu autoru struktury. Na tomto místě nebudeme uvádět příslušný markup, neboť je velice podobný jako u prohlížečů obsahu. Modul plug-in JDT definuje několik příspěvků pro org.eclipse.compare.structureCreators.

Prohlížeče dalších hierarchických struktur

V některých případech nemusí být stromový StructureDiffViewer vhodný pro váš modul plug-in.  Bod rozšíření org.eclipse.compare.structureMergeViewers vám umožňuje definovat vlastní implementaci pro prohlížeč sloučení struktur. Prohlížeč sloučení struktur může být zadán pro přípony souborů nebo je možné použít contentTypeBinding pro přiřazení typu obsahu ke konkrétnímu prohlížeči sloučení struktur. Viz modul plug-in JDT pro příklady příspěvků org.eclipse.compare.structureMergeViewers.

Vyhledávací modul plug-in poskytuje několik obslužných tříd, které vám pomohou implementovat prohlížeč hledání.

Rozlišovač 

Rozlišovač je rozlišovací prostředek pro hierarchicky strukturovaná data. Používá dva nebo tři vstupy a provádí na nich dvojcestné nebo trojcestné porovnání.

Pokud vstupní prvky rozlišovacího prostředku implementují rozhraní IStructureComparator prostředek se rekurzivně aplikuje na podřízené prvky vstupního prvku. Prvky listů stromu musí implementovat rozhraní IStreamContentAccessor, aby mohl rozlišovač provést bajtové porovnání jejich obsahů.

Uvádíme několik dobrých příkladů rozlišovačů zahrnutých v implementaci platformy:

Při výchozím nastavení vrací rozlišovací prostředek výsledek porovnávací operace jako strom objektů DiffNodeDiffNode popisuje změny mezi dvěma nebo třemi vstupy.  Typ výsledných uzlů může být změněn překonáním jednoduché metody prostředku.

Prohlížeče rozdílů

Strom DiffNode může být zobrazen v DiffTreeViewer. DiffTreeViewer vyžaduje, aby vnitřní uzly stromu implementovaly rozhraní IDiffContainer a aby listy implementovaly rozhraní IDiffElement.

Obvyklé kroky pro porovnání hierarchicky strukturovaných dat a pro zobrazení rozdílů jsou následující:

  1. Namapujte vstupní data do stromu objektů implementujících rozhraní IStructureComparator a IStreamContentAccessor
  2. Proveďte porovnávací operaci prostřednictvím rozlišovače
  3. Vložte rozlišovací výsledek do DiffTreeViewer

StructureDiffViewer je specializovaný DiffTreeViewer, který automatizuje tři výše uvedené kroky. Bere si jeden vstupní objekt typu ICompareInput, ze kterého získává dva nebo tři vstupní prvky k porovnání.  Používá IStructureCreator, aby z nich extrahoval strom obsahující objekty IStructureComparator a IStreamContentAccessor.  Tyto stromy jsou následně porovnány rozlišovacím prostředkem a výsledek je zobrazen ve stromovém prohlížeči.

ZipFileStructureCreator je implementací rozhraní IStructureCreator a zpřístupňuje obsah archivních souborů zip jako hierarchickou strukturu IStructureComparator, které mohou být snadno porovnány rozlišovacím prostředkem (Rozlišovač). Je dobrým příkladem toho, jak zpřístupnit strukturované soubory pro funkci hierarchického srovnávání porovnávacího modulu plug-in.