收到有关EAnnotation参考列表更改的通知

时间:2015-01-20 14:13:00

标签: eclipse emf ecore

我正在创建一个基于Sample Ecore editor (org.eclipse.emf.ecore* plugins)的自定义Ecore编辑器,并发现列表中的更改不会在模型更改通知中显示。例如,对EAnnotation.references列表的更改不会导致模型更改通知,而EAnnotation.setSource()方法会创建通知。我想,这是getText()中默认EAnnotationItemProvider方法仅使用source字段的原因之一。

我正在使用references字段的值来生成EAnnotation的UI演示文稿,因此查看此字段的更改对于正确操作是必要的。

是否有一些标准方法可以观察这些变化并在模型视图上触发refresh()

1 个答案:

答案 0 :(得分:0)

我发现通知已创建,但notifyChanged()方法最初忽略了它。这对我有用:

@Override
public void notifyChanged(Notification notification) {
    updateChildren(notification);

    switch (notification.getFeatureID(EAnnotation.class)) {
        case EcorePackage.EANNOTATION__SOURCE:
        case EcorePackage.EANNOTATION__REFERENCES: /*ADDED*/
            fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
            return;
        case EcorePackage.EANNOTATION__CONTENTS:
            fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
            return;
        case EcorePackage.EANNOTATION__DETAILS: /*MODIFIED TO UPDATE VIEW*/
            fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, true));
            return;
    }
    super.notifyChanged(notification);
}