我们已经用它来生成java代码:
第一步:
编写模板
第二步:
编写引擎
package rt.common.codegen;import java.io.*;
import java.util.*;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.Template;
import org.apache.velocity.io.VelocityWriter;
import org.apache.velocity.runtime.RuntimeInstance;
public class CodeEngine
{
private VelocityContext context = null ;
private String javaPath = null ;
private String javaFile = null ;
private String vmName = null ;
protected void error ( String errMsg, final Throwable throwabe) {
System.out.println (errMsg) ;
if (throwabe != null) {
throwabe.printStackTrace() ;
} } public CodeEngine (String vmPath, String vmName, String javaFile) {
this.javaPath = javaPath ;
this.vmName = vmName ;
this.javaFile = javaFile; try {
Velocity.setProperty (Velocity.FILE_RESOURCE_LOADER_PATH,vmPath );
Velocity.init() ;
context = new VelocityContext();
} catch (Exception e) {
error ("Init Velocity error:", e);
}
} protected void ContextContentLoader(Vector keys, Vector values) {
for ( int i=0; i < keys.size() ; i++)
context.put( keys.elementAt(i).toString(),values.elementAt(i) ) ;
} protected void SaveToJavaFile() {
VelocityWriter writer = null ;
try {
writer = new VelocityWriter(new FileWriter (javaFile)) ;
Template template = Velocity.getTemplate(vmName) ;
template.merge(context,writer) ;
writer.close() ;
} catch (Exception e) {
error ("Save to java file error!",e ) ;
}
}
}第三步:
package rt.common.codegen;import java.util.* ;
import java.io.*;public class CodeGen {
private String responstoryName = null ;
private String javaFileName = null ;
private String vmPathName = null ;
private boolean isQueryObject = false; /* vmpathname maybe changed */
public static String vmPathName = "D:\\Code Gen\\mytemplate" ;
public static final String vmFileName = "javaComponentArchetype.vm" ; public CodeGen (String vmPathName,String responstoryName,String javaFilePath,String javaFileName,boolean isQueryObject) {
this.vmPathName = vmPathName ;
this.responstoryName = responstoryName ;
this.javaFileName = javaFileName ;
this.isQueryObject = isQueryObject ;
} public CodeGen() {
} protected void GenerateJavaFile ( ) {
Vector vTags = new Vector() ;
Vector vVals = new Vector() ; vTags.add ("ProjectName");
vTags.add ("Name");
vTags.add ("ValidatedName");
vTags.add ("IsQueryComponent");
vVals.add (responstoryName) ;
vVals.add (javaFileName) ;
vVals.add (javaFileName) ;
vVals.add (String.valueOf(isQueryObject).toUpperCase()) ; CodeEngine engine = new CodeEngine(vmPathName,vmFileName,javaFilePath + javaFileName+".java") ;
engine.ContextContentLoader (vTags,vVals) ;
engine.SaveToJavaFile() ;
}
public static void main (String[] args) {
CodeGen code = new CodeGen ("SampDB1","d:\\","Customer",false);
code.GenerateJavaFile () ; // gen code also save to }
} 代码生成
第一步:
编写模板
第二步:
编写引擎
package rt.common.codegen;import java.io.*;
import java.util.*;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.Template;
import org.apache.velocity.io.VelocityWriter;
import org.apache.velocity.runtime.RuntimeInstance;
public class CodeEngine
{
private VelocityContext context = null ;
private String javaPath = null ;
private String javaFile = null ;
private String vmName = null ;
protected void error ( String errMsg, final Throwable throwabe) {
System.out.println (errMsg) ;
if (throwabe != null) {
throwabe.printStackTrace() ;
} } public CodeEngine (String vmPath, String vmName, String javaFile) {
this.javaPath = javaPath ;
this.vmName = vmName ;
this.javaFile = javaFile; try {
Velocity.setProperty (Velocity.FILE_RESOURCE_LOADER_PATH,vmPath );
Velocity.init() ;
context = new VelocityContext();
} catch (Exception e) {
error ("Init Velocity error:", e);
}
} protected void ContextContentLoader(Vector keys, Vector values) {
for ( int i=0; i < keys.size() ; i++)
context.put( keys.elementAt(i).toString(),values.elementAt(i) ) ;
} protected void SaveToJavaFile() {
VelocityWriter writer = null ;
try {
writer = new VelocityWriter(new FileWriter (javaFile)) ;
Template template = Velocity.getTemplate(vmName) ;
template.merge(context,writer) ;
writer.close() ;
} catch (Exception e) {
error ("Save to java file error!",e ) ;
}
}
}第三步:
package rt.common.codegen;import java.util.* ;
import java.io.*;public class CodeGen {
private String responstoryName = null ;
private String javaFileName = null ;
private String vmPathName = null ;
private boolean isQueryObject = false; /* vmpathname maybe changed */
public static String vmPathName = "D:\\Code Gen\\mytemplate" ;
public static final String vmFileName = "javaComponentArchetype.vm" ; public CodeGen (String vmPathName,String responstoryName,String javaFilePath,String javaFileName,boolean isQueryObject) {
this.vmPathName = vmPathName ;
this.responstoryName = responstoryName ;
this.javaFileName = javaFileName ;
this.isQueryObject = isQueryObject ;
} public CodeGen() {
} protected void GenerateJavaFile ( ) {
Vector vTags = new Vector() ;
Vector vVals = new Vector() ; vTags.add ("ProjectName");
vTags.add ("Name");
vTags.add ("ValidatedName");
vTags.add ("IsQueryComponent");
vVals.add (responstoryName) ;
vVals.add (javaFileName) ;
vVals.add (javaFileName) ;
vVals.add (String.valueOf(isQueryObject).toUpperCase()) ; CodeEngine engine = new CodeEngine(vmPathName,vmFileName,javaFilePath + javaFileName+".java") ;
engine.ContextContentLoader (vTags,vVals) ;
engine.SaveToJavaFile() ;
}
public static void main (String[] args) {
CodeGen code = new CodeGen ("SampDB1","d:\\","Customer",false);
code.GenerateJavaFile () ; // gen code also save to }
} 代码生成
用Ant1.5.1调用Velocity生成java程序。步骤如何?
jakarta里面的一个项目实现了这个功能。Torque.
感觉和struts一样都是设计mvc结构的一种方式,
但不知道他们各自的特点是什么,
请大家多多指点!谢谢!