O plug-in de comparação fornece suporte substancial para implementação de seu próprio visualizador de conteúdo:
Diferenciador é um mecanismo de diferenciação para dados estruturados hierarquicamente. Ele obtém duas ou três entradas e executa uma comparação em duas ou três vias.
Se os elementos de entrada para o mecanismo de diferenciação implementarem a interface IStructureComparator, o mecanismo aplicará recursivamente a si mesmo nos filhos do elemento de entrada. Os elementos folha devem implementar a interface IStreamContentAccessor para que o diferenciador possa executar uma comparação de bytes em seu conteúdo.
Há alguns bons exemplos de diferenciadores incluídos na implementação da plataforma:
Por padrão, o mecanismo de diferenciação retorna o resultado da operação de comparação como uma árvore de objetos DiffNode. Um DiffNode descreve as alterações entre duas ou três entradas. O tipo dos nós resultantes pode ser alterado substituindo-se um único método do mecanismo.
Uma árvore de DiffNodes pode ser exibida em um DiffTreeViewer. O DiffTreeViewer requer que os nós internos da árvore implementem a interface IDiffContainer e as folhas implementem a interface IDiffElement.
As etapas comuns para comparar dados estruturados hierarquicamente e para exibir as diferenças são as seguintes:
O ZipFileStructureCreator é uma implementação da interface IStructureCreator e disponibiliza o conteúdo de um archive zip como uma estrutura hierárquica de IStructureComparators que podem ser facilmente comparados pelo mecanismo de diferenciação (Diferenciador). É um bom exemplo de como disponibilizar arquivos estruturados para a funcionalidade de comparação hierárquica do plug-in de comparação.