Как я могу создать ссылку на существующие объекты модели?
-
08-10-2019 - |
Вопрос
Я новичок в MDSD / EMF, но очень прогрессирую благодаря поддержке Затлипса.
Я создал игрушечную модель, так как вчера ответила как Angynne, и я очень близко. Я использую только EMF и его сгенерированный редактор деревьев.
Вот краткое изложение моей Meta-модели EMF:
- EClass: Widget
- name
- EClass: WidgetReference
- aWidgetReference : Widget [0..1] Containment = false
- EClass: WidgetContainer
- myWidgets : Widget [0..*] Containment = true
- EClass: ReferenceContainer
- myReferences : WidgetReference [0..*] Containment = true
- EClass: TopLevelClass
- myWidgetContainer : [1] WidgetContainer Containment = true
- myReferenceContainer : [1] ReferenceContainer Containment = true
Что происходит сейчас, так это то, что в созданном редакторе дерева для модели я создаю все, начиная с TopleVLass. Я могу успешно создать несколько виджетов в WidgetContainer, и я могу создать одно WidgetReference в RELICTESCONTAINER и связывайте его с определенным виджетом.
В случае, если кто-то работает в этом, в созданном редакторе EMF есть ошибка:
Когда я пытаюсь добавить более одного WidgetReference к реферингентеру, редактор дерева показывает только первую WidgetReference под рецензом. Если я нажму на элемент Widgetreferences на дереве, он показывает несколько Widgetreferences в представлении «Свойства». Это просто не позволит мне увидеть их на дереве, и поэтому не позволит мне выбрать их, чтобы изменить свою ссылку, чтобы связать его на реальный виджет.
Обходной путь к этому - создать столько ссылок, сколько вам нужно, сохранить и закрыть модель, а затем снова открыть ее. После его открытия все ссылки будут показаны.
Спасибо за любую помощь / руководство.
Джефф
Решение
Я думаю, что ответ на ваш вопрос связан с идеей «сдерживания». Любой родительский объект, который имеет ссылку на содержание (сдерживание = True в Metamodel EMF) к дочернему объекту, управляет жизненным циклом этого ребенка. Поэтому, когда ребенок создан, упоминание родителей на этот объект выполнен автоматически. Если ссылка не имеет содержания типа (содержание = false), то вы можете указать ссылку на любой существующий объект модели правильного типа. Я думаю, вам нужно установить вашу ссылку в качестве сдерживания = false.
Я не использовал Acceleo, поэтому давайте использовать EMF Editor Editor в качестве примера (концепция также применяется к редактиру GMF): в редакторе дерева, если родительский объект имеет ссылку на защиту от ребенка, пользователь может создать Ребенок, щелкнув правой кнопкой мыши на родительском языке и выбираю «New -> Child -> ChildObject». Если ссылка на ребенка не содержимое типа сдерживания, пользователь сможет выбрать экземпляры этого объекта, который уже существует в модели, нажав подходящее дочернее свойство в окне свойств родительского объекта.
Это помогает? Если это описание сбивает с толку, это может помочь создать игрушечную модель с некоторыми неотложными ссылками и генерировать EMF Editor для него.
Другие советы
Я не уверен, что концепция ссылок между моделями в EMF - это то, что вы описываете. Однако в модели вы делать могут ссылаться на элементы в других моделях. В Renderic EMF Editor с вами создают экземпляры модели, вы можете щелкнуть правую кнопку, а затем выберите «Ресурс нагрузки ...». Этот новый ресурс может быть любая другая модель, которая связана с вашей моделью (ваша метамодель, ссылается на метамодель другой модели).
Вы можете на это, а также на уровне метамодели. В графическом редакторе ECORE вы можете перетаскивать классы из других метамодель. Они будут держать синхронизацию.
Я не уверен, однако, если это то, что вы спрашиваете.