获取EObject对象的反向引用对象
在基于EMF模型的应用中经常会有这样的需求:
当一个模型对象被一个特定的对象引用后,就不可以再被其他的对象引用。如何获取一个模型被那些其他模型引用了这个信息呢?
当然一种解决方案是在建模的时候,把引用设成双向的。然而这样会造成一定的冗余,使你的模型稍显臃肿和复杂。其实如果你是用EMF来表示你的模型,通过EMF提供的API可以获得所有引用某个model的model列表:
代码如下:
EObject referencedModel = getReferencedModel(); // 被引用的对象
List adapters = referencedModel .eAdapters(); //获得所有与对象关联的adapter
for(Iterator it = adapters.iterator();it.hasNext();) {
Object obj = it.next();
// if the adapter is cross reference adapter
if(obj instanceof CrossReferenceAdapter) {Set refs = null;
// 返回所有引用referencedModel的对象
refs = ((CrossReferenceAdapter) obj).getInverseReferencers(referencedModel, null,null);
}
}方法getInverseReferencers()的参数参考EMF API.