我有以下类型的简单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
)
);