Implémentation d'un afficheur de structure

Le plug-in de comparaison fournit un support pour l'implémentation de votre propre afficheur de contenu :

Module d'analyse des différences 

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.

Afficheurs de différences

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 :

  1. mappage des données d'entrées dans une arborescence d'objets implémentant les interfaces IStructureComparator et IStreamContentAccessor,
  2. exécution de l'opération de comparaison à l'aide de la classe Differencer et
  3. insertion du résultat de différenciation dans DiffTreeViewer.
StructureDiffViewer correspond à une spécialisation de DiffTreeViewer qui automatise les trois étapes ci-dessus. Il extrait d'un objet d'entrée unique de type ICompareInput les deux ou trois éléments d'entrée à comparer. Il utilise ensuite un IStructureCreator pour en extraire une arborescence contenant les objets IStructureComparator et IStreamContentAccessor. Ces arborescences sont ensuite comparées au moteur d'analyse de différences et le résultat apparaît dans l'afficheur d'arborescence.

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.

Copyright IBM Corp. and others 2000,2002.