構造ビューアーの実装

構造体マージ・ビューアーは、その入力について双方向または 3 方向比較を実行し、結果を階層ビューで表示し、ユーザーによる入力間のマージを可能にします。 構造体マージ・ビューアーは、ワークスペース・リソースまたはアーカイブ・ファイルのメンバーにとって共通のものです。 

ツリー構造ビューアー

多くの構造比較ビューアーの実装はツリーに基づいているため、比較プラグインは汎用ツリー・ベースの StructureDiffViewer を 提供します。 プラグインは、1 つの入力オブジェクトを階層構造に分割する構造体クリエーターを提供しなければなりません。 StructureDiffViewer は、 結果として生成された構造の比較を実行し、結果をツリー表示します。

プラグイン用の構造体クリエーターは、org.eclipse.compare.structureCreators 拡張を使用して指定します。 コンテンツ・ビューアーと同様に、構造体クリエーターをファイル拡張子のセットに対して指定するか、または contentTypeBinding を使用して、コンテンツ型を特定の構造体クリエーターに関連付けることができます。 マークアップは、コンテンツ・ビューアーに非常に似ているため、ここでは説明しません。 JDT プラグインは、org.eclipse.compare.structureCreators へのコントリビューションをいくつか定義します。

その他の階層構造ビューアー

場合によっては、ツリー・ベースの StructureDiffViewer は、 プラグインに適さない可能性があります。 org.eclipse.compare.structureMergeViewers 拡張ポイントによって、構造体マージ・ビューアー用の独自の実装を定義することができます。  構造体マージ・ビューアーをファイル拡張子に対して指定するか、または contentTypeBinding を使用して、コンテンツ型を特定の構造体マージ・ビューアーに関連付けることができます。org.eclipse.compare.structureMergeViewers のコントリビューションの例については、『JDT プラグイン』を参照してください。

検索プラグインは、検索ビューアーを実装するのに役立つユーティリティー・クラスを幾つか提供します。

ディファレンサー 

Differencer は、階層構造のデータ用の相違検出エンジンです。 2 つまたは 3 つの入力を取り込み、それらに対して両方向または 3 方向比較を実行します。

相違検出エンジンへの入力エレメントが IStructureComparator インターフェースをインプリメントする場合、エンジンは再帰的にそれ自身を入力エレメントの子に適用します。 ディファレンサーがバイト単位でコンテンツを比較できるよう、リーフ・エレメントは IStreamContentAccessor インターフェースをインプリメントする必要があります。

プラットフォームの実装には、ディファレンサーの例がいくつか含まれています。

デフォルトでは、相違検出エンジンは、比較操作の結果を DiffNode オブジェクトのツリーとして戻します。 DiffNode は、2 つまたは 3 つの入力間の変更を記述します。 結果ノードのタイプは、エンジンの単一メソッドをオーバーライドすることによって変更できます。

相違ビューアー

DiffNode のツリーは、DiffTreeViewer に表示できます。 DiffTreeViewer は、ツリーの内部ノードが IDiffContainer インターフェースをインプリメントし、IDiffElement インターフェースをリーフ化することを必要とします。

階層構造のデータを比較して相違を表示するための一般的なステップは、以下のとおりです。

  1. 入力データを IStructureComparator および IStreamContentAccessor のツリーにマップする
  2. Differencer を使用して比較操作を実行する
  3. 相違検出結果を DiffTreeViewer に送る

StructureDiffViewer は、上記の 3 つのステップを自動化する特殊な DiffTreeViewer です。 型 ICompareInput の入力オブジェクトを 1 つだけ取り込み、そこから比較する入力エレメントを 2 つまたは 3 つ取り出します。 さらに、IStructureCreator を使用して、 入力エレメントから IStructureComparator および IStreamContentAccessor のツリーを取り出します。  これらのツリーは相違検出エンジンで比較され、結果はツリー・ビューアーに表示されます。 

ZipFileStructureCreator は、IStructureCreator インターフェースの実装であり、ZIP アーカイブのコンテンツを、相違検出エンジン (Differencer) によって簡単に比較できる IStructureComparator の階層構造として使用できるようにします。 これは、比較プラグインの階層比較機能に使用できる構造化ファイルを作成する方法の一例です。