Un afficheur de fusion de structure effectue une comparaison bi et trilatérale de ses entrées, présente les résultats sous forme hiérarchique et laisse l'utilisateur faire le lien entre les entrées. Ces afficheurs sont employés dans le cas de ressources d'espace de travail ou de membres d'un fichier d'archivage.
L'implémentation de la plupart des afficheurs de comparaison de structures étant généralement basée sur une arborescence, le plug-in de comparaison fournit un StructureDiffViewer générique. Le plug-in fournit un créateur de structure qui décompose un objet d'entrée en structure hiérarchique. StructureDiffViewer réalise la comparaison de la structure obtenue et affiche le résultat sous forme d'arborescence.
L'extension org.eclipse.compare.structureCreators permet de désigner un créateur de structure pour votre plug-in.
Dans certains cas, le StructureDiffViewer basé sur l'arborescence n'est pas approprié à votre plug-in. Le point d'extension org.eclipse.compare.structureMergeViewers vous permet de définir votre propre implémentation d'afficheur de fusion de structure. Des classes utilitaires vous aident à implémenter l'afficheur.
Differencer est un moteur d'analyse des différences destiné aux données structurées de façon hiérarchique. Il sélectionne deux ou trois entrées sur lesquelles il effectue une opération de comparaison bidirectionnelle ou tridirectionnelle.
Si les éléments d'entrée du moteur d'analyse des différences mettent en oeuvre l'interface IStructureComparator, le moteur s'applique de manière récursive aux enfants de l'élément d'entrée. Les éléments feuille doivent mettre en oeuvre l'interface IStreamContentAccessor de sorte que l'analyseur des différences les soumettent à une comparaison au niveau des octets.
L'implémentation de la plateforme inclut quelques bons exemples de modules d'analyse des différences :
Par défaut, le moteur d'analyse des différences renvoie le résultat de l'opération de comparaison sous la forme d'une arborescence d'objets DiffNode. Un DiffNode décrit les changements de deux ou trois entrées. Le type des noeuds résultants peut être modifié en remplaçant une méthode du moteur.
Une arborescence de plusieurs DiffNode peut être affichée dans un DiffTreeViewer. DiffTreeViewer impose aux noeuds internes l'implémentation de l'interface IDiffContainer et aux feuilles celle de l'interface IDiffElement.
La procédure standard permettant la comparaison hiérarchique des données structurées et l'affichage des différences se présente comme suit :
ZipFileStructureCreator est une implémentation de l'interface IStructureCreator et rend disponible le contenu d'une archive zip sous la forme d'une structure hiérarchique des IStructureComparator pouvant ainsi être facilement comparés par le moteur d'analyse des différences (Differencer). Cet exemple illustre parfaitement comment rendre des fichiers structurés disponibles pour la fonction de comparaison hiérarchique du plug-in de comparaison.