• Model to Text工具Acceleo使用教程(六)——模板服务


      本讲开始详细介绍acceleo提供的剩余七种服务。

    一、对象服务

    1、eAllContents

      eAllContents():返回当前对象的所有孩子对象

      接受类型:EMF对象

      返回:家族对象列表

      详细描述:此服务返回了所有直接或间接的孩子对象,不区分类型,即返回所有类型的对象。

      应用举例:假设a,b,c,d,e是对象,a包含b,c,b包含d,d包含e,则

      <%a.eAllContents()%>: 返回 {b, c, d, e}
      <%b.eAllContents()%>: 返回 {d, e}
      <%e.eAllContents()%>: 返回空对象

    2、eAllContents

      eAllContents(String):返回指定类型的对象

      接受类型:EMF对象

      参数:stirng类型,值为需要返回对象的类型

      返回:家族对象列表

      应用举例:假设p是包,a是其中的class,此类包含三个属性:int b, int c, 和 boolean d。包p中还有另一个类e,它有三个属性:int f,string g,和对象h,则

      <%p.eAllContents()%>: 返回 {a,b, c, d,e, f,g,h}
      <%p.eAllContents(“ Class ”)%>: 返回 {a, e}
      <%p.eAllContents(“ String ”)%>: 返回 {g}
      <%a.eAllContents(“ int ”)%>: 返回 {b, c, f}
      <%a.eAllContents(“ String ”)%>: 返回空列表

    3、eClass

      eClass():返回类型的类

      接受类型:EMF对象

      返回:类型的类

      详细描述:此服务返回与当前类型对应的元模型中的类,类似于java语言中提供的class属性。

      应用举例:

      <%if (a.eClass().name == “ Class ”) {%> 中间指令<%}%>,只有当a是一个类时才执行中间指令。

    4、eContainer

      eContainer():返回父亲对象

      接受类型:EMF对象

      返回:父亲对象

      详细描述:此服务将返回父亲对象,而不管父亲是什么类型,如果父亲是空,返回空

      应用举例:假设a是类,包含了b属性,则

      <%b.eContainer()%>: 返回 a
      <%a.eContainer()%>: 返回空对象

    5、eContainer

      eContainer(String):返回指定类型的父亲对象

      接受类型:EMF对象

      参数:string类型,值为需要返回的父亲对象的类型

      返回:指定类型的父亲对象

      应用举例:假设p是包,包含了类a,a中有字符串属性b,则

      <%a.eContainer(“ Package ”)%>: 返回 “p”
      <%b.eContainer(“ Package ”)%>: 返回 “p”
      <%p.eContainer(“ Package ”)%>: 返回空对象
      <%a.eContainer(“ String ”)%>: 返回空对象

    6、eContainingFeature

      eContainingFeature():返回父亲包含的特征

      接受类型:EMF对象

      返回:父亲包含的特征

      应用举例:<%eContainingFeature()%>

    7、eContainmentFeature

      eContainmentFeature(),类似于eContainingFeature()

    8、eContents

      eContents():返回类型的直接孩子对象(区别于eAllContents

      接受类型:EMF对象

      返回:直接孩子对象列表

      应用举例:假设p是包,包含类a,a中有属性b,c,则

      <%a.eContents()%>: 返回 {b, c,}
      <%p.eContents()%>: 返回 {a}
      <%b.eContents()%>: 返回空

    9、eCrossReferences

      eCrossReferences():返回所有引用类型对象

      接受类型:EMF对象

      返回:引用对象列表

      应用举例:类a继承b, b实现了掊接口c。a中包含属性d,e,则

      <%a.eCrossReferences()%>返回{b,c}

    10、eResource

      eResource():返回包含模型的文件的路径

      接受类型:EMF对象

      返回:模型文件路径

    11、eResourceName

      eResourceName():返回模型文件名字(包含扩展名)

      接受类型:EMF对象

      返回:模型文件名字

      应用举例:如果此服务应用于“C:/Obeo/models/MyModel.xmi” 中的某个对象上,则返回 “MyModel.xmi”。

    12、getRootContainer

      getRootContainer():返回包含当前对象的顶层对象

      接受类型:EMF对象

      返回:顶层对象

      应用举例:如果a包含b, b包含c,则

      <%c.getRootContainer()%>返回a

    13、load

      load(String):加载模型并返回其根对象

      接受类型:EMF对象

      参数:模型文件路径

      返回:模型文件的顶层对象

      应用举例:

      <%load(“ //UML2_LIBRARIES/UML2PrimitiveTypes.library.uml2 ”)%>返回UML2模型的根元素。

    二、属性服务

      属性是以key=value的形式保存在文件中的,文件扩展名为.properties,属性首先寻找当前目录下的key,如找不到,再在模板中寻找,如果仍找不到,返回Empty feature evaluation异常。如果发现多个key,则只使用第一次找到的那个value。为了使用reflective的预览特性,属性文件必须和模板文件在同一个目录下

    1、getBestProperty

      getBestProperty(String):返回与参数最接近的key的值 

      接受类型:ENode(也就是所有对象类型:int, double, boolean, String, ENodeList, EObject)

      参数:string类型,值为key(属性的标识符)

      返回:最接近的属性值

      详细描述:此服务首先在属性文件中寻找key,如找不到,用一个更小的key寻找,直到找到为此,先在属性文件中找,后在模板中找,如最终扔找不到,返回Empty feature evaluation异常。

      应用举例:给定一个key “aa.bb.cc.dd”, 如果getProperty(“aa.bb.cc.dd”)返回空,则用getProperty(“aa.bb.cc”)继续,如仍找不到,则用getProperty(“aa.bb”)……如此反复

      可以利用此性质,为一系列相同前缀的属性设置默认属性值,这样这些属性就至少有一个属性值

    2、getProperty

      getProperty(String):返回key的value

      接受类型:ENode(也就是所有对象类型:int, double, boolean, String, ENodeList, EObject)

      参数:string类型,值为key(属性的标识符)

      返回:key的属性值

    3、getProperty

      getProperty(String,String):在指定文件中,寻找key的关联属性值

      接受类型:ENode(也就是所有对象类型:int, double, boolean, String, ENodeList, EObject)

      参数:string类型,值为文件的名字(不包含扩展名)

         string类型,值为key(属性的标识符)

      返回:key的属性值

     三、需求服务

    1、delete

      delete(String):删除条件指定的列表元素

      接受类型:ENode(也就是所有对象类型:int, double, boolean, String, ENodeList, EObject)

      参数:条件表达式

      返回:满足条件表达式的元素列表

      应用举例:<%eAllContents(“ Class ”).delete(“ attributes.nSize() == 0 ”))%去掉了没有属性的class。

      不建议使用delete服务,建议使用[],[]是xpath语法,用于过滤元素

    2、delete

      delete(String,String):删除两个参数相等时对应的元素

      接受类型:ENode(也就是所有对象类型:int, double, boolean, String, ENodeList, EObject)

      参数:string类型,条件表达式的左边

         string类型,条件表达式的右边

      返回:满足条件表达式的元素列表

       应用举例:<%eAllContents(“ Class ”).delete(“ attributes.nSize() ”, “ 0 ”)%>去年了没有属性的class。同上,也不建议使用

    3、evaluate

      evaluate(String):表达式求值

      接受类型:ENode(也就是所有对象类型:int, double, boolean, String, ENodeList, EObject)

      参数:string类型,值为表达式

      返回:表达式的计算结果

      应用举例:<%evaluate(eAllContents(“ Class ”).attributes.nSize().sep(“ + ”).toString())%>返回了所有类的属性的个数。

    4、select

      select(String):根据指定条件选择对象

      接受类型:ENode(也就是所有对象类型:int, double, boolean, String, ENodeList, EObject)

      参数:string类型,值为表达式

      返回:满足条件的对象列表

      应用举例:<%eAllContents(“ Class ”).select(“ attributes.nSize() == 0 ”)%>返回所有没有属性的类。

      不建议使用selete服务,建议使用[]

    5、select

      select(String,String):删除两个参数相等时对应的元素

      接受类型:ENode(也就是所有对象类型:int, double, boolean, String, ENodeList, EObject)

      参数:string类型,条件表达式的左边

         string类型,条件表达式的右边

      返回:满足条件表达式的元素列表

       应用举例:<%eAllContents(“ Class ”).selete(“ attributes.nSize() ”, “ 0 ”)%>过滤所有没有属性的class。同上,也不建议使用

    四、资源服务

    1、getFileContent

      getFileContent(String):以string的形式返回文件的内容

      接受类型:ENode(也就是所有对象类型:int, double, boolean, String, ENodeList, EObject)

      参数:string类型,值文件的路径

      返回:文件的内容

      详细描述:如果文件为空或无法访问,返回空的buffer。

      应用举例:<%getFileContent(“ C:/Obeo/models/MyModel.xmi ”)%>返回了MyModel.xmi的内容。

    2、getChainPath

      getChainPath():返回根链(chain)路径

      接受类型:ENode(也就是所有对象类型:int, double, boolean, String, ENodeList, EObject)

      返回:根链路径

      应用举例:<%getChainPath()%>

    五、专用服务

      专用服务是acceleo专用的语法服务。

    1、i

      i():返回当前迭代索引

      接受类型:ENode(也就是所有对象类型:int, double, boolean, String, ENodeList, EObject)

      返回:当前迭代索引

      应用举例:public void method(<%for (parameters) {%><%if (i() != 0) {%>, <%}%><%type%> <%name%><%}%>) {..

    2、args

      args(int):脚本调用传递参数时,获取参数值

      接受类型:ENode(也就是所有对象类型:int, double, boolean, String, ENodeList, EObject)

      参数:参数索引

      返回:指定索引的参数值

      应用举例:假如通过<%myScript (“ test ”, “ otherTest ”)%>调用myScript脚本,则在脚本myScript中<%script type=“ Property ” name=“ myScript ”%>,<%args(0)%>表示参数“test”,<%args(1)%>表示参数“otherTest ”,而<%args(6)%>是空参数“”。

    六、总结

      本讲又介绍九种服务中的五种服务,后文将介绍最后的两种服务,并将为该教程画上圆满的句号。

  • 相关阅读:
    有一天人人都会变成程序猿
    mysql 假设存在id则设数据自添加1 ,不存在则加入。java月份计算比較
    做程序员的老婆应该注意的一些事情
    人类科技的发展为什么会是加速度的(TRIZ方法再推荐)
    Unity5.0 RPG角色扮演历险类游戏之 森林历险记
    linux目录对照命令——meld
    iOS --- [持续更新中] iOS移动开发中的优质资源
    【spring bean】spring中bean的懒加载和depends-on属性设置
    【spring bean】 spring中bean之间的引用以及内部bean
    【spring set注入 注入集合】 使用set注入的方式注入List集合和Map集合/将一个bean注入另一个Bean
  • 原文地址:https://www.cnblogs.com/jpcflyer/p/2514812.html
Copyright © 2020-2023  润新知