2015-04-07 65 views
0

我有2个模型来比较。在我的* .ecore模型中,我有一个“Id”属性,它的ID属性设置为true。我正在使用EcoreUtil.generateUUID()作为唯一的ID。EMF比较 - 如何忽略标识符

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

在EMFCompare的开发人员指南,他们为我们提供使用UseIdentifiers.NEVER;

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

尽管如此,它产生每节点符合项目具有像下面ID:

左对象:[email protected](ID:_8pidAdVSEeSCK78kxjXrDg)(名称:空)(rawText:的Lorem存有....)

右对象:[email protected](ID:_QSFJodrUEeSkqsl19NdwQQ)(名称:空)(rawText:Lorem存有....)

d.getKind():变更

我想比较看到他们改变由于不同的id。

总之,我想忽略Id属性的比较。

感谢和问候

+0

如果您不使用ID进行比较,那么它究竟是什么? –

+0

关于ID usege的原因你是对的。但是,EMF Compare允许我们忽略ID。我想比较除ID域之外的整个模型。 –

回答

0

之前给你一个答案,我不想落入理论。

Emf比较使用两种不同的方式匹配对象。第一个是Id功能,另一个是大约计算距离之间的一个组中的对象。默认情况下,emf比较使用混合方法。如果元素的ID功能可用,则它将被调用,否则它将使用距离函数与最近的邻居匹配对象。所以,当你创建匹配器时,你应该指定策略。在你的情况下,你选择从不使用id函数。

DefaultMatchEngine.createDefaultEObjectMatcher(UseIdentifiers.NEVER); 

实际比较发生不匹配引擎,但在区别引擎。 所有你需要的只是延长DefaultDiffEngine并覆盖createFeatureFilter方法给你自己的提供者FeatureFilter