Técnicas avançadas de comparação

Esta secção proporciona informações adicionais sobre APIs avançadas no plug-in Compare.

Escrever operações de comparação

Uma operação de comparação deve ser implementada como subclasse de CompareEditorInputCompareEditorInput executa uma operação de comparação (potencialmente morosa) sob controlo de um supervisor de progresso, cria uma UI para aprofundar os resultados da comparação, rastreia o mau estado dos resultados em caso de intercalação, e guarda alterações que tenham ocorrido durante uma intercalaçã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 abre-se num editor de comparações onde se pode visualizar e editar os detalhes, em visualizadores de estruturas e conteúdos seleccionados dinamicamente.

Utiliza-se NavigationAction para navegar (avançar) nas diferenças individuais de um CompareEditorInput.

CompareConfiguration configura diversos aspectos de UI de visualizadores de comparação/intercalação, como etiquetas de títulos e imagens, ou se a parte lateral de um visualizador de intercação é ou não editável. É transmitida a CompareEditorInput aquando da criação.

Ao implementar uma operação de comparação hierárquica como subclasse de CompareEditorInput, os clientes devem facultar uma árvore de objectos em que cada nó implemente a interface IStructureComparator. Esta interface é utilizada pelo motor de diferenciação hierárquica (Differencer) para percorrer a árvore.
Além disso, cada ramificação da árvore deve implementar a interface IStreamContentAccessor para poder dar ao motor de diferenciação acesso ao conteúdo da sua sequência.

BufferedContent proporciona uma implementação predefinida para as interfaces IStreamContentAccessor e IContentChangeNotifier. A respectiva subclasse ResourceNode adiciona uma implementação para as interfaces IStructureComparator e ITypedElement com base em recursos da área de trabalho da plataforma (IResource). Pode ser utilizada sem modificações como entrada de dados para o motor de diferenciação.

Funcionalidades de comparação fora de editores de comparações

Se quiser utilizar funcionalidades de comparação fora do editor de comparações padrão (por exemplo, num diálogo ou assistente), o plug-in Compare proporciona classes ajudantes adicionais.

CompareViewerPane é uma classe de conveniência que proporciona uma etiqueta e uma barra de ferramentas local para um visualizador de comparações (ou qualquer outra subclasse de um Visualizador JFace). A respectiva subclass abstracta CompareViewerSwitchingPane suporta comutação dinâmica de visualizadores, ou seja, o visualizador instalado na área de janela é dinamicamente determinado pelo objecto de entrada de dados da área de janela.

EditionSelectionDialog é um simples diálogo de selecção em que um elemento de entrada de dados pode ser comparado a uma lista de variantes de histórico (edições) do mesmo elemento de entrada de dados. O diálogo é utilizado para implementar funções como "Substituir por Histórico Local" em recursos de área de trabalho.

Além disso, é possível especificar uma subsecção do elemento de entrada de dados (p.ex., um método no ficheiro origem Java) mediante um caminho. Neste caso, o diálogo compara somente a subsecção (conforme especificada no caminho) com a subsecção correspondente na lista de edições. Esta funcionalidade pode ser usada para implementar "Substituir por Elemento do Histórico Local" para Elementos Java.

EditionSelectionDialog implica que as edições implementem as interfaces IStreamContentAccessor e IModificationDate. HistoryItem é uma classe de conveniência que implementa estas interfaces para objectos IFileState.