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

      今天终于可以把acceleo教程讲完了,本讲是最后一讲,将详细介绍acceleo的最后两种服务:字符串服务和xpath服务。

    一、字符串服务

    1、charAt

      charAt(int):返回字符串指定位置的字符

      接受类型:String

      参数:int索引

      返回:索引处的字符

      详细描述:类似于java语言中的charAt()方法,默认从0开始。

      应用举例:<%if (eContainer().name.charAt(0) == " a ") {%>

    2、endsWith

      endsWith(String):判断字符串是否以指定参数结束

      接受类型:String

      参数:期望的字符串后缀

      返回:后缀相同,返回true,否则返回false。

      详细描述:类似于java语言中的endsWith()。

      应用举例:<%if (eResource().endsWith(“ .xmi ”) {%>

    3、equalsIgnoreCase

      equalsIgnoreCase(String):判断两个字符串是否相等,不区分大小写

      接受类型:String

      参数:匹配字符串

      返回:模式串与匹配串相同,返回true,否则返回false。

      详细描述:类似于java语言中的equalsIgnoreCase()。

      应用举例:<%if (eContainer().name.equalsIgnoreCase(“ myClass ”)) {%>,如果父亲对象的名字是myClass(不区分大小写),则满足条件。

    4、indentSpace

      indentSpace():字符串前添加一个空格(空格缩进)

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

      返回:空格缩进后的字符串

      应用举例:<%(“ abcdefg ”).indentSpace()%> 返回 “ abcdefg”。

    5、indentTab

      indentTab():同上,不过缩进的是tab

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

      返回:缩进tab后的字符串

      应用举例:<%(“ abcdefg ”).indentTab()%> 返回“  abcdefg”。

    6、indexOf

      indexOf(String):返回子字符串的首字符索引

      接受类型:String

      参数:子字符串

      返回:子字符串的首字符索引位置,如果没有子字符串,返回-1。

      详细描述:类似于java语言中的indexOf()。

      应用举例:<%myAccessPath.indexOf(“: ”)%>。

    7、indexOf

      indexOf(String,int):从指定int位置开始,返回子字符串的首字符索引

      接受类型:String

      参数:子字符串和开始探索位置

      返回:子字符串的首字符索引位置,如果没有子字符串,返回-1。

      应用举例:<%myAccessPath.indexOf(“ / ”,myAccessPath .indexOf(“ / ”))%>

    8、lastIndexOf

      lastIndexOf(String):返回最后匹配的子字符串的索引位置

      接受类型:String

      参数:子字符串

      返回:最后匹配的子字符串的首字符索引位置,如果没有子字符串,返回-1。

      详细描述:类似于java语言中的lastIndexOf()。

      应用举例:<%myAccessPath.lastIndexOf(“ / ”)%>

    9、lastIndexOf

      lastIndexOf(String,int):从指定int开始,返回最后匹配的子字符串首字符索引位置

      接受类型:String

      参数:子字符串和开始探索位置

      返回:最后匹配的子字符串的首字符索引位置,如果没有子字符串,返回-1。

      应用举例:<%myAccessPath.lastIndexOf(“ . ”, myAccessPath.lastIndexOf(“ / ”))%>

    10、length

      length():返回字符串的长度

      接受类型:String

      返回:字符串的长度

      详细描述:类似于java上的length()。

      应用举例:<%name.length()%>返回对象的name属性的长度、

    11、matches

      matches(String):判断是否满足输入的正则表达式

      接受类型:String

      参数:正则表达式

      返回:如果满足正则表达式,返回true,否则返回false。

      详细描述:类似于java语言中的match()。下面是正则表达式的概要语法:

    • [abc] a, b, or c (simple class)
    • [^abc] All the characters except a, b, or c (negation)
    • [a-zA-Z] from a to z or from A to Z, inclusively
    • [a-d[m-p]] from a to d, or from m to p. Equivalent to: [a-dm-p] (union)
    • [a-z&&[def]] d, e, or f (intersection)
    • [a-z&&[^bc]] from a to z, except b and c. Equivalent to: [ad-z] (subtraction)
    • [a-z&&[^m-p]] from a to z, except for m to p. Equivalent to: [a-lq-z](subtraction)

      应用举例:<%operations.matches(“ [get*] ”)%>返回所有以get开始的操作。

    12、replaceAll

      replaceAll(String,String):替换字符串

      接受类型:String

      参数:源字符串和替换字符串

      返回:替换后的字符串

      详细描述:类似于java语言中的replaceAll()。

      应用举例:<%myAccessPath.replaceAll(“ / ”, “ . ”)%>,将“/” 替换成了 “.”。

    13、replaceFirst

      replaceFirst(String,String):只替换第一次

      接受类型:String

      参数:源字符串和替换字符串

      返回:替换后的字符串

      详细描述:类似于java语言中的replaceFirst()。

      应用举例:<%myInterface.name.replaceFirst(“ I ”, “ i”)%>返回“myinterface”。

    14、split

      split(String):用指定字符拆分字符串

      接受类型:String

      参数:指定字符(串)

      返回:拆分后的字符串列表

      详细描述:类似于java语言中的split()。

      应用举例:“boo:and:foo”应用此服务后返回{“boo”, “and”, foo”}。

    15、startsWith

      startsWith(String):判断是否以指定字符串开始

      接受类型:String

      参数:指定字符(串)

      返回:如果前缀是指定字符串,返回true,否则返回false。

      详细描述:类似于java语言中的startsWith()。

      应用举例:<%if (name.startsWith(“ i ”) {%>

    16、substring

      substring(int):返回从指定索引开始的子字符串

      接受类型:String

      参数:起始索引

      返回:从索引开始的子字符串

      详细描述描述:类似于java语言中的substring()。

      应用举例:<%myAccessPath.substring(myAccessPath .lastIndexOf(“ / ”))%>,如果myAccessPath等于"/home/user/file.ext",则返回“/file.ext”。

    17、substring

      substring(int,int):返回指定开始索引和结束索引之间的子字符串

      接受类型:String

      参数:起始索引和结束索引

      返回:两个索引之间的子字符串

      详细描述:如果两个参数其中一个非法,则返回空

      应用举例:<%myAcessPath.substring(myAcessPath .lastIndexOf(“ / ”), myAcessPath.lastIndexOf(“ . ”))%>返回文件名字(不包含扩展名)。

    18、toL1Case

      toL1Case():首字母转换为小写

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

      返回:首字母变成小写后的对象

      应用举例:<%toL1Case(“ Interface ”)%>生成了“ interface ”。

    19、toLowerCase

      toLowerCase():将所有字母转换为小写

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

      返回:所有字母变成小写后的对象

      详细描述:类似于java语言中的toLowerCase()。

      应用举例:<%(“ MyPackage ”).toLowerCase()%> 返回 “mypackage”。

    20、toU1Case

      toU1Case():首字母转换为大写

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

      返回:首字母变成大写后的对象

      应用举例:<%toU1Case(“ interface ”)%>生成了“ Interface ”。

    21、toUpperCase

      toUpperCase():将所有字母转换为大写

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

      返回:所有字母变成大写后的对象

      详细描述:类似于java语言中的toUpperCase()。

      应用举例:<%(“ mypackage ”).toUpperCase()%> 返回 “MYPACKAGE”。

    22、trim

      trim():删除起始位置和终止位置的空格

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

      返回:删除起始位置和终止位置的空格后的对象

      详细描述:类似于java语言中的trim()。

      应用举例:<%(“ abc \n ”).trim()%>返回“abc”。

    二、xpath服务

      xpath服务通过xpath关键字实现模型导航。图1显示了xpath服务之间的关系和语义。

    图1 xpath服务之间的关系和语义

    1、ancestor

      ancestor():返回当前结点的所有祖先结点

      接受类型:EMF对象

      返回:当前对象的所有祖先对象

      应用举例:<%myClass.ancestor()%>

    2、child

      child():返回当前结点的直接孩子结点

      接受类型:EMF对象

      返回:当前对象的所有直接孩子对象

      应用举例:<%myClass.child()%>返回myClass的属性、操作等。

    3、descendant

      descendant():返回当前结点的子孙结点

      接受类型:EMF对象

      返回:当前对象的所有子孙对象

      应用举例:<%myPackage.descendant()%>返回包中包含的类及其属性、操作等。

    4、following

      following():返回右兄弟的所有结点

      接受类型:EMF对象

      返回:右兄弟的所有子孙对象

      应用举例:<%following()%>,如图2所示。

    图2 当前结点的following结点

    5、followingSibling

      followingSibling():返回当前结点的右兄弟结点

      接受类型:EMF对象

      返回:右兄弟对象

      应用举例:如图3所示。

    图3 当前结点的followingSibling结点

    6、parent

      parent():返回当前结点的父亲结点

      接受类型:EMF对象

      返回:父亲对象

      应用举例:<%myAttribute.parent()%>返回包含属性myAttribute的类。

    7、preceding

      preceding():返回当前结点的所有前面的结点,与ancestor不同的是,还包括左兄弟及其孩子结点。

      接受类型:EMF对象

      返回:当前对象的前面对象的列表

      应用举例:如图4所示。

    图4 当前结点的preceding结点

    8、precedingSibling

      precedingSibling():返回当前结点的左兄弟结点

      接受类型:EMF对象

      返回:当前对象的左兄弟

      应用举例:如图4所示。

    图5 当前结点的precedingSibling结点

    9、self

      self():返回当前结点

      接受类型:EMF对象

      返回:当前对象

    三、总结

      终于把acceleo教程讲完了,希望能对模型驱动架构的科研学者和工程人员有所帮助,当前这只是工具,实现了模型到文本的转换,但转换规则是需要自己设计的,同时转换规则的正确性也是保证生成代码是否可用的重要标志,如果有时间,我还会在以后介绍关于代码生成保证正确性的方法理论。

  • 相关阅读:
    C++ 17
    C++ 11
    mysql统计某一个数据库中有几张表
    poj2636---Electrical Outlets(插线板)
    poj2608---几个字母映射到同一个数字
    poj2583---Series Determination
    poj2578---三个数中找出第一个大于168的
    poj2521---lose money
    poj2538---字符匹配(映射)
    poj2509---抽k根烟就换一支,求能抽烟的总数
  • 原文地址:https://www.cnblogs.com/jpcflyer/p/2515012.html
Copyright © 2011-2022 走看看