構造ビューアーのインプリメント

構造マージ・ビューアーは、その入力について 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 インターフェースをリーフ化することを必要とします。

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

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

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

Copyright IBM Corporation and others 2000, 2003.