我有以下类型的简单EMF模型:

EClass FooGroup {
    EString name;
    @Properties(containment=true, upper=-1)
    List<Node> nodes;
}
EClass BarGroup {
    EString name;
    @Properties(containment=true, upper=-1)
    List<Node> nodes;
}
EClass Node {
    EString name;
}


我想在一个简单的TableViewer中显示节点的所有名称,以及它们的父组的名称。不幸的是,eContainer()是一项操作,而非功能。这意味着我不能使用JFace Databinding框架将此属性链接到GUI。

我怎么解决这个问题?是否创建派生功能?有什么花招吗?

最佳答案

我想不出一种在EMF数据绑定中使用eContainer的方法,但是向节点添加指定的父引用并在eContainer发生更改时以编程方式对其进行更新并不那么困难。

另一个解决方案是添加一个父项,然后更改生成的代码:

/*
 * @generated NOT
 */
public Group getParent() {
    if (eContainer() instanceof Group) {
        return (Group) eContainer();
    }
    return null;
}


然后,您可以使用FeaturePath来获取EMFProperty,如下所示:

    IEMFProperty groupNameProperty = EMFProperties.value(
      FeaturePath.fromList(
        ModelPackage.Literals.NODE__PARENT,
        ModelPackage.Literals.GROUP__NAME
      )
    );

10-07 17:00