0

同じメタモデルに基づく2つのモデルを持つ。EMFCompareを使用してDiffモデルを受け取ることができます。私の場合、1つのモデルは新しいモデルの古いバージョンです。

a)古いものから新しいものへの変更を説明する変更モデルを受け取るにはどうすればよいですか?

b)これがデフォルトのEMF変更モデルのインスタンスではない場合、古いモデルでこれらの変更を実行するコマンドを作成することは可能ですか?

さまざまな理由でEObject要素を置き換えたくありません。EMFCompareの使用は必須ではありません。

4

1 に答える 1

1

私もEclipseフォーラムであなたに答えましたが、この質問に出くわす可能性のあるスタックオーバーフローユーザーのために、ここに私の答えがあります:

  • EMFCompare1.3の使用

    DiffModelを取得するには、プログラムでdiffプロセス(MatchService.match、次にDiffService.diff)を呼び出す必要があります。その後、独自のコマンド内からこれらすべての差分を適用できます(MergeService.mergeへの呼び出しをRecordingCommand内にカプセル化します)。そこから、コマンドからすべての差分をマージし、必要に応じて対応するChangeModelを取得できます(DiffModelからChangeModelへの変換はありません)。これは面倒ですが、マージできるコンテキストにいる場合は実行可能です(ChangeModelのみが必要な場合は、後でコマンドを元に戻すことを妨げるものはありません)。EMF Compare 2.0の調理が終了するまでは、おそらく最も安全な方法です。

  • EMFCompare2の使用

    EMF Compare 2は現在開発段階にあり、コマンド内でのマージはまだ行われていませんが、このバージョンでの目標です。ただし、この新しいバージョンを使用すると、ChangeModelをより簡単に入手できます。必要なのは、独自のIDiffProcessorを作成し、それを使用してDefaultDiffEngineをインスタンス化することです。参照または属性の違いを検出すると、Diffプロセッサに通知されます。次に、対応するChangeModelを作成できます。

于 2012-08-22T08:24:37.503 に答える