基于相同的元模型有2个模型。我可以使用EMF Compare来接收Diff模型。在我的例子中,一个模型是新模型的旧版本。
a)我如何收到变更模型,描述从旧模型到新模式的变化?
b)如果这不是默认EMF更改模型的实例,是否可以在旧模型上创建执行这些更改的命令?
我不想因各种原因替换EObject元素。使用EMF比较不是强制性的。
答案 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。