package com.generate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import com.sunwayworld.Constants;
import com.sunwayworld.common.util.StringUtil;
import com.sunwayworld.srm30.common.util.SafeString;
import org.apache.log4j.Logger;
import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import org.apache.velocity.VelocityContext;
import java.util.Properties;
import java.io.*;
import java.net.URL;
enum CreateType{
//简单无关联的表,比如系统单表
SimpleSingleTable
}
public class GenerateMaster
{ //jsp文件绝对路径
public static Logger llog=Logger.getLogger(GenerateMaster.class);
//生成类型
String jsprealpath =null;
String javarealpath=null;
String javatemplatesPath="Templates\\SimpleSingleTable\\java\\";
String jsptemplatesPath ="Templates\\jsp\\";
String javaoutpath="com\\sunwayworld\\suppsyb\\";
String jspoutpath="suppsyb";
private Map m=null;
private CreateType createtype=null;
private String tablename=null;
private String titlename=null;
private GetTableCols tableinformation;
// String javatemplatesPath = "D:\\crccworkspace\\coal_code\\template\\MasterDetail\\java\\";
// String jsptemplatesPath="D:\\crccworkspace\\coal_code\\template\\MasterDetail\\jsp\\";
// String javaoutpath="D:\\crccworkspace\\coal_code\\src\\com\\sunwayworld\\ccsup\\";
// String jspoutpath="D:\\Oracle\\Middleware\\user_projects\\domains\\crcctedit_domain\\autodeploy\\DefaultWebApp\\ccsup\\";
private GenerateMaster(){
}
public GenerateMaster(String tablename,String titlename,CreateType c)throws Exception{
System.out.println( getSourceRealPath());
createtype=c;
this.tablename =tablename;
this.titlename =titlename;
this.tableinformation=new GetTableCols();
}
public static void main(String[] args){
// 获取工程路径
try {
GenerateMaster m= new GenerateMaster("bwbmbm", "评分记录",CreateType.SimpleSingleTable);
m.createNewFile();
llog.debug("文件生成完毕");
} catch (Exception e) {
llog.debug("文件生成失败");
e.printStackTrace();
}
}
public void createNewFile()throws Exception{
this.createNewFile(tablename, titlename);
}
//检查"表格"是否符合要求
public boolean checkUerTable(){
List l=tableinformation.getAllColumnList(tablename);
switch(createtype){
case SimpleSingleTable:
//简单的
TableColumnInfo columninfo=new TableColumnInfo();
columninfo.setLowercolumnname("xgrmc");
l.contains(columninfo);
break;
default: break;
}
return true;
}
/**
* 系统自动生成模块文件
* @param templatesPath
* @param outpath
* @param tablename
* @param filetype
* @param charset
* @return
*/
private boolean createNewFile(String tablename,String titlename){
boolean b = true;
try{
String fileoutpath="";
String filename ="";
//---初始化生成器
VelocityEngine ve = new VelocityEngine();
VelocityEngine jspve = new VelocityEngine();
VelocityEngine jspcommonve = new VelocityEngine();
Properties propertie = new Properties();
propertie.put("input.encoding", "UTF-8");//--设置输入编码
propertie.put("output.encoding", "UTF-8");//--设置输出编码
File f=new File(".");
//包路径
String PACKAGENAME=javaoutpath;
//获取工程路径
String projectpath=f.getCanonicalPath();
javatemplatesPath =projectpath+"\\"+javatemplatesPath;
jsptemplatesPath =projectpath+"\\"+jsptemplatesPath;
javaoutpath =javarealpath+"\\"+javaoutpath;
jspoutpath =jsprealpath+"\\"+jspoutpath;
//--初始化替换文件及属性
// HashMap map = this.getReplacePropertys(tablename,titlename,PACKAGENAME);
try{
VelocityContext context = this.generate(tablename,titlename,PACKAGENAME);
//---生成类文件-------------------------------------------
propertie.put("file.resource.loader.path", javatemplatesPath);//--模板所在文件夹
ve.init(propertie);
Template template = null;
tablename = tablename.substring(0,1).toLowerCase()+tablename.substring(1,tablename.length());
tablename = tablename.replace("_", "");
String firstuppertablename = tablename.substring(0,1).toUpperCase()+tablename.substring(1,tablename.length());
//生成action
template = ve.getTemplate("Action.vm");
fileoutpath=javaoutpath+"\\"+tablename.toLowerCase()+"\\action\\";
filename= firstuppertablename+"Action.java";
writeFile(context,template,fileoutpath,filename);
//生成bean
template = ve.getTemplate("Bean.vm");
fileoutpath=javaoutpath+"\\"+tablename.toLowerCase()+"\\bean\\";
filename= firstuppertablename+"Bean.java";
writeFile(context,template,fileoutpath,filename);
//生成beansql
template = ve.getTemplate("BeanSql.vm");
fileoutpath=javaoutpath+"\\"+tablename.toLowerCase()+"\\beansql\\";
filename= firstuppertablename+"BeanSql.java";
writeFile(context,template,fileoutpath,filename);
//生成info
template = ve.getTemplate("Info.vm");
fileoutpath=javaoutpath+"\\"+tablename.toLowerCase()+"\\valueobject\\";
filename= firstuppertablename+"Info.java";
writeFile(context,template,fileoutpath,filename);
/*
//---生成共通的JSP文件-------------------------------------------
propertie.put("file.resource.loader.path", jsptemplatesPath+"\\MasterDetail\\jsp");//--模板所在文件夹
jspcommonve.init(propertie);
//--编辑文件列表
template = jspcommonve.getTemplate("createlist.vm");
fileoutpath=jspoutpath+"\\"+tablename.toLowerCase()+"\\";
filename= "createlist.jsp";
writeFile(context,template,fileoutpath,filename);
//--审核页面
template = jspcommonve.getTemplate("approvelist.vm");
fileoutpath=jspoutpath+"\\"+tablename.toLowerCase()+"\\";
filename= "approvelist.jsp";
writeFile(context,template,fileoutpath,filename);
//--回退页面
template = jspcommonve.getTemplate("retrievelist.vm");
fileoutpath=jspoutpath+"\\"+tablename.toLowerCase()+"\\";
filename= "retrievelist.jsp";
writeFile(context,template,fileoutpath,filename);
//--查询页面
template = jspcommonve.getTemplate("querylist.vm");
fileoutpath=jspoutpath+"\\"+tablename.toLowerCase()+"\\";
filename= "querylist.jsp";
writeFile(context,template,fileoutpath,filename);
//---生成独立的JSP文件-------------------------------------------
propertie.put("file.resource.loader.path", jsptemplatesPath+"\\Master\\jsp");//--模板所在文件夹
jspve.init(propertie);
//--详细信息页面
template = jspve.getTemplate("detail.vm");
fileoutpath=jspoutpath+"\\"+tablename.toLowerCase()+"\\";
filename= "detail.jsp";
writeFile(context,template,fileoutpath,filename);
//--生成struts-config文件
template = jspve.getTemplate("struts.vm");
fileoutpath=jspoutpath+"\\"+tablename.toLowerCase()+"\\";
filename= "struts-config.xml";
writeFile(context,template,fileoutpath,filename);*/
}catch (Exception e){
e.printStackTrace();
}
}catch(Exception e){
e.printStackTrace();
b=false;
}
return b;
}
public HashMap getReplacePropertys(String tablename,String titlename,String PACKAGEPATH)throws Exception{
HashMap map = new HashMap();
//--初始化主表信息
String UPPERTABLENAME = tablename.toUpperCase();//--大写的表名
String LOWERTABLENAME = tablename.toLowerCase();//--小写的表名
String FIRSTUPPERTABLENAME = tablename.substring(0,1).toUpperCase()+tablename.substring(1,tablename.length());//--首字母大写的表名
String CHECKTABLENAME = tablename.replace("_", "");
String CHECKUPPERTABLENAME = CHECKTABLENAME.toUpperCase();//--去下划线后大写的表名
String CHECKLOWERTABLENAME = CHECKTABLENAME.toLowerCase();//--去下划线后小写的表名
String CHECKFIRSTUPPERTABLENAME = CHECKTABLENAME.substring(0,1).toUpperCase()+CHECKTABLENAME.substring(1,CHECKTABLENAME.length());//--去下划线后首字母大写的表名
//--初始化明细表信息
//--获取主表主键
String TBALEPK = new GetTableCols().getTablePrimaryKey(UPPERTABLENAME);
if(TBALEPK.equals("")){
throw new Exception("此表格没有标明主键");
}
TBALEPK = TBALEPK.toLowerCase();
TBALEPK = TBALEPK.substring(0,1).toUpperCase()+TBALEPK.substring(1,TBALEPK.length()).toLowerCase();//--首字母大写
//--创建主表主键序列 及明细表主键序列
// new GetTableCols().createTablePKisBm(UPPERTABLENAME);
new GetTableCols().createTablePKisSeq(UPPERTABLENAME);
//---初始化替换参数
// String packagename = javaoutpath.substring(javaoutpath.indexOf("\\supp")+5).replace("\\", "");
//llog.debug("packagename="+packagename);
map.put("actionPath", CHECKLOWERTABLENAME);// 类的包名
// if(!"".equals(SafeString.safeString(packagename))){
// CHECKLOWERTABLENAME=packagename+"."+CHECKLOWERTABLENAME;
CHECKLOWERTABLENAME=PACKAGEPATH.replaceAll("\\\\", ".").replaceAll("/",".")+CHECKLOWERTABLENAME;
// }
map.put("packageName", CHECKLOWERTABLENAME);// 类的包名
map.put("className", CHECKFIRSTUPPERTABLENAME);// java类名
map.put("lowerTableName", LOWERTABLENAME);// 主表名-小写
map.put("upperTableName", UPPERTABLENAME);// 主表名-大写
map.put("lowerPk", TBALEPK.toLowerCase());// 主键字段-小写
map.put("firstUpperPk", TBALEPK);// 主键字段-首字母大写
map.put("upperPk", TBALEPK.toUpperCase());// 主键字段-大写
map.put("title", titlename);// 标题
return map;
}
/**
* 统一参数替换
* @param map
* @return
*/
public VelocityContext generate(String tablename,String titlename,String PACKAGEPATH)
throws Exception {
if(m==null){
m= this.getReplacePropertys(tablename,titlename,PACKAGEPATH) ;
}
Map map=m;
String templatesPath = (String)map.get("templatesPath");// 模板路径
VelocityContext context =null;
try{
context = new VelocityContext();
//获取基础字段
String packageName = (String)map.get("packageName");// 类的包名
String actionPath = (String)map.get("actionPath");// action路径
String className = (String)map.get("className");// java类名
String upperTableName = (String)map.get("upperTableName");// 主表名-大写
String lowerTableName = (String)map.get("lowerTableName");// 主表名-小写
String firstUpperPk = (String)map.get("firstUpperPk");// 主键字段-首字母大写
String upperPk = (String)map.get("upperPk");// 主键字段-大写
String lowerPk = (String)map.get("lowerPk");// 主键字段-小写
String title = (String) map.get("title") ;//标题名称
//获取表结构
GetTableCols cols = new GetTableCols();
List alltablelist = cols.getAllColumnList(upperTableName);//--主表所有字段
List tablelistnocommnopk = cols.getColumnListNoCommNoPK(upperTableName);//--主表的字段(除基础字段外和主键)
List tablelistnocomm = cols.getColumnListNoComm(upperTableName);//--主表的字段(除基础字段外)
List tablelistnopk = cols.getColumnListNoPK(upperTableName);//--主表字段(除PK)
List tablelistnopkfk= cols.getColumnListNoPkFk(upperTableName);//--主表字段(除PK和FK)
//---------------基础的参数替换----------------
context.put("PACKAGENAME", packageName); // 类的包名
context.put("ACTIONPATH", actionPath); // action path=
context.put("CLASSNAME", className); // java类名
context.put("UPPERTABLENAME", upperTableName);// 主表名-大写
context.put("LOWERTABLENAME", lowerTableName);//主表全小写
context.put("FIRSTUPPERPK", firstUpperPk);// 主键字段-首字母大写
context.put("UPPERPK", upperPk);// 主键字段-大写
context.put("LOWERPK", lowerPk);// 主键字段-小写
context.put("TITLE", title);//标题名称
//---------------数据库表信息替换---------------------
context.put("ALLTABLELIST", alltablelist);
context.put("TABLELISTNOCOMM", tablelistnocomm);
context.put("TABLELISTNOCOMMNOPK", tablelistnocommnopk);
context.put("TABLELISTNOPKFK", tablelistnopkfk);
context.put("TABLELISTNOPK", tablelistnopk);
}catch(Exception e){
e.printStackTrace();
}
return context;
}
/**
* 写文件
* @param context
* @param template
* @param filepath
* @param filename
*/
public void writeFile(VelocityContext context,Template template,String filepath,String filename){
try{
//输出路径
String fileRealPath =filepath;
System.out.println("filePath=" + fileRealPath);
java.io.File fileTemp = new java.io.File(fileRealPath);
//目录不存在,则创建
if (!fileTemp.exists())
{
System.out.println("make dir ");
fileTemp.mkdirs();
}
String newFileName = fileRealPath + filename;
System.out.println("newFileName: "+newFileName);
java.io.File fileDst = new java.io.File(newFileName);
//输出
// if(fileDst.exists()){
// System.out.println("文件:"+filename+"创建失败,当前文件已经存在!");
// }else{
Writer writer = new PrintWriter(new FileOutputStream(fileDst));
template.merge(context, writer);
writer.flush();
// }
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 得到类的路径,例如E:/workspace/JavaGUI/bin/com/util
* @return
* @throws java.lang.Exception
*/
public String getClassPath() throws Exception {
try {
String strClassName = getClass().getName();
String strPackageName = "";
if (getClass().getPackage() != null) {
strPackageName = getClass().getPackage().getName();
}
String strClassFileName = "";
if (!"".equals(strPackageName)) {
strClassFileName = strClassName.substring(strPackageName.length() + 1,
strClassName.length());
} else {
strClassFileName = strClassName;
}
URL url = null;
url = getClass().getResource(strClassFileName + ".class");
String strURL = url.toString();
strURL = strURL.substring(strURL.indexOf('/') + 1, strURL
.lastIndexOf('/'));
//返回当前类的路径,并且处理路径中的空格,因为在路径中出现的空格如果不处理的话,
//在访问时就会从空格处断开,那么也就取不到完整的信息了,这个问题在web开发中尤其要注意
return strURL.replaceAll("%20", " ");
} catch (Exception ex) {
ex.printStackTrace();
throw ex;
}
}
/***/
public String getSourceRealPath()throws Exception{
String srcprefix="";
String Webrootprefix="";
File fclasspath=new File(".classpath");
File fproject=new File(".project");
//很明显该类是一个单例,先获取产生DocumentBuilder工厂
//的工厂,在通过这个工厂产生一个DocumentBuilder,
//DocumentBuilder就是用来产生Document的
Document docclasspath=null;
Document docproject =null;
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
//这个Document就是一个XML文件在内存中的镜像
docclasspath=db.parse(fclasspath);
NodeList nodeListclasspath= docclasspath.getElementsByTagName("classpathentry");
for(int i=0;i<nodeListclasspath.getLength();i++){
NamedNodeMap attributes= nodeListclasspath.item(i).getAttributes();
Map m=new HashMap();
for(int j=0;j<attributes.getLength();j++){
Node attribute=attributes.item(j);
System.out.println("dbstore的属性名为:"+attribute.getNodeName()+" 相对应的属性值为:"+attribute.getNodeValue());
m.put(attribute.getNodeName(), attribute.getNodeValue());
}
System.out.println(m.containsKey("kind")&&m.get("kind").equals("src"));
if(m.containsKey("kind")&&m.get("kind").equals("src")){
srcprefix=m.get("path")+"";
}
if(m.containsKey("kind")&&m.get("kind").equals("output")){
Webrootprefix=m.get("path")+"";
Webrootprefix=Webrootprefix.substring(0,Webrootprefix.indexOf("/WEB-INF/classes"));
// System.out.println(Webrootprefix);
}
m.clear();
}
if(!srcprefix.equals("")&&!Webrootprefix.equals("")){
docproject =db.parse(fproject);
NodeList nodeListproject= docproject.getElementsByTagName("linkedResources");
if(nodeListproject.getLength()==0){
// System.getProperty("user.dir");
javarealpath=System.getProperty("user.dir")+
System.getProperty("file.separator")+srcprefix;
jsprealpath=System.getProperty("user.dir")+
System.getProperty("file.separator")+Webrootprefix;
// System.out.println("文件就在workspace下面");
}else{
// System.out.println("存在外链"+nodeListproject.getLength());
Node n =nodeListproject.item(0);
// System.out.println(n.getNodeName());
NodeList childnodelist=n.getChildNodes();
// System.out.println(childnodelist.getLength());
for(int i=0;i<childnodelist.getLength();i++){
Node childn= childnodelist.item(i);
if(!childn.getNodeName().equals("link"))continue;
// System.out.println(childn.getNodeName());
Map m =new HashMap();
for(int j=0;j<childn.getChildNodes().getLength();j++){
if(childn.getChildNodes().item(j).getNodeName().equals("#text")){
continue;
}
// System.out.println(childn.getChildNodes().item(j).getNodeName()
// +childn.getChildNodes().item(j).getTextContent());
m.put(childn.getChildNodes().item(j).getNodeName(),
childn.getChildNodes().item(j).getTextContent()
);
};
if( m.containsKey("name")&&m.get("name").equals(srcprefix)
){
javarealpath= m.get("location")+"";
}
if( m.containsKey("name")&&m.get("name").equals(Webrootprefix)
){
jsprealpath= m.get("location")+"";
}
m.clear();
}
}
}
return " jsprealpath ="+jsprealpath +"---"+
" javarealpath="+javarealpath;
}
}
取得eclipse 的src路径 和webroot路径包括 相对路径
最新推荐文章于 2023-05-25 10:50:35 发布