Получать уведомления об изменении списка ссылок EAnnotation

Я создаю собственный редактор Ecore на основе образца Ecore. редактор (плагины org.eclipse.emf.ecore*) и обнаружил, что изменения в списках не отображаются в уведомлениях об изменении модели. Например, изменения в списке EAnnotation.references не приведут к уведомлениям об изменении модели, тогда как метод EAnnotation.setSource() создает уведомление. Я думаю, это одна из причин, почему метод getText() по умолчанию в EAnnotationItemProvider использует только поле source.

Я использую значение поля references для создания представления пользовательского интерфейса EAnnotation, поэтому для правильной работы необходимо увидеть изменения в этом поле.

Есть ли какой-то стандартный способ наблюдать за этими изменениями и запускать refresh() в представлениях модели?


person allprog    schedule 20.01.2015    source источник


Ответы (1)


Я понял, что уведомление было создано, но метод 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);
}
person allprog    schedule 20.01.2015