構造マージ・ビューアーは、その入力について 2 方向または 3 方向比較を実行し、結果を階層ビューで表示し、 ユーザーによる入力間のマージを可能にします。 構造マージ・ビューアーは、ワークスペース・リソースまたはアーカイブ・ファイルのメンバーにとって共通のものです。
多くの構造比較ビューアーのインプリメンテーションはツリーに基づいているため、比較プラグインは汎用ツリー・ベースの StructureDiffViewer を 提供します。 プラグインは、1 つの入力オブジェクトを階層構造に分割する構造クリエーターを提供しなければなりません。 StructureDiffViewer は、 結果として生成された構造の比較を実行し、結果をツリー表示します。
プラグイン用の構造クリエーターは、org.eclipse.compare.structureCreators 拡張を使用して指定します。
場合によっては、ツリー・ベースの StructureDiffViewer は、 プラグインに適さない可能性があります。 org.eclipse.compare.structureMergeViewers 拡張ポイントによって、構造マージ・ビューアー用の独自のインプリメンテーションを定義することができます。 ビューアーをインプリメントするため、ユーティリティー・クラスが提供されています。
Differencer は、階層構造のデータ用の相違検出エンジンです。 2 つまたは 3 つの入力を取り込み、それらに対して両方向または 3 方向比較を実行します。
相違検出エンジンへの入力エレメントが IStructureComparator インターフェースをインプリメントする場合、エンジンは再帰的にそれ自身を入力エレメントの子に適用します。 ディファレンサーがバイト単位でコンテンツを比較できるよう、リーフ・エレメントは IStreamContentAccessor インターフェースをインプリメントする必要があります。
プラットフォームのインプリメンテーションには、ディファレンサーの例がいくつか含まれています。
デフォルトでは、相違検出エンジンは、比較操作の結果を DiffNodeオブジェクトのツリーとして戻します。 DiffNode は、2 つまたは 3 つの入力間の変更を記述します。 結果ノードのタイプは、エンジンの単一メソッドをオーバーライドすることによって変更できます。
DiffNode のツリーは、DiffTreeViewer に表示できます。 DiffTreeViewer は、ツリーの内部ノードが IDiffContainer インターフェースをインプリメントし、IDiffElement インターフェースをリーフ化することを必要とします。
階層構造のデータを比較して相違を表示するための一般的なステップは、以下のとおりです。
ZipFileStructureCreatorは、IStructureCreator インターフェースのインプリメンテーションであり、ZIP アーカイブのコンテンツを、相違検出エンジン (Differencer) によって簡単に比較できる IStructureComparator の階層構造として使用できるようにします。 これは、比較プラグインの階層比較機能に使用できる構造化ファイルを作成する方法の一例です。