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界面的,可以说的不少,整理一下吧。
组件
属性说明
作用
其它
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
字符串工具类
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
