Implementando um Visualizador de Estrutura

O plug-in de comparação fornece suporte substancial para implementação de seu próprio visualizador de conteúdo:

Diferenciador 

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.

Visualizadores de Diferença

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:

  1. mapear os dados de entrada para uma árvore de objetos que implementa as interfaces IStructureComparator e IStreamContentAccessor,
  2. executar a operação de comparação por meio do Diferenciador e
  3. alimentar o resultado da diferenciação no DiffTreeViewer.
O StructureDiffViewer é um DiffTreeViewer especializado que automatiza as três etapas descritas acima. Ele obtém um único objeto de entrada do tipo ICompareInput do qual recupera os dois ou três elementos de entrada para comparação. Utiliza um IStructureCreator para extrair uma árvore contendo os objetos IStructureComparator e IStreamContentAccessor. Essas árvores são, então, comparadas com o mecanismo de diferenciação e o resultado é exibido no visualizador de árvores.

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.

Copyright IBM Corp. e outros 2000,2002.