zoukankan      html  css  js  c++  java
  • Model to Text工具Acceleo使用教程(三)——一个简单的代码生成模块

      前面对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模板的语法,以便大家设计自己需要的模板。

     

     

     

  • 相关阅读:
    桥接,NAT,Host Only的区别
    PHP并发IO编程之路
    Git SSH Key 生成步骤
    composer安装学习
    db file sequential read等待事件的一点研究
    多个hints 怎么写?
    再次遭遇笛卡尔积
    pl/sql 在一个程序块里打印日志输出到表格
    pl/sql 程序块里打印问题
    利用ordered hints优化SQL
  • 原文地址:https://www.cnblogs.com/jpcflyer/p/2512036.html
Copyright © 2011-2022 走看看