<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="Author" content="IBM">
   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
   <title>Package-level Javadoc</title>
</head>
<body>
Provides support for finding and displaying the differences
between hierarchically structured data.
<h2>
Package Specification</h2>

The class <b>Differencer</b> is a differencing engine for hierarchically
structured data. It takes two or three inputs and performs a two-way or
three-way compare on them.
<p>

If the input elements to the differencing engine implement the <b>IStructureComparator</b>
interface the engine recursively applies itself to the children of
the input element. Leaf elements must implement the <b>org.eclipse.compare.IStreamContentAccessor</b>
interface so that the differencer can perform a bytewise comparison on their contents.
<p>

One good example for this is <b>org.eclipse.compare.ResourceNode</b> which implements both interfaces
(and more) for Eclipse workspace resources (org.eclipse.core.resources.IResource).
<p>

Another example is the <b>DocumentRangeNode</b> which can be used to compare hierarchical structures
that are superimposed on a document, that is where nodes and leafs correspond to ranges in a document
(<b>org.eclipse.compare.contentmergeviewer.IDocumentRange</b>).
<br>
Typically <b>DocumentRangeNode</b>s are created while parsing a document and they represent
the semantic entities of the document (e.g. a Java class, method or field).
The two subclasses <b>JavaNode</b> (in org.eclipse.jdt.internal.ui.compare)
and <b>PropertyNode</b> (in org.eclipse.jdt.internal.ui.compare) are good examples for this.
<p>

By default the differencing engine returns the result of the compare operation
as a tree of <b>DiffNode</b> objects. However, this can be changed by overriding
a single method of the engine.
<p>

Every <b>DiffNode</b> describes the changes among the two or three inputs.
<p>

A tree of <b>DiffNodes</b> can be displayed in a <b>DiffTreeViewer</b>.
The <b>DiffTreeViewer</b> requires that inner nodes of the tree implement
the <b>IDiffContainer</b> interface and leafs the <b>IDiffElement</b> interface.
<p>

The typical steps to compare hierarchically structured data and to display
the differences would be to:
<ul>
<li>
map the input data into a tree of <b>IStructureComparator</b> and <b>IStreamContentAccessor</b>s,</li>

<li>
perform the compare operation by means of the <b>Differencer</b>, and</li>

<li>
feed the differencing result into the <b>DiffTreeViewer</b>.</li>

</ul>

The <b>StructureDiffViewer</b> is a specialized <b>DiffTreeViewer</b>
that automates the three steps from above. It takes a single input object
of type <b>ICompareInput</b> from which it retrieves the two or three
input elements to compare. Then it uses a <b>IStructureCreator</b> to
extract a tree of <b>IStructureComparator</b> and <b>IStreamContentAccessor</b>
from them. These trees are then compared with the differencing engine and
the result is displayed in the tree viewer.
<p>



</body>
</html>
