Técnicas de comparación avanzadas

En este apartado se facilita información adicional sobre la API avanzada del conector de comparación.

Escribir operaciones de comparación

Una operación de comparación debe implementarse como subclase de CompareEditorInput.  El objeto CompareEditorInput efectúa una operación de comparación (que puede ser de larga duración) bajo el control de un supervisor de progreso, crea una UI para sondear el resultado de la comparación, hace un seguimiento del estado desechable del resultado en caso de fusión, y guarda los cambios que se hayan producido durante la fusión.

La clase CompareUI define el punto de entrada que permite iniciar una operación de comparación configurable en recursos arbitrarios. El resultado de la comparación se abre en un editor de comparaciones, en el que los detalles se pueden examinar y editar en visores de estructura y contenido seleccionados dinámicamente.

El objeto NavigationAction permite navegar (recorrer) por las diferencias individuales de una CompareEditorInput.

El objeto CompareConfiguration configura los diversos aspectos de la UI de los visores de comparación/fusión, como las etiquetas de título y las imágenes, o si un lado del visor de fusión es editable. Este objeto se pasa a CompareEditorInput en el momento de la creación.

Al implementar una operación de comparación jerárquica como subclase de CompareEditorInput, los clientes deben proporcionar un árbol de objetos en el que cada nodo implemente la interfaz IStructureComparator. El motor de diferenciación jerárquica (Differencer) utiliza esta interfaz para recorrer el árbol.
Además, cada hoja del árbol debe implementar la interfaz IStreamContentAccessor para dar al motor de diferenciación acceso al correspondiente contenido de la corriente.

El objeto BufferedContent proporciona una implementación por omisión para las interfaces IStreamContentAccessor e IContentChangeNotifier. La correspondiente subclase ResourceNode aporta una implementación para las interfaces IStructureComparator e ITypedElement tomando como base los recursos del entorno de trabajo de la plataforma (IResource). Puede utilizarse sin modificaciones como entrada del motor de diferenciación.

La función de comparación fuera de los editores de comparación

Si desea utilizar la función de comparación fuera del editor de comparación estándar( por ejemplo, en un diálogo o en un asistente) el conector de comparación proporciona clases de ayuda adicionales.

CompareViewerPane es una clase de conveniencia que proporciona una etiqueta y una barra de herramientas local para un visor de comparación (o para cualquier otra subclase de un visor JFace).  La correspondiente subclase abstracta CompareViewerSwitchingPane da soporte a la conmutación dinámica de visor, que hace que el visor instalado en el panel venga determinado dinámicamente por el objeto entrada del panel.

El objeto EditionSelectionDialog es un diálogo de selección simple en el que se puede comparar un solo elemento de entrada con una lista de variantes históricas (ediciones) del mismo elemento de entrada. El diálogo permite implementar funciones como "Sustituir por historial local" en los recursos del entorno de trabajo.

Además, es posible especificar una subsección del elemento de entrada (por ejemplo, un método de un archivo fuente Java) por medio de una vía de acceso. En este caso, el diálogo solo compara la subsección (tal como está especificada por la vía de acceso) con la correspondiente subsección de la lista de ediciones. Esta funcionalidad permite implementar la función "Sustituir por elemento del historial local" para los elementos Java.

El objeto EditionSelectionDialog exige que las ediciones implementen las interfaces IStreamContentAccessor e IModificationDate. HistoryItem es una clase de conveniencia que implementa estas interfaces para objetos IFileState.