EMF:模型差异为变更模型/命令

时间:2012-08-14 10:56:10

标签: model comparison diff eclipse-emf eclipse-emf-ecore

基于相同的元模型有2个模型。我可以使用EMF Compare来接收Diff模型。在我的例子中,一个模型是新模型的旧版本。

a)我如何收到变更模型,描述从旧模型到新模式的变化?

b)如果这不是默认EMF更改模型的实例,是否可以在旧模型上创建执行这些更改的命令?

我不想因各种原因替换EObject元素。使用EMF比较不是强制性的。

1 个答案:

答案 0 :(得分:1)

我也在Eclipse论坛上回答过您,但对于可能偶然发现此问题的堆栈溢出用户,我的回答是:

  • 使用EMF Compare 1.3

    您需要以编程方式调用diff进程(MatchService.match然后是DiffService.diff)来检索DiffModel。之后,您可以在自己的命令中应用所有这些差异(将调用封装在RecordingCommand中的MergeService.merge中)。从那里,您可以合并命令中的所有差异,并在需要时检索相应的ChangeModel(我们没有从DiffModel到ChangeModel的转换)。这很麻烦,但如果您处于可以合并的上下文中,则可以执行此操作(如果您只需要ChangeModel,则无法阻止您在之后撤消命令)。可能是我们完成烹饪EMF Compare 2.0之前最安全的方法。

  • 使用EMF比较2

    EMF Compare 2目前正处于开发阶段,虽然在命令中尚未完成合并,但我们的目标是使用此版本。但是,您可以使用此新版本更轻松地获取ChangeModel。您需要的是创建自己的IDiffProcessor并使用它来实例化DefaultDiffEngine。每当我们检测到引用或属性的差异时,将通知Diff处理器。然后,您可以创建相应的ChangeModel。