获取正在Tree- / Tableviewer中监听的EObject的根元素

时间:2013-10-20 17:08:55

标签: selection root eclipse-emf viewer eclipse-emf-ecore

要求Ecore-Object的根元素的最佳方法是什么?我正在听某些编辑并从中获取IStructuredSelection。但是我需要进一步过滤TreeViewers,因为我所听到的并不是所有的都包含相同的元素。据我所知,没有直接的方法,它由EMF本身生成,要求根元素。你能指点我正确的方向吗?谢谢。

1 个答案:

答案 0 :(得分:1)

如果您有EObject,只需递归检查eContainer()即可获得所需的结果。如:

public static EObject getRoot(EObject eo) {
    EObject parent = eo.eContainer();
    if (parent != null) {
        return getRoot(parent);
    }
    return eo;
}

对于任何EObject,这应该返回包含它的顶级EObject

但是,您可能希望依赖getRootContainer()课程中的EcoreUtil,而不是像您那样滚动自己。使用EMF时不要忽略EcoreUtil,它有辅助方法,其中至少有一些方法在EMF应用程序中必不可少。