Implementar un visor de estructuras

El conector de comparación proporciona soporte suficiente para permitirle implementar su propio visor de contenido:

Diferenciador 

El objeto Differencer es un motor de diferenciación para datos estructurados jerárquicamente. Toma dos o tres entradas y realiza entre ellas una comparación de dos o tres vías.

Si los elementos de entrada del motor de diferenciación implementan la interfaz IStructureComparator, el motor se aplica recursivamente sobre los hijos del elemento de entrada. Los elementos hoja deben implementar la interfaz IStreamContentAccessor para que el diferenciador pueda realizar una comparación a nivel de bytes entre su contenido.

Hay algunos buenos ejemplos de diferenciadores incluidos en la implementación de la plataforma:

Por omisión, el motor de diferenciación devuelve el resultado de la operación de comparación en forma de árbol de objetos DiffNode. El objeto DiffNode describe los cambios que se observan entre dos o tres entradas. El tipo de nodos de resultado se puede cambiar alterando temporalmente un método individual del motor.

Visores de diferencias

Un árbol de objetos DiffNode se puede visualizar en un objeto DiffTreeViewer. En el objeto DiffTreeViewer, los nodos internos del árbol deben implementar la interfaz IDiffContainer, y las hojas deben implementar la interfaz IDiffElement.

Los pasos habituales que permiten comparar datos estructurados jerárquicamente y visualizar las diferencias son los siguientes:

  1. correlacionar los datos de entrada con un árbol de objetos que implementen las interfaces IStructureComparator y IStreamContentAccessor.
  2. realizar la operación de comparación por medio del objeto Differencer, y
  3. llevar el resultado de la diferenciación al visor DiffTreeViewer.
El objeto StructureDiffViewer es un visor DiffTreeViewer especializado que automatiza los tres pasos descritos anteriormente. Toma un solo objeto entrada de tipo ICompareInput del que recupera los dos o tres elementos de entrada que deben compararse. Utiliza una interfaz IStructureCreator para extraer a partir de ellos un árbol que contenga objetos IStructureComparator e IStreamContentAccessor. Posteriormente se comparan estos árboles con el motor de diferenciación y el resultado se muestra en el visor del árbol.

El objeto ZipFileStructureCreator es una implementación de la interfaz IStructureCreator y hace que el contenido de un archivado zip esté disponible en forma de estructura jerárquica de interfaces IStructureComparator, que se pueden comparar fácilmente por medio del motor de diferenciación (Differencer). Este es un buen ejemplo de cómo hacer que los archivos estructurados estén disponibles para la función de comparación jerárquica del conector de comparación.

Copyright IBM Corp. y otros 2000, 2002.