gpt4 book ai didi

eclipse-emf - 如何创建对现有模型对象的引用?

转载 作者:行者123 更新时间:2023-12-01 13:04:02 25 4
gpt4 key购买 nike

我是 MDSD/EMF 的新手,但由于 Eclipse 的支持,我取得了很大进步。

我昨天按照 awynne 的建议创建了一个玩具模型,我非常接近。我只使用 EMF 及其生成的树编辑器。

这是我的 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

现在发生的事情是,在为模型生成的树编辑器中,我创建了从 TopLevelClass 开始的所有内容。我可以在 WidgetContainer 中成功创建多个小部件,并且可以在 ReferenceContainer 中创建单个 WidgetReference 并将其与特定的 Widget 相关联。

万一有人遇到这个,生成的 EMF 编辑器代码中有一个错误:

当我尝试向 ReferenceContainer 添加多个 WidgetReference 时,树编辑器仅显示 ReferenceContainer 下的第一个 WidgetReference。如果我单击树中的 WidgetReferences 项,它会在属性 View 中显示多个 WidgetReferences。它只是不会让我在树中看到它们,因此不会让我选择它们来更改它们的引用以将其关联到实际的小部件。

解决方法是根据需要创建尽可能多的引用,保存并关闭模型,然后重新打开它。重新打开后,将显示所有引用。

感谢您的帮助/指导。

杰夫

最佳答案

我认为您问题的答案与“遏制”的概念有关。任何对子对象具有包含引用(在 EMF 元模型中为 containment=true)的父对象都会管理该子对象的生命周期。因此,当创建子对象时,父对象对该对象的引用是自动生成的。如果引用不是包含类型 (containment=false),则您可以将引用指向正确类型的任何现有模型对象。我认为您需要将引用设置为 containment=false。

我没有使用过 Acceleo,所以让我们以 EMF 树编辑器为例(这个概念也适用于 GMF 编辑器):在树编辑器中,如果父对象具有对子对象的包含引用,则用户可以通过右击父对象并选择“new-->child-->ChildObject”来创建子对象。如果对子项的引用不是 containment 类型,用户将能够通过在父对象的属性窗口中单击适当的子属性来选择模型中已存在的该对象的实例。

这有帮助吗?如果此描述令人困惑,创建带有一些非包含引用的玩具模型并为其生成 EMF 编辑器可能会有所帮助。

关于eclipse-emf - 如何创建对现有模型对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4149579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com