在ECore中实现缓存的限定名称

时间:2015-03-07 10:49:22

标签: caching eclipse-emf-ecore fully-qualified-naming

我必须使用类,Container和Containable,并且我想实现限定名称(root / containerA / containerB / containableXYZ)

因此,Container派生自Containable和Containable有一个fullName属性,我将其设置为派生,瞬态&挥发性的工作

return (parent != null) ? parent.getName() + SEPARATOR + getName() : getName();

但是现在我担心在层次结构的每个级别的大型模型中,不必要地计算相同的路径 - 每个容器都可以缓存它的路径

但如果容器的父级发生变化 - 我如何自动重新计算它的路径?

1 个答案:

答案 0 :(得分:1)

EMF 对象包含在具有树层次结构的资源中。您可以做的是在从树中附加或分离对象时将资源扩展为拦截。

请参阅: ResourceImpl.attached()

您可以做的其他事情是覆盖您班级中的方法 eBasicSetContainer()。最好的方法是为所有模型类提供一个抽象的公共根类。然后,您可以做的是拦截此方法并在新容器对象不为空时更新路径。

在这两种情况下(拦截资源或EObject),请确保您还重新计算要更改的元素的子树中任何包含元素的路径。这可以通过使用以下方法重新计算递归迭代子树的路径来轻松完成: EcoreUtil.getAllProperContents(EObject)

顺便说一下,您也可以使用 EcoreUtil.getIdentification() ,它使用URI返回元素的限定名称。