有2个基于同一元模型的模型。我可以使用EMF比较来接收差异模型。就我而言,一个模型是新版本的旧版本。
a) 我如何收到一个变更模型,描述从旧到新的变更?
b) 如果这不是默认 EMF 更改模型的实例,是否可以在旧模型上创建一个执行这些更改的命令?
由于各种原因,我不想替换EObject元素。使用 EMF 比较不是强制性的。
我也在 Eclipse 论坛上回答了你,但对于可能会偶然发现这个问题的堆栈溢出用户,这是我的答案:
-
使用电动势比较 1.3
您需要以编程方式调用差异过程(MatchService.match然后是DiffService.diff)来检索DiffModel。之后,您可以从自己的命令中应用所有这些差异(将 MergeService.merge 的调用封装在 RecordingCommand 中)。从那里,你可以合并命令中的所有差异,并在需要时检索相应的ChangeModel(我们没有从DiffModel到ChangeModel的转换)。这很麻烦,但如果您处于可以合并的上下文中,则可以这样做(如果您只需要 ChangeModel,则没有什么能阻止您之后撤消命令)。在我们完成烹饪之前,可能是最安全的方法 EMF 比较 2.0。
-
使用电动势比较 2
EMF Compare 2 目前处于开发阶段,虽然尚未在命令内完成合并,但这是我们此版本的目标。但是,您可以使用此新版本更轻松地获取更改模型。您需要的是创建自己的 IDiffProcessor 并使用它来实例化 DefaultDiffEngine。每当我们检测到引用或属性的差异时,都会通知差异处理器。然后,您可以创建相应的变更模型。