前面对Acceleo的知识背景和基本架构进行了讲解,接下来就将开始模型到代码的生成了。本讲将逐步讲解一个简单的代码生成模块(UML to Html)。Acceleo的代码生成是基于模板的,所以有了输入模型(如UML)后,需要建立对应模型的模板,然后生成代码。原理如图1所示。
图1 基于模板的Acceleo
1、新建项目
首先,切换到Acceleo视图,新建generator project。此处,我们可以命名为“acceleo.uml2.gen.xhtml”。接下来,我们需要输入模型。
2、建立模型
目前,可用的建模工具有很多,Acceleo提供了很好的机制来兼容这些不同的建模工具,可以兼容ArgoUML, Poseidon, Umbrello or Rational Rose等。更多兼容工具请参考点击此处。
此处,我们暂时用Topcased新建了一个UML2模型,可以点击下载WebLog_fr.uml。
注意:Acceleo也兼容UML1.3/1.4,用户可以通过Acceleo-->Convert EMF转为将其转换为UML2。
3、建立模板
有了模型之后,我们就需要建立模板来将模型转换成代码了。通过 Empty Generator新建空的模板。
因为我们的源模型是UML2,所以我们在Registry values选择UML2的URI(统一资源标识符),假设此处我们想要为每个class生成一个文件,需要在type values选择uml.class。完成后就生成了一个空的模板,如图2所示。
图2 空的UMl2模板
4、生成代码
在生成代码之前,先介绍acceleo的一种特殊的编辑器 reflective editor,它提供了一种模型的树状结构视图,并集成了Acceleo的几乎所有功能。我们将在此编辑器下将UML2模型生成HTML。在acceleo中,可以通过 Open As->Acceleo XMI打开此编辑器。
接下来比较重要的一步,就是将模型与模板绑定,即指定模型用哪个模板。在reflective editor下,任意选择一个目标结点,通过Acceleo -> Select Template为此模型结点指定模板,当指定成功后,在outline视图中,相应结点(如此处的class)会变成带右箭头的图标,如图3所示。图3表示class的模板绑定成功,可以将class生成代码。
图3 模板绑定成功后,相关结点图标变成箭头
当然,前面我们建立的模板是空的,所以class生成的代码也是空的。所以需要将模板写全,图4是写全后的模板,可以点击此处下载sample template from UML2 to XHTML。关于的模板的更多语法,大家可以参考documentation section 和 sample generator modules。
图4 UML to HTML的模板
当模板写全并保存后,通过Acceleo -> Reload Template 更新模板。如此反复,直到模板能够满足自己的要求。
最后也就是最重要的一步,就是生成代码了。通过Acceleo -> Generate files可以将代码生成到文件中(此处,我们设置文件保存在doc文件夹下)。我们可以看到,acceleo为每个class生成了一个文件,如图5所示。
图5 class模板生成的html代码
5、批量代码生成
上面完成了单个模板到代码的生成,如果模型很多呢?不用担心,acceleo提供了批量生成的功能,即链文件(chain files)。
- 新建项目:New -> Project -> Simple -> Simple Project
- 新建链:New -> Chain
- 定制元模型,如第3步所示。
- 选择链的模型、模板和名字。
- 在新建的.chain文件下,右击执行Launch,文件即自动生成了。
6、总结
本讲从一个简单的代码生成器(UML to HTML)开始,介绍了其使用流程,并讲了批量模型生成的情况,下一讲我们开始介绍acceleo模板的语法,以便大家设计自己需要的模板。