Eclipsework 学习笔记
介绍
l eclipsework是一个以webwork为生成框架的,基于velocity的eclipse插件,据我的了解,有以下几个好处:
(1)表达框架以XML形式形成,如要生成一个找类的页面,或是一个找数据库的页面,只需要按一定规则来写XML文件就可以了。
(2)生成部分使用的是velocity的VM模板,可根据情况进行修改,实际上,可以生成任何形式的文本。注:所以它原来是为了生成webwork框架的程序而做的,许多模板和XML控制文件都已经生成好了,但我们可以依据我们自己的需求,将它改成struts框架的东东。
(3)控制页面部分的目的是为后面的模板提供参数,而且可以同时以多个模板生成多个文件。
(4)以插件形式与开发工具相结合,易于安装和使用。
l 缺点:
(1) XML控制文件没有说明文档,一些组件比较难用,好在总体上还是够用的。
(2) 现在用的是0.8的程序,而它最新的1.0的程序不能在eclipse 3.2.1 上使用。
(3) 可控的参数不多,造成在模板使用的时候,一些特别的要求不好实现。
(4) 对最新的velocity-tools不支持。也可能是eclipse不支持吧。
1. 安装过程:
序:在open-open上看到这个东东的说明,因为正想找一个工具,在实现我们自己平台的开发上的一个灵活性与方便的统一,想要以一种模板 方式 先生成基本的代码,再由开发人员深入加工,因为用到一些我们平台的特性,虽然平台是基于STRUTS的,但用myeclipse或easystruts都不能加入这些平台的特性,只能生成普通的STRUTS框架。
于是,到达http://eclipsework.sourceforge.net/ ,网站如此的简单,只有一个一分钟使用说明,说是有很多例子,其实也没有几个。先下来再说吧。
第一步:准备程序
org.eclipse.eclipsework_ 1.0.1 --------------- (这个在eclipse3.2.1上不可用,不用好了)
org.eclipse.eclipsework_ 0.8.0 ---------------这个才行,开始不知道,又学了半天eclipse插件的安装
templates-0.1-------------------------已有模板,可用来学习
easysql-1.1----------------是数据库插件,可以访问数据库的视图。
commons-lang-2.3------------其实是作为velocity的工具的代用品出现的,后面说明为什么要下这个。
Eclipse 3.2.1 -----------我只知道这个版本没有问题,别的没试
Myeclipse5.1GA M2----------可能不需要吧,但如果是生成POJO的话,还是这个方便,反正我装了。
其它的都在exlipsework的LIB包中,velocity的版本是1.4,abstractplugin.jar这个包应该是作者自己写的接口类,不怎么样。
好了,都有了,先把org.eclipse.eclipsework_ 0.8.0 和easysql-1.1放到plug-in目录里,打开myeclipse(别说没有注册,网上有www.icn.biz)。
第二步:试验一个
先要打开easysql,在视图的other里,连上一个可用的数据库吧。再点新出来的那个open templates view的按键。在connections里select一个库。
而templates的要在选项里要配templates0.1目录,最外面的wizards.xml和其目录。
直接试试DEMO JDBC里的东东吧。……….
依步骤选一个类,再选一个包,后会在包下生成一个DemoPOJOJDBC.java的文件,看起来很方便。
2. 研究(一)wizrds.xml文件
先看一下templates的这个文件吧。样子如下
<category name="user">
<wizards>
<wizard-def description="hello" template="user/wizard.xml"/>
<wizard-def description="BaseDAO" template="user/BaseDAO.xml"/>
<wizard-def description="var" template="var/wizard.xml"/>
</wizards>
</category>
可以看得出来,是页面上template view的TREE,指定每一个wizard文件的名称位置。如果自己写一个的话,也要加到这里来才能看得到。
3. 研究(二) xml向导文件
这个文件用来控制GUI界面的,可以说的不少,整理一下吧。
组件 | 属性说明 | 作用 | 其它 |
group
| Name Label checkbox | 显示一个group,标题为label,可见不可见里面的内容为checkbox,由一个ckeckbox组件控制。 | 作为默认,name为参数名,在后面的模板里以$name的方式可调用 |
container | Name Label Required type | 用来选一个包,目录或源文件目录。Required来控制能不能进行下一步 Type为package/folder/source |
|
textfield | Name Label required extensions ”vm,jsp,ftl,xslt" value tooltip type radio | 可以作为输出文件的名字,可带后缀。Value为默认值 Tooltip Type没有研究 Radio可能是同checkbox一样的控制 |
|
checkbox
| Name Label Value Tooltip radio | 同上 |
|
radio | Name Label Value Listener Radio Elements Option tooltip | 基本同上 多的部分还没有研究 |
|
combo | Name Label Value Tooltip Radio Edit---boolean Listener Elements File Path Filter Option Value
| 基本,同上 多的部分还没有研究 |
|
type | Name Label Required Type Validate value | 用来取一个类 多的没研究 |
|
file | Name Label Required Extensions External----boolean Tooltip Radio Fullpath---boolean | 取一个文件,可以是工程内的或是操作系统级的 |
|
页面级 |
|
|
|
component-page | Required Description Condition image | 组件级的东东要加在这个标签里面 |
|
model-page | Description Type Required pattern-mode--boolean name image | Used to select the POJO or Table from the Database
Type类型分析为三种:table sql 和POJO的,POJO不用标。Table用来选一个表,再对应table类应该有一个column类 Sql为生成一个sql语句的向导 POJO可以选一个或多个类(pattern-mod)
|
|
table-page | Description Required Columns Lines var | 用来插入多个变量的列表向导,做得很乱,只是勉强可用。注:lines取得不对,不要用,空写一个就好了。 | <table-page> <description></description> <columns> <column>ERROR</column> <column>app.properties</column> </columns> <lines></lines> </table-page> |
其它 |
|
|
|
include |
| 可包含一个其它的向导文件 |
|
Table | Name Label Required tooltip | 还不知要怎么用,显示为一个表 |
|
variables | Var Name Value value1 …..value9 | 加一些常量 10个?没用过 |
|
title |
| 标题 |
|
output | Template condition | 输出部分 指定对应的模板VM 指定输出的文件名,后缀等 可以条件输出 对于POJO类,有一个特殊的处理,但没有什么用,写得也不好。 |
|
4. 深入研究(一)
看了一阵之后,开始写自己的模板,选一个表,输出它的POJO类,看起来简单,但并不好做。主要是在VM模板方面,可用的工具太少,连处理lastindexof都没有。真的没有?仔细研究一下源代码吧。不太懂eclipse的PLUG-IN编程,但还是凭硬工夫看出些东东来。Eclipse的就不说了,也没好好看。主要由wizardHelper类来处理初始化的东东。看了一下,在velocity的context里加了stringUtils,这个类是在core的utils中继承apache的stringUtils工具类,很好用的,但我使的时候为什么总报错呢?回到前面,为什么下载commons-lang-2.3了吧?有许多新方法,但又出问题,因为作者在老的类里加了一个方法,而新的类里有这个的static了,看来只好重新编译这个类了。
做了一个大胆的试验,建工程,加库,千方百计地重写了这个类,如下:
package org.eclipse.eclipsework.core.util;
public class StringUtils extends org.apache.commons.lang.StringUtils {
/**
* new add
*/
public String getJDBCtype(String source) {
String temp="";
temp=StringUtils.substringAfterLast(source,".");
if(source.contains("Integer")) {
temp="Int";
}
return temp;
}
public String capReplace(String source,String a,String b){
…
}
public String uncapReplace(String source,String a,String b){
…
}
public String cap(String s){
…
}
public String uncap(String s){
…
}
/*public int indexOf(String source, String target){
return super.indexOfAny(source,new String[]{target});
}*/
public String getJavaName(String s) {
…
}
public String getFieldName(String s){
…
}
}
另外加了一个方法,来取得数据库类型对应的JAVA类的类型(不是类)。
5. 在Wizard.xml文件中有哪些个已经定义好的velocity变量,如:$stringUtils?
在wizardHelper里加入了工具及其它变量
templatesPath | 模板路径 |
|
stringUtils | 字符串工具类 | 继承自org.apache.commons.lang.StringUtils
|
utils | 一些转换工具类 |
|
date | Calender类 |
|
year | 时间 |
|
????EclipseWorkFactoryManager. getStaticSettings(). getProperties() | 静态变量 |
|
map.put("if", "#if"); map.put("for", "#foreach"); map.put("foreach", #foreach"); map.put("end", "#end"); map.put("velocity", "$"); map.put("open", "{"); map.put("close", "}"); | Velocity Tags |
|
| 在wizard页面定义的变量 |
|
model | model |
|