EMF比较 - 如何忽略标识符

时间:2015-04-07 11:16:02

标签: eclipse emf ecore emf-compare

我有2个模型可供比较。在我的* .ecore模型中,我有一个“Id”属性,其ID属性已设置为 true 。我正在使用EcoreUtil.generateUUID()来获取唯一的ID。

在我的情况下,我有一个准备好的模型,我在运行时创建一个新模型。因此,ID彼此不同。

在EMFCompare的开发者指南中,他们提供我们使用 UseIdentifiers.NEVER ;

IEObjectMatcher matcher = DefaultMatchEngine.createDefaultEObjectMatcher(UseIdentifiers.NEVER);

但是,它会产生每个节点的数学,其ID如下所示:

  

左对象:DocModel.impl.ParagraphImpl@2767e23c(Id:_8pidAdVSEeSCK78kxjXrDg)(name:null)(rawText:Lorem ipsum ....)

     

正确的对象:DocModel.impl.ParagraphImpl@33bc72d1(Id:_QSFJodrUEeSkqsl19NdwQQ)(name:null)(rawText:Lorem ipsum ....)

     

d.getKind():CHANGE

我猜比较会看到他们因为不同的ID而改变。

简而言之,我想在比较中忽略Id属性。

感谢和问候

1 个答案:

答案 0 :(得分:0)

在给你答案之前,我想理解。

Emf compare使用两种不同的匹配对象的方式。第一个是 Id功能,另一个是关于一个组中对象之间的计算距离。默认情况下,emf compare使用混合方法。如果元素的 id函数可用,则调用它,否则它将使用距离函数匹配最近邻居的对象。因此,在创建匹配器时,应指定策略。在您的情况下,您选择永远不使用id函数。

DefaultMatchEngine.createDefaultEObjectMatcher(UseIdentifiers.NEVER);

实际比较不在匹配引擎中,而是在 diff引擎中。 您只需要扩展 DefaultDiffEngine 并覆盖 createFeatureFilter 方法,即可为您提供 FeatureFilter

相关问题