Um visualizador de mesclagem de estrutura desempenha uma comparação de duas ou três vias de suas entradas, apresenta o resultado em uma exibição hierárquica e permite que o usuário mescle entre as entradas. Os visualizadores de mesclagem de estrutura são comuns para os recursos de espaço de trabalho ou para os membros de um arquivo archive.
Como a implementação de vários visualizadores de comparação de estrutura baseia-se em uma árvore, o plug-in de comparação fornece um StructureDiffViewer baseado em uma árvore genérica. Seu plug-in é responsável por fornecer um criador de estrutura que divide um objeto único de entrada em uma estrutura hierárquica. O StructureDiffViewer desempenha a comparação na estrutura resultante e exibe o resultado como uma árvore.
Você designa um criador de estrutura para seu plug-in utilizando a extensão org.eclipse.compare.structureCreators.
Em alguns casos, o StructureDiffViewer baseado em árvore pode não ser apropriado para seu plug-in. O ponto de extensão org.eclipse.compare.structureMergeViewers permite definir sua própria implementação para um visualizador de mesclagem de estrutura. As classes de utilitário são fornecidas para ajudar a implementar o visualizador.
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 de resultado pode ser alterado substituindo 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.