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