Implementazione di un visualizzatore di struttura

Un visualizzatore di unione struttura esegue un confronto bidirezionale o a tre vie de i propri input, presenta i risultati in una vista gerarchica e consente all'utente di unire gli input.   Questo tipo di visualizzatore è molto comune per le risorse dello spazio di lavoro o per i membri di un file di archivio.

Visualizzatori con struttura ad albero

Dal momento che l'implementazione di numerosi visualizzatori di confronto delle strutture si basa su una struttura ad albero, il plug-in di confronto fornisce un generico StructureDiffViewer basato sulla struttura ad albero.  Il plug-in fornisce un creatore di struttura che suddivide un singolo oggetto di input in una struttura gerarchica.   StructureDiffViewer esegue il confronto sulla struttura ottenuta e i risultati vengono visualizzati come una struttura ad albero.

Il creatore della struttura viene designato per il plug-in utilizzando l'estensione org.eclipse.compare.structureCreators.

Altri visualizzatori di struttura gerarchica

In alcuni casi, il StructureDiffViewer basato sulla struttura ad albero potrebbe non risultare appropriato per il plug-in in uso.   Il punto di estensione org.eclipse.compare.structureMergeViewers consente di definire la propria implementazione per un visualizzatore di unione di struttura.   Le classi di utilità vengono fornite per semplificare l'implementazione del visualizzatore.

Differenziatore 

Ildifferenziatore è un modulo di differenziazione per i dati strutturati gerarchicamente, che esegue confronti simultanei bidirezionali o a tre direzioni tra i due o i tre input richiesti.

Se gli elementi di input per il modulo di differenziazione implementano l'interfaccia IStructureComparator, il modulo applica in modo ricorsivo se stesso agli elementi secondari dell'elemento di input. Gli elementi foglia devono implementare l'interfaccia IStreamContentAccessor in modo che il differenziatore possa eseguire un confronto sulla base dei byte del rispettivo contenuto.

Esistono diversi buoni esempi di differenziatori inclusi nell'implementazione della piattaforma:

Per impostazione predefinita il motore di differenziazione riporta il risultato dell'operazione di confronto in una struttura di oggetti DiffNode.  Un DiffNode descrive le modifiche tra due o tre input.  Il tipo di nodi del risultato può essere modificato sostituendo un singolo metodo del motore.

Visualizzatori di differenze

Una struttura di DiffNodes può essere visualizzata in un DiffTreeViewer. DiffTreeViewer richiede che i nodi interni della struttura implementino l'interfaccia IDiffContainer e le foglie implementano l'interfaccia IDiffElement.

I passi tipici per confrontare i dati strutturati gerarchicamente e per visualizzare le differenze sono i seguenti:

  1. Mappare i dati di input in una struttura di oggetti implementando le interfacce IStructureComparator e IStreamContentAccessor
  2. Eseguire l'operazione di confronto mediante il Differenziatore
  3. Aggiungere il risultato della differenziazione nel DiffTreeViewer
StructureDiffViewer è un DiffTreeViewer specializzato che automatizza i tre passi descritti. Esso richiede un singolo oggetto di input del tipo ICompareInput dal quale ricava i due o tre elementi di input da confrontare.  Utilizza unIStructureCreator per estrarre una struttura contenente oggetti IStructureComparator e IStreamContentAccessor.  Tali strutture vengono quindi confrontate con il motore di differenziazione e il risultato viene visualizzato nel visualizzatore di struttura.

ZipFileStructureCreator è un'implementazione dell'interfaccia IStructureCreator e rende il contenuto di un'archivio zip disponibile come struttura gerarchica di IStructureComparators che può facilmente essere confrontata dal modulo di differenziazione (Differencer). È un buon esempio di come rendere i file strutturati disponibili per la funzionalità di confronto gerarchico del plug-in di confronto.

Copyright IBM Corporation e altri 2000, 2003.