zoukankan      html  css  js  c++  java
  • Model to Text工具Acceleo使用教程(五)——模板服务

      这一讲将详细介绍acceleo提供的模板服务,主要有九种:上下文服务、类型服务、对象服务、属性服务、需求服务、资源服务、专用服务、字符串服务和xpath服务。

    一、上下文服务

      上下文服务提供了关于上下文和栈的服务。

    1、get

      get(String):返回key参数在当前上下文中所引用的对象。

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

      参数:字符串key(key引用了当前上下文的对象)

      返回:key引用的对象

      详细描述:get允许通过key从当前脚本上下文中获取对象,当然前提是先通过put服务将此对象与key关联(put/get应该是通过hash操作实现的,put会在后面描述)。上下文是指当前脚本以及被其调用的子脚本。例如当某次计算非常复杂时,可以只计算一次,后将此结果值通过put与key联系起来。然后下次用到时,通过get(key)获取。如果key没有关联任何对象,则返回空对象。

      应用举例:

      <%myObjet.put(“ idOfMyObject ”)%>

      <%get(“ idOfMyObject ”).name%>

      第一条脚本命令会生成空的字符串,然后将myObjet与“ idOfMyObject ”关联。

      第二条脚本命令get(“ idOfMyObject ”).name返回的是对象myObjet的名字。

    2、put

      put(String):将输入类型通过key保存。

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

      参数:字符串key(key引用了当前上下文的对象)

      返回:空

      详细描述:put通过key保存输入类型,组成(key,value)对。

      应用举例同上。

    3、peek()

      peek()返回上下文栈的栈顶对象。

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

      返回:如果栈不空,返回栈顶对象,如果栈空,返回空对象。

      应用举例:(假设a是一个对象)

      <%a.push()%>: 将对象a入栈,当然生成的字符串是空的。
      <%peek().name%>: 返回对象a的名字。
      <%peek().type%>: 返回对象a的类型。
      <%pop()%>: a对象出栈,也会生成空的字符串。
      <%peek()%>: 因为此时栈已经空了,所以返回的是空对象。

    4、pop()

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

      返回:空

      应用举例:

      <%a.push()%>: 将a入栈。
      <%b.push()%>: 将b入栈。
      <%pop()%>: b出栈,生成空的字符串。
      <%c.push()%>: 将c入栈。
      <%pop()%>: c出栈,生成空的字符串。
      <%pop()%>: a出栈,生成空的字符串。

    5、push()

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

      返回:空

      应用举例同上。

    二、类型服务

     1、adapt

      adapt(String):将输入类型转换成参数指定的类型

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

      参数:枚举string类型,值可以是EObject, String, boolean, int, double, List, ENodeList

      返回:转换后的值

      详细描述:adapt服务将输入类型转换成参数指定的类型,如果输入为空类型,则返回空对象。

      应用举例:

      <%(" 1234 ").adapt(“ int ”)%>将字符串“1234”转换成int并输出。

    2、cast(建议不用)

      cast(String),类似filter服务,从输入对象列表中选择出指定的对象列表

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

      参数:string类型,值是需要选出的类型

      返回:指定类型的对象列表

      应用举例:

      <%eAllContents().cast(“Class”)%>,eAllContents服务返回输入对象的所有孩子对象,AllContents().cast(“Class”)返回的是其中的class类型或其对象。

      不建议用cast,推荐用filter。

    3、current

      current()返回当前对象。

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

      输出:当前对象

      详细描述:类似于java中的this,保存当前对象指针。current()的输入可以显示,但在script或for中也可以隐式给出。在script中,current()返回的是(<%script type=“ object ”..%>)中指定的对象,在for中,current()返回的是本次迭代的对象。current()可以用于比较对象,如果输入为空,则返回空对象。

      应用举例:

      <%for (eAllContents(“ Attribute ”) {%>
        <%eAllContents(“ Class ”)[name == ' ” + current().name + “ ' ].name%>
      <%}%>

      此例中,只有class名与当前迭代属性名相同时,输出类名。

    4、current

      current(ENode)返回当前对象。

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

      参数:对象所在层次,如果是整数,0表示当前层,1表示上一层,2表示上上层……,当然也可以是字符串

      返回:指定层次的对象

      应用举例:

      <%for (eAllContents(“ Package ”)) {%>
        <%for (eAllContents(“ Class ”)) {%>
          <%for (attributes) {%>
            <%current(0).name%>
            <%current(1).name%> == <%current(“Class”).name%>
            <%current(2).name%> == <%current(“Package”).name%>
          <%}%>
        <%}%>
      <%}%>

      current(0) 表示 attributes
      current(1) 表示 classes
      current(2) and current(“Package”) 表示 packages

    5、debug

      在控制台中简短显示当前对象信息。

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

      返回:当前对象

      详细描述:debug服务显示当前对象的类型和值,它调用了trace服务。

    6、filter

      Filter(String):从接受对象列表中筛选出参数指定的对象,类似于cast服务。

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

      参数:字符串类型,值为筛选对象的类型

      返回:参数指定的类型列表

      应用举例:

      <%eAllContents().filter(“ Class ”)%>返回当前类型的所有孩子类型中的class或对象。

    7、minimize

      minimize():删除接受类型中的所有重复对象,不建议使用

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

      返回:唯一对象列表

      详细说明:调用了toString服务来比较对象,如果接受类型为空,则返回空。

      应用举例:假设a, b, c, d, e为对象

      {a, a, b, b, b, c, d, e, e, e, e},minimize() 返回的结果是 {a, b, c, d, e}。

    8、nContains

      nContains(ENode):表示一个元素是否为接受类型列表中。

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

      参数:想要寻找的元素

      返回:如果列表中存在此元素,返回true,否则false。

      应用举例:对于一个对象列表{a, b, c}

      nContains(a) 返回 “true”
      nContains(d) 返回 “false”

    9、nFirst

      nFirst():返回列表的首元素

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

      返回:列表的首元素

      详细描述:此服务调用了nGet(0)服务。

      应用举例:同样对于上一例中的对象列表,此服务返回a

    10、nGet

      nGet(String):类似于get(String),返回与key关联的对象,不建议使用

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

      参数:字符串类型,值为关联对象的key

      返回:当前上下文中与key关联的对象

      应用举例:

      <%myObjet.nPut(“ idOfMyObject ”)%> 
      <%nGet(“ idOfMyObject ”).name%> 参考get与put服务。

    11、nGet

      nGet(int):根据参数索引,返回对象列表中的指定对象

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

      参数:int索引

      返回:指定索引的对象

      详细描述:如果类型列表为空或索引越界,则返回空对象。

      应用举例:

      如果一个模型包含三个类:“c1”, “c2” 和 “c3”, “eAllContents(“Class”)”返回了这些类的列表,则<%eAllContents(“ Class ”).nGet(0).name%> 与 <%eAllContents(“ Class ”).nGet(1).name% > 分别返回是c1和c2。

    12、nGet

      nGet(int, int):根据参数索引,返回列表中的子列表。

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

      参数:int begin: 子列表的起始索引

         int end: 子列表的终止索引

      返回:指定范围内的对象

      应用举例:

      同样对于上面的例子,<%eAllContents(“ Class ”).nGet(0,1).name.sep(",")%> 返回的是 “c1,c2”

                <%eAllContents(“ Class ”).nGet(1,2).name.sep(",")%> 返回的是 “c2,c3”

    13、nLast

      nLast():返回对象列表的最后一个对象

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

      返回:列表的最后一个对象

      应用举例:

      同样用8中的例子,用此服务返回的结果是“c”。

    14、nMinimize

      nMinimize():删除列表的重复元素

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

      返回:唯一对象的列表

      应用举例同7。

    15、nPeek

      nPeek(),同peek(),建议使用peek()

    16、nPop

      nPop(),同pop(),建议使用pop()

    17、nPush

      nPush(),同push(),建议使用push()

    18、nPut

      nPut(),同put(),建议使用put()

    19、nReverse

      nReverse():将对象列表逆序

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

      返回:逆序后的对象列表

      应用举例:{a, b, c}调用此服务后,返回{c, b, a}。

    20、nSize

      nSize():返回对象列表的大小

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

      返回:对象列表的对象个数

      应用举例:

      <%eAllContents(“ Class ”).nSize()%>返回接受类型列表中class的个数。

      如果类中至少有一个属性,此服务还可用于方法的生成,如在<%if (attributes.nSize() > 0) {%> 和 <%}%>之间添加生成的方法。

    21、nSort

      nSort():将对象列表排序

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

      返回:排序后的对象列表

      详细描述:将对象列表从低到高排序,其中调用了toString方法,相当于进行了字符串排序。

      应用举例:

      {“class”, “attribute”, “5”, “stereotype”, “class”}调用此服务后返回{ “5”, “attribute”, "class", “class”, “stereotype”}。

    22、nSort

      nSort(String):根据指定字符串表达式排序

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

      参数:string表达式

      返回:排序后的对象列表

      应用举例:

      对象列表{d, a, c, f, b, e}的名字假设是{“class”, “attribute”, “5”, “stereotype”, “class”},则<%nSort(name)%>返回结果是{ “5”, “attribute”, "class", “class”, “stereotype”}。

    23、reverse

      reverse(),同nReverse(),建议使用nReverse()

    24、sep

      sep(String):在对象列表的每两个对象之间增加区分符。

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

      参数:string区分符

      返回:添加区分符后的对象列表

      详细描述:对应对象列表只有一个对象,则不添加区分符;如果对象列表为空,则返回空。

      应用举例:{a, b, c},应用sep("\t")后返回{a, “\t”, b, “\t”, c}。

    25、sepStr

      sepStr(String),同sep(String),建议使用sep(String)

    26、sort

      sort(),同nSort(),建议使用nSort()

    27、sort

      sort(String),同nSort(String),建议使用nSort(String)

    28、toString

      toString():将对象转换为字符串

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

      返回:对象的字符串形式

      详细描述:类似于java中的toString(),将对象转换为字符串。

      应用举例:假设a,b,c是EMF对象,mylist是对象列表{a,b,c}

      <%eAllContents().nSize().toString()%>返回是对象个数的字符串形式

      <%a.toString()%>返回了对象a的描述信息,即“package_of_a.type_of_a (attribut1: valeur1, attribut2: valeur2, ..) ”

      <%myList.toString()%>返回了每个对象的描述信息,即“package_of_a.type_of_a(attribut1a: valeur1a, attribut2a: valeur2a, ..) package_of_b.type_of_b (attribut1b: valeur1b, attribut2b:valeur2b, ..) package_of_c.type_of_c (attribut1c: valeur1c, attribut2c: valeur2c, ..) ”

    29、trace

      trace():显示当前对象的简要描述。

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

      返回:对象的简要描述(类型和值)

      应用举例:假设a是一个类

      <%a.trace()%>输出的是[numberOfTheTrace] type = class value = “a”。

    30、trace

      trace(String):根据参数,显示对象的指定信息

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

      参数:字符串类型,值为要显示的信息名

      返回:对象的指定描述信息

      应用举例:

      <%for (attributes){%>
        <%trace(“ name ”)%>
      <%}%>

      显示了所有属性的名字。

    31、until

      until(String,String):调用参数指定的对象

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

      参数:String link: 对象类型链接

         String type: 对象类型

      返回:寻找到的对象

      详细描述:此服务递归寻找type的link,直到找到为止。

      应用举例:

      a,b,c分别是类A,B,C的实例,container是class类型的link,c.container 返回 b,b.container 返回 a,a.container 返回 null。

      <%c.until(“ container ”, “ A ”).name%>: 生成了a的名字
      <%a.until(“ container ”, “ A ”)%>: 生成了a的名字
      <%b.until(“ container ”, “ C ”)%>: 生成空的字符串

    二、总结

      本讲详细讲解了模板服务中的两种服务:上下文服务和类型服务,剩余的七种服务将在下文给出讲解。

  • 相关阅读:
    warshall、
    简单的php单例再次理解
    windows操作系统,在phpstudy集成环境,安装redis扩展,并启用redis服务和客户端
    php单例模式相关知识
    jui结合ajax非表单提交刷新页面
    php截取想要的字符串
    xmlToArray和arrayToXml
    jquery时间戳转换成格式化时间
    腾讯地图调用获取经度纬度代码
    随机生成自定义位数英文字符串
  • 原文地址:https://www.cnblogs.com/jpcflyer/p/2513881.html
Copyright © 2011-2022 走看看