以编程方式指定派生属性的实现

时间:2016-06-15 11:04:32

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

我想在ecore模型中使用derived属性和引用,但到目前为止,我还没有找到有关如何为计算派生属性/引用值的方法设置代码的任何文档。

据我了解,基本工作流程是将属性/引用标记为derived,生成模型代码,然后手动添加实现。但是,我使用通过Ecore API动态生成的模型。有没有办法获取String并指定此String作为计算派生特征的实现,而无需手动编辑生成的文件?

编辑>

澄清:我正在寻找一种直接更改生成的Java文件的方法,方法是为派生的EStructuralFeatures的getter指定方法体(作为字符串)。

1 个答案:

答案 0 :(得分:5)

EMF提供了一种使用“调用委托”处理EOperationderived EAttribute的专用实现的方法。此功能允许您以字符串格式将某些实现直接放在ecore元模型中(一旦EMF“处理”所使用的语言,即存在调用委托)。

据我所知,OCL得到了很好的支持:https://wiki.eclipse.org/OCL/OCLinEcore#Invocation_Delegate

调用委托的注册可以通过插件注册或手工(对于独立使用)来执行,并且该机制适用于EMF反射层(动态EMF):https://wiki.eclipse.org/EMF/New_and_Noteworthy/Helios#Registering_an_Invocation_Delegate

(请注意,我从未体验过这种机制。我知道它存在,但我从未玩过它。)

<强>编辑&gt;

似乎这个问题与派生属性的动态代码执行无关,而与代码注入无关(我误解了“有没有办法获取字符串并指定此字符串作为计算派生特征的实现?“)。

EMF提供了一种将ecore元模型上放置的代码直接注入生成的代码的方法。

EAttribute具有derived属性的方式。 EAttribute应将以下属性设置为true{derived volatile}(您还可以添加transient)。如果您只需要EAttribute的getter而不是setter,则还可以将属性changeable设置为false

EAttribute配置完好后,您必须添加一个新的EAnnotation,其源设置为http://www.eclipse.org/emf/2002/GenModel,并且key的条目设置为{ {1}}和get设置为您要注入的代码(参见下图)。

enter image description here

voilà,您的代码将使用您的getter中注入的value值生成。

您可以使用value代替EOperationbody添加相同的流程。