在EMF中建模自引用节点,并使用ECP对其进行编辑



我正在尝试用EMF对网络进行建模。网络应该由相互连接的节点组成。每个节点都应该有一个或多个到其他节点的连接,就像网状网络一样。

该模型应可由EMF客户端平台(ECP)演示应用程序编辑。当用户在ECPs模型资源管理器中创建节点时,他/她可以设置与其他节点的连接,最好是在列表中。

第一次尝试是自我引用,但问题是没有双向的自我引用。这将导致,看不到来自相反节点的连接。

我的下一个想法是使用一个中间连接类,这导致了另一个问题。我想在模型资源管理器中不显示连接类的情况下自动创建此连接。这可以在生成的EMF查看器中实现,但在我正在使用的ECP演示应用程序中无法实现。

第三个想法:我能想到的解决最后一个想法的唯一方法是在节点的视图中使用tableControl,在那里编辑连接类。但是,在模型资源管理器中隐藏连接类的问题仍然存在,并且连接类出现在项目文件夹(最高级别)中,而不是它们的包含类(在我的情况下是网络类)中。

有人有什么想法吗?如何解决我的任何问题?

编辑:附加信息

根据定义,节点之间的连接是全双工的。然后,该图应被用作最短路径算法的输入。

你的第一次尝试很好。事实上,你可以在Ecore做相反的模特。要做到这一点,您必须为同一对象建模两个EReferences(因此两个自反引用),然后将其中一个EReference的属性eOpposite设置为另一个。

以下是一个具有eOpposite集合的简单元模型:https://repository.genmymodel.com/vincent.aranega/NodeGraph

在Ecore XMI中,它看起来是这样的(注意eOpposite值):

<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_pwXZhv1pEeW9zv77lynsJg"
    name="references" upperBound="-1" eType="#_pwXZg_1pEeW9zv77lynsJg" eOpposite="#_pwXZiv1pEeW9zv77lynsJg"/>
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_pwXZiv1pEeW9zv77lynsJg"
    name="relatives" upperBound="-1" eType="#_pwXZg_1pEeW9zv77lynsJg" eOpposite="#_pwXZhv1pEeW9zv77lynsJg" />

使用这个元模型,您可以创建一个包含许多NodeGraph。每个节点可以reference个其他节点。如果一个Node A作为对另一个命名的B的引用,则Brelatives集合将自动更新为A

最新更新