在EMF中建模自引用节点并使用ECP编辑它们

时间:2016-04-07 15:35:58

标签: eclipse-emf emf eclipse-emf-ecore

我正在尝试使用EMF建模网络。 网络应由彼此连接的节点组成。 每个节点应与其他节点建立一个或多个连接,如网状网络。

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

首先尝试是自我引用,但问题是没有双向自引用。这导致没有看到来自相对节点的连接。

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

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

Doe的任何人都有一些想法,如何解决我的任何问题?

编辑:其他信息

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

1 个答案:

答案 0 :(得分:1)

你的第一次尝试是好的。实际上,你可以在Ecore中进行相反的模型。为此,您必须为同一个对象建模两个EReferences(因此两个反身引用),然后将eOpposite之一的属性EReference设置为另一个。

以下是一个简单的元模型,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" />

使用此元模型,您可以创建包含许多Graph的{​​{1}}。每个节点可以Node个其他节点。如果reference Node作为对另一个名为A的引用,则B的{​​{1}}集合会自动使用relatives进行更新。