Jet 

安装过程

    1. 下载 emf插件

    2. 下载 jet插件

    3. 查看 help content中是否有帮助,如果有多半安装成功了

    4. 点击 new—》project—》选择 transformation project(将 显示所有的wizard 启动,否则看不到,太坑爹了)

作用

         快速构造代码包和类结构,类似于易点

         模板和参数结合产生任意文本,比如生成sql,txt文件等

组织结构

         参数:  通常为xml文件(有xpath支持)

      模板: 使用jet定义,有tag和text组成,类jsp

      控制文件: main.jet(根据参数生成目录和文件)

 

         Jet工程由一个 main.jet (主要完成转换),一个参数文件(为转换提供数据,为xml),多个模板文件(和参数结合生成不同的文件内容)

使用步骤

1.         jet  transformation project (保证显示所有wizard启动)

2.       templates 中创建模板文件 *.jet

<c:iterate select="$class/property" var="prop" >

    private <c:get select="$prop/@type" /> <c:get select="$prop/@name" /> ;

</c:iterate>

 

3.       创建参数文件 parameter.xml



<workspace>

    <package name="com.test">

       <class name="User">

           <property name="name" type="String" initial="Honda Accord" />

           <property name="age" type="int" initial="140" />

           <property name="status" type="boolean" initial="true" />          

       </class>

       <class name="Course">

           <property name="name" type="String" initial="数据挖掘" />

           <property name="time" type="int" initial="40" />

       </class>

    </package>
</workspace>

 

4.       main.jet 中根据参数创建



 

<c:if test="isVariableDefined('org.eclipse.jet.resource.project.name')">

    <ws:file template="templates/dump.jet" path="{$org.eclipse.jet.resource.project.name}/dump.xml"/>

    <c:iterate select="/workspace/package" var="package" >

    <ws:folder path="{$org.eclipse.jet.resource.project.name}/gen_src/" >

    <java:package name="{$package/@name}" > 

       <c:iterate select="$package/class" var="class" >

                <java:class name="{$class/@name}" encoding="utf-8" template="templates/data.jet"/>

       </c:iterate>

       </java:package>

       </ws:folder>

</c:iterate>   

</c:if>

 

5.       run configuration 完成运行

        input 处指定参数文件

6.       查看生成的文件和路径

可用元素

XPath    

关于 JET 中的 XPath ,应记住以下几个要点:

  1. 变量是由几个 JET 标记定义的 - 注意 var 属性。它们可能也是由 c:setVariable 标签定义的。
  2. 需要路径表达式的 JET 标签有一个 select 属性。
  3. 任何标签属性都可能包含一个动态的 XPath 表达式,是由括号({ 和 })所包含的 XPath 表达式。
标签

l  ws:file  完成模板和参数的合并

    {$org.eclipse.jet.resource.project.name} 是一个动态 XPath表达式,用 org.eclipse.jet.resource.project.name 变量的值替换部分字符串。该变量是由 JET 引擎定义的

        <ws:file template="templates/email.jet" path="{$org.eclipse.jet.resource.project.name}/{$currEmail/@to}.txt" />

l  c:get  输出表达式的内容

        Pre<c:get select="/app/@middle" />Post  输出  PreHelloPost

l  c:iterate迭代标记

iterate 标签通常也用于控制模板的其实标记。

例如,如果要为模型中的每个人创建 Java™ 类,可使用如下代码:

<c:iterate select="/app/person" var="currPerson">

<ws:file template="templates/PersonClass.java.jet"

path="{$org.eclipse.jet.resource.project.name}/{$currPerson/@name}.java"/>

</c:iterate>

c:choose 和 c:when  选择标签

c:set

该标签允许模板动态更改输入模型的属性。

setVariable

该标签允许模板声明和使用一个全局变量,使用 XPath 的全部能力来在任何时候操纵该变量。

如 <c:setVariable select="0" var="i" />设置i的值为 0

l  java

        标签中 java:package java:class 需要和 ws:project 相配合

