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 subclasse de CompareEditorInput. Um CompareEditorInput executa uma operação de comparação (provavelmente longa) sob o controle do monitor de progresso, cria uma UI para pesquisar os resultados de comparação, monitora o estado com erros do resultado no caso de uma mesclagem e salva quaisquer alterações ocorridas durante uma mesclagem.
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.
Se você desejar 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 fornecerá 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 de JFace). Sua subclasse abstrata CompareViewerSwitchingPane suporta a comutação dinâmica do visualizador, ou seja, o visualizador instalado na área de janela é determinado dinamicamente pelo objeto de entrada da área de janela.
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 (por ex., um método em um arquivo fonte Java) através 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.