Esta seção fornece informações adicionais sobre a API avançada no plug-in de comparação.
Uma operação de comparação deve ser implementada como uma subclasse de CompareEditorInput. Um CompareEditorInput executa uma operação de comparação (potencialmente extensa) sob controle do monitor de progresso, cria uma UI para pesquisa nos resultados da comparação, rastreia o estado sujo do resultado em caso de combinação e salva as alterações ocorridas durante uma combinação.
CompareUI define o ponto de entrada para iniciar uma operação de comparação configurável em recursos arbitrários. O resultado da comparação é aberto em um editor de comparação em que os detalhes podem ser pesquisados e editados em visualizadores de estrutura e conteúdo selecionados dinamicamente.
NavigationAction é utilizado para navegar (passar) pelas diferenças individuais de um CompareEditorInput.
CompareConfiguration configura vários aspectos da UI de visualizadores de comparação/combinação, como rótulos de títulos e imagens, ou se um lado de um visualizador de combinação é editável. Ele é passado para o CompareEditorInput na criação.
Ao implementar uma operação de comparação hierárquica como uma classe filha de
CompareEditorInput,
os clientes devem fornecer uma árvore de objetos em que cada
nó implementa a interface
IStructureComparator.
Essa interface é utilizada pelo mecanismo de diferenciação hierárquica
(Diferenciador) para caminhar pela árvore.
Além disso, cada folha da árvore precisa implementar a interface
IStreamContentAccessor
para fornecer ao mecanismo de diferenciação acesso ao conteúdo de seu fluxo.
BufferedContent fornece uma implementação padrão para as interfaces IStreamContentAccessor e IContentChangeNotifier. Sua classe filha ResourceNode inclui uma implementação para as interfaces IStructureComparator e ITypedElement com base nos recursos de workbench da plataforma (IResource). Pode ser utilizada sem modificação como entrada para o mecanismo de diferenciação.
Para utilizar a funcionalidade de comparação fora do editor de comparação padrão, por exemplo, em um diálogo ou assistente, o plug-in de comparação fornece classes auxiliares adicionais:
CompareViewerPane é uma classe oportuna que fornece um rótulo e uma barra de ferramentas local para um visualizador de comparação (ou qualquer outra subclasse de um visualizador JFace). Sua subclasse abstrata CompareViewerSwitchingPane suporta troca dinâmica do visualizador, isto é, o visualizador instalado no painel é determinado dinamicamente pelo objeto de entrada do painel.
EditionSelectionDialog é um diálogo de seleção simples em que um elemento de entrada pode ser comparado com uma lista de variantes históricas (edições) do mesmo elemento de entrada. O diálogo é utilizado para implementar funções do tipo "Substituir pelo Histórico Local" nos recursos do workbench.
Além disso, é possível especificar uma subseção do elemento de entrada (isto é, um método em um arquivo fonte Java) por meio de um caminho.. Nesse caso, o diálogo compara apenas a subseção (conforme especificado pelo caminho) com a subseção correspondente na lista de edições. Essa funcionalidade pode ser utilizada para implementar "Substituir pelo Elemento do Histórico Local" para Elementos Java.
O EditionSelectionDialog requer que as edições implementem as interfaces IStreamContentAccessor e IModificationDate. O HistoryItem é uma classe oportuna que implementa essas interfaces para objetos IFileState.