博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Model to Text工具Acceleo使用教程(四)——模板语法
阅读量:6968 次
发布时间:2019-06-27

本文共 2430 字,大约阅读时间需要 8 分钟。

  从这一讲开始,将介绍模板设计的语法,以便大家可以设计自己需要的模板,完成需要的代码生成。下面主要从两方面讲解语法和服务。

一、语法

  Acceleo的变量区是用<%和%>包围的,当然为了避免某些冲突(例如jsp生成代码中也包含<%这样的标记),也可以用另一种标记[%和%]包围,编译器会自动识别标记。

1、注释

  Acceleo的注释用<%--和--%>包围,可以一行或者多行。

2、metamodel

  关键字metamodel指定了模板中使用的元模型,它是import区的第一条命令,语法如下:

  <%

  metamodel MyMetaModelURI
  import..
  %>

  元模型的URI(统一资源标识符)指定了我们将要使用什么样的元模型,下面是常用元模型的URI:

  - UML 1.4 meta model:

  - UML 1.3 meta model:
  - UML 2.0 meta model: or
  - Ecore meta-model:

  应用举例:

  <%

  metamodel http://www.obeo.fr/uml14
  import fr.obeo.template.commonScript
  import fr.obeo.services.StringServices
  %>

  上面的脚本说明了我们用的元模型是UML1.4。

3、import

  和java语言的import类似,acceleo的import命令用在import区,通过import可以链接到其它模板或服务文件,然后调用链接文件中的脚本或服务。语法如下:

  <%

  metamodel..
  import myPackage.myServicesClass
  import myPackage. myScriptTemplate
  %>

  其中myPackage是文件路径(例如fr.obeo.acceleo),myServicesClass和myScriptTemplate分别java类的名字和模板的名字。

  应用举例:

  <%

  metamodel http://www.obeo.fr/uml14
  import fr.obeo.template.commonScript
  import fr.obeo.services.StringServices
  %>

  表示本文件的脚本可以调用commonScript.mt中定义的脚本,也可以调用StringServices.class中定义的服务。

4、script

  script可以用于标识不同的脚本以及它使用的对象类型,语法如下:

  <%script type=”myType” name=”identifier” file=“nameOfGeneratedFile” description=“ myDescription ” post="myPost"%>

  myType是脚本将要使用的对象类型,identifier是一个字符串,可以用于标识脚本,nameOfGeneratedFile是生成的代码文件的相对路径(包含扩展名),myDescription 描述了脚本的动作,myPost是一个函数,在模板使用完成时调用。

  其中的type和name参数是必须有的,其它是可选的。参数对("type","name")标识不同的脚本,对于给定的不同type,脚本(对参数对)必须不同。参数file中可以调用其它脚本。

5、for

  acceleo的for语法如下:

  <%for (对象列表) {%>

  对每个对象的操作
  <%}%>

  对象列表可以是acceleo的对象integer(“ int ”), Boolean (“boolean”), string (“ String ”), list (“ ENodeList ”),也可以是EMF (“ EObject ”)。

  应用举例:

  <%for (eAllContents(“ Class ”)) {%>

  The name of the class is: <%name%>.
  <%}%>

  此脚本表示输出每个class的名字,关于eAllContents服务将会在后面讲解。

6、if

  acceleo的if语法如下:

  <%if (BooleanExpression) {%>

  BooleanExpression为真时执行的命令
  <%} else {%>
  BooleanExpression为假时执行的命令
  <%}%>

  BooleanExpression返回的布尔值,其中的操作符可以用== (equal), != (different), < (less than), <= (less or equal than), > (greater than >= (greater than or equal), || (logical or), && (logical and) and ! (negation),其中的操作数可以用脚本、服务或链接元模型的值、对象和调用。

  应用举例:

  <%if (hasStereotype(“ Entity ”)) {%>

  public List myList = new ArrayList();
  <%} else {%>
  public String myString = “”;
  <%}%>

二、总结

  本讲介绍了acceleo的基本语法,后面将介绍acceleo模板提供的基本服务。

转载于:https://www.cnblogs.com/jpcflyer/archive/2012/05/22/2513623.html

你可能感兴趣的文章
[31期] 第一个项目结束之际-->俺很高调但很真诚地感谢一个人-->涛爷
查看>>
回头再看第一次项目
查看>>
sql 50题
查看>>
Unity3D编辑器之重写Hierarchy的右键菜单
查看>>
有无关键字new的区别
查看>>
svn idea使用
查看>>
Hashmap,Set,Map,List,ArrayList的区别
查看>>
3.Linux 文件的压缩与打包
查看>>
JAVA分布式架构
查看>>
如何把使用到android res文件夹下面资源(R.xx.xx)的工程打包成jar文件,供其它项目使用...
查看>>
删除Referencing outlet
查看>>
三、hbase JavaAPI
查看>>
Maximum Subarray
查看>>
Android ProGuard使用要点
查看>>
导入自定义模块model
查看>>
Python之初识函数(Day11)
查看>>
[LeetCode] NO.383 Ransom Note
查看>>
App数据分析的五大维度!
查看>>
Authentication and Authorization in ASP.NET Web API
查看>>
nginx
查看>>