Как я могу создать ссылку на существующие объекты модели?

StackOverflow https://stackoverflow.com/questions/4149579

  •  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 вы можете перетаскивать классы из других метамодель. Они будут держать синхронизацию.

Я не уверен, однако, если это то, что вы спрашиваете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top