获取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.

原文地址:https://www.cnblogs.com/youngerbaby/p/651571.html