Acceleo:使用自定义UML概要文件作为元模式,以及它在模板中的原型



我是Acceleo的新手。我使用IBMRSA(8.5.1)。我创建了一个自定义的UML概要文件(有一些扩展默认元类的原型,这很常见)。UML概要文件是一个.epx文件。此外,我创建了一个简单的模型,在这个模型上应用了我的自定义UML概要文件,并用我的自定义原型"标记"了一些类。

我的问题(很抱歉,如果这是琐碎的,但我没有找到一个直接的答案…):

  • 我可以在Acceleo中使用我的自定义UML概要文件作为元模型吗?简单地说,不要在我的模块文件中写以下内容:[模块主('http://www.eclipse.org/uml2/3.0.0/UML')](这个还可以)我能写这样的东西吗:[模块主('平台:/resource/MyProfileProject/MyProfile.epx')]?如果我尝试这样做,我会得到一条错误消息:"无法解析元模型"。我试图将我的UML概要文件从.epx格式转换为.xmi和.UML,但这些都不起作用。

  • 如果这可以以某种方式发挥作用,我可以在Acceleo模板中使用我的自定义原型作为类型限定符吗(在"for"循环等中)?

如有任何帮助,我们将不胜感激。提前谢谢。Marcel

我认为你做不到。

据我所知,您应该使用服务从UML元素(原型等)中检索概要文件数据,但元模型仍然是UML,这对于Acceleo来说是无法更改的。

不过,您可以在根据原型信息过滤的元素列表上迭代UML元素。

这是可以做到的。我添加了一个例子来展示如何做到这一点,因为我花了相当长的时间来检索个人资料的刻板印象。我添加它是为了将来参考(给任何可能需要它的人)。

[comment encoding = UTF-8 /]
[module generate('http://www.eclipse.org/uml2/4.0.0/UML')]
[template public generateElement(p : Class)]
[comment @main /]
[file (p.name.concat('.php'), false)]
[if (hasStereotype(p, 'Soa Logic Profile::bOperation'))]
code for bOperation stereotype  
[/if]
[if (hasStereotype(p, 'UML Standard Profile::entity'))]
code for entity stereotype
[/if]
[p._package.member.getApplicableStereotypes().qualifiedName/]
[hasStereotype(p, 'Soa Logic Profile::bOperation')/]
[/file]
[/template]

注意,在上面的代码中,限定名称Soa Logic Profile::bOperation对应于Soa Logic Profile中定义的构造型bOperation。CCD_ 4是在CCD_。Soa Logic Profile::bOperationUML Standard Profile::entity都是限定名称。

注意:您只需要使用UML元模型,这个模型(.uml file)已经有了关于应用概要文件的信息。这可以通过检查.uml文件来检查。此外,据我所知,*.profile.uml文件确实有.uml模型文件位于同一文件夹中。

来自巴拉圭的问候!

最新更新