Разное представление для суперкласса и подкласса
Я новичок в создании редакторов с помощью Sirius, и у меня есть следующая модель EMF:
Я хочу создать редактор Sirius для данной метамодели с различными представлениями для Superclass A
а также Subclass B
,
Оба класса A
а также B
может быть создан и Class B
имеет дополнительные атрибуты и ссылки. В представлении для Subclass B
Я хочу показать только ограниченное количество атрибутов из Superclass A
и несколько дополнительных атрибутов из Subclass B
,
Идея состоит в том, чтобы теперь иметь разные контейнеры, и в зависимости от того, какой это класс, я хочу показать соответствующий контейнер. До сих пор, когда у меня есть два контейнера, определенные в редакторе Sirius, по одному для каждого класса, и я создаю экземпляр Subclass B
Теперь я получаю два контейнера в представлении, один с представлением, предназначенным для Superclass A
и один с представлением, предназначенным для Subclass B
,
Можно ли как-нибудь сказать Сириусу, чтобы он показывал только контейнер соответствующего класса?
1 ответ
Итак, у вас есть два разных элемента Diagram для A и B в вашем файле.odesgin?
Вы можете ограничить список элементов, к которым должно применяться графическое представление. Это можно сделать с помощью "выражения семантических кандидатов" в вашем элементе диаграммы. Вы можете легко использовать Java-сервисы для фильтрации вашего дерева моделей и возврата Collection<EObject>
со всеми соответствующими элементами, которые вы хотите, чтобы они были представлены графически (посмотрите на ссылку, это объяснено отлично).
Если элемент Diagram должен применяться только к определенной функции родительского объекта модели, взгляните на feature:
вариант. Введите feature:
в поле "Выражение семантических кандидатов" и нажмите Ctrl + пробел, вы должны увидеть список со всеми возможными функциями для объекта EObject, который вы определили как родительский объект EObject для этого элемента Diagram.
(Под "элементом диаграммы" я всегда ссылаюсь на элемент "Контейнер" / "Узел", определенный в точке зрения.odesign)