扩展点

    org.eclipse.jet.tagLibraries  用于扩展标记库

    org.eclipse.jet.xpathFunctions  启动自定义的xpath表达式

    org.eclipse.jet.transform  用于什么来启动模板

    org.eclipse.jet.modellnspectors   间Java对象适配为 xpath 信息模型

    org.eclipse.jet.modelLoaders   

    org.eclipse.jet.deployTransforms   将transform 打包成deploy package,可用于UI查看那些转换可用

实例:创建代码

    编写xml格式的参数文件:包括 包,类,属性,函数等

    编写不同类的模板文件

    编写 main.jet文件,根据参数生成目录和文件,使用ws:folder和ws:file完成生成

运行程序

参考

         http://www.ibm.com/developerworks/library/os-ecl-jet/

Jtend

一种 statically-typed 语言,并可以生成java源代码

特征:

       1.减少不必要的语法

       2.比 Groovy快,比scala简单,有很多java工具支持

       3.基于java 加入了 modern language feature

       4.可自动生成java 源代码

基于java以下方面改进

    1. extension method ——enhance closed types with new functionality   

    2. lambda expression—— anonymous function literals

    3. operator overloading——操作符重载

    4. powerful switch expressions——type based switching with implicit casts

    5. multiple dispatch——对多态的支持

    6. template expressions——

    7. local type inference——声明对象时基本不用写类型

    8. 支持java泛型

Template Expression

    前后是三个单引号    

 

Movies 实例

    @Data 作用

  • a getter-method for each field,
  • a hashCode()/equals() implementation,
  • implementation of Object.toString(),
  • a constructor accepting values for all fields in the declared order

    关键字 val代表 field是final的

 

语法规则

    java bean 可通过属性名访问, a.getP()中a如果为空,这种错误可skip

    提供 lambda表达式,如: [String foo, String bar | foo + bar]

    自动转换:

        List和Array之间的转换,如val List<String> list=array

    支持java和jTend之间的互相调用

 

类的申明

    从 package和import 开始

    { } 是可选的

    xtend声明的class默认是 top-level,所以是public

    支持一个文件中声明多个类,每个类是单独文件

    构造函数可以 new(参数)

    方法通过 def或 override定义

    属性通过 val(final)或者var(非静态)声明, 类型不需要指定,可以通过内容推测出,如val list={"a","b"}

extension method:

    不需要修改就可以扩展已有类型,如:  “guang“.toFirstUpper():

    1. 已有库的扩展

           * ObjectExtensions

          * IterableExtensions

          * MapExtensions

          * ListExtensions

          * CollectionExtensions

          * BooleanExtensions

          * IntegerExtensions

          * FunctionExtensions

    2. 扩展 local expression    

    3. 扩展 filed

    4. 扩展 import

    <未完,感觉不是很有用,以后再说>

 

参考

     eclipse 的help  content

 

 

Jmerge

         支持代码合并功能,通过使用简便的代码和实现定义好的合并规则就可以将自动生成代码与人工手写代码有效的整合。

         具体待查看

gmf

       基于eclipse的开源建模框架,gmf使用domain meta model可以生成建模代码

       gmf对emf和gef进一步封装,提供了模型驱动的系统生成框架和运行时架构,其中生成框架提供一系列工具,可以在图形环境定制自己的领域模型,并基于该模型一步步设计开发。可以自定义 建模元素,各种图符和工具面板, 十分丰富的扩展点。

emf

       是一个开源框架和代码生成工具,可帮助我们以模型驱动方式开发eclipse应用程序,它定义了ecore 元模型,可转换为java代码。

gef

       是图形编辑器框架,只要模型改变能通知到控制器即可,控制器称为editpart,是应用程序的核心部分,负责将模型的改变反映到视图,并将用户在视图上所做的操作应用到模型,在视图方面GEF使用Draw2D。

        通常使用EMF创建后台模型,用GEF来做可视化编辑器和后台模型的同步。

SoDA for word

    和rational的rose,需求 等相结合,生成软件开发文档

Velocity 相关工具

Texten  使用 ant和velocity配合,生成任意的文件。

从功能上来说,应该比 jet强大,毕竟和ant 结合了