2012-08-14 30 views
0

拥有基于相同元模型的2个模型。我可以使用EMF Compare来接收Diff模型。就我而言,一种模式是新版本的旧版本。EMF:模型差异作为更改模型/命令

a)如何接收变更模型,描述从旧变更为新变更模型?

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

我不想因各种原因来替换EObject元素。使用EMF比较不是必需的。

回答

1

我也回答了你在Eclipse论坛,但堆栈溢出的用户,可能就这个问题绊倒,这里是我的回答:

  • 使用EMF比较1.3

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

  • 使用EMF比较2

    EMF比较目前2是处在发展阶段,尽管合并还没有命令中完成的,这是我们这个版本的目标。但是,您可以使用此新版本更轻松地获取ChangeModel。你需要的是创建你自己的IDiffProcessor并使用它来实例化DefaultDiffEngine。每当我们检测到引用或属性上的差异时,Diff处理器将被通知。然后您可以创建相应的ChangeModel。