超类和子类的不同表示

Different representation for superclass and subclass

我是使用 Sirius 创建编辑器的新手,我有以下 EMF 模型:

我想为给定的元模型创建一个 Sirius 编辑器,其中 Superclass ASubclass B 具有不同的表示形式。

classes AB都可以实例化,Class B有额外的属性和引用。在 Subclass B 的表示中,我只想显示 Superclass A 的有限数量的属性和 Subclass B 的一些附加属性。

现在的想法是使用不同的容器,并且根据 class 我想显示相应的容器。到目前为止,当我在 Sirius 编辑器中定义了两个容器,每个 class 一个,我创建了一个 Subclass B 的实例,我现在在表示中得到两个容器,一个表示用于 [=10] =] 和一个代表 Subclass B

有什么方法可以让 Sirius 只显示相应 class 的容器?

所以您的 .odesgin 文件中有 A 和 B 的两个不同图表元素?

您可以限制应用图形表示的元素列表。这可以通过图表元素中的 "Semantic Candidates Expression" 来完成。您可以轻松地使用 Java Services 来过滤您的模型树和 return 一个 Collection<EObject> 以及您想要以图形方式表示的所有相关元素(看看 link,它解释得很完美)。

如果图元素仅应应用于父模型对象的特定功能,请查看 feature: 选项。在 'Semantic Candidates Expression' 字段中输入 feature: 并按 ctrl + space,您应该会看到一个列表,其中包含您定义为该图元素的父 EObject 的 EObject 的所有可能功能。

(通过 'Diagram Element' 我总是引用 .odesign Viewpoint 中定义的 'Container'/'Node' 元素)