package pandy.sys;
import pandy.db.DBConnector;
import pandy.db.DBUtil;
import pandy.util.DateUtil;
import pandy.file.FileUtil;
import pandy.com.Globa;
import java.sql.*;
public class SysBuldCtl {
public static String[] getClassCode(Connection con, String pagename, String tablename, String author, String modelname) {
String pandy[] = new String[7];
/**
* pandy[0]Ϊ���ɵĻ����࣬pandy[1]Ϊ���ɵĿ�����
*/
String topstr = "package " + pagename + ".models." + modelname + ";\n\nimport cn.wizzer.common.base.Model;\nimport org.nutz.dao.entity.annotation.*;\n\nimport java.io.Serializable;\n";
try {
int i = 0;
int dbtype = 0; //Ĭ��ΪSQLSERVER����
int pk = -1;
String pkname = "";
Statement stmt = con.createStatement();
System.out.println("drivername:" + con.getMetaData().getDriverName());
if (con.getMetaData().getDriverName().toLowerCase().indexOf("oracle") != -1) //��Dz���ORACLE
{
dbtype = 1;
}
DatabaseMetaData dbMeta = con.getMetaData();
ResultSet pkRSet = dbMeta.getPrimaryKeys(null, null, tablename);
if (pkRSet.next()) {
pkname = ((String) pkRSet.getObject(4)).toLowerCase();
}
ResultSet result = stmt.executeQuery("select * from " + tablename);
ResultSetMetaData rsmd = result.getMetaData();
String listname[][] = new String[rsmd.getColumnCount()][2]; //���������������
String rsname[] = new String[rsmd.getColumnCount()];
String getset[][] = new String[rsmd.getColumnCount()][2];
int type = 4;
String sname = tablename.toUpperCase().substring(0, 1) + tablename.toLowerCase().substring(1);
String xname = tablename.toLowerCase();
String mname = tablename.toUpperCase().substring(0, 1) + tablename.toLowerCase().substring(1);
if (tablename.indexOf("_") > 0) {
String[] s = tablename.split("_");//shop_goods_product ShopGoodsProduct
String temp = "";
for (String s1 : s) {
temp = temp + s1.toUpperCase().substring(0, 1) + s1.toLowerCase().substring(1);
}
sname = temp;
xname = temp.toLowerCase().substring(0, 1) + temp.substring(1);
}
pandy[0] = mname + " extends Model implements Serializable {\n\tprivate static final long serialVersionUID = 1L;\n\t";
/**
* �õ����е�����
*/
for (i = 1; i <= rsmd.getColumnCount(); i++) {
listname[i - 1][0] = rsmd.getColumnName(i).toLowerCase();
type = rsmd.getColumnType(i);
System.out.println(listname[i - 1][0] + ":" + type); //���ÿ�����ͱ��
String temp = "";
//��ɸ������͵��ж����û������GET��SET������
if (type == 4 || type == 5 || type == 2 || type == -7) {
if (pkname.equals(listname[i - 1][0].toLowerCase())) {
pk = 1;
temp = "@Id\n\t@Prev({\n\t\t@SQL(db = DB.ORACLE, value=\"SELECT " + tablename.toUpperCase() + "_S.nextval FROM dual\")\n\t})\n\t";
topstr += "import org.nutz.dao.entity.annotation.Id;\nimport org.nutz.dao.entity.annotation.Prev;\nimport org.nutz.dao.entity.annotation.SQL;import org.nutz.dao.DB;\n";
}
listname[i - 1][1] = "Integer ";
pandy[0] += "@Column\n\t" + temp + "private Integer " + listname[i - 1][0] + ";\n\t";
getset[i - 1][0] = "\tpublic Integer get" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "()\n\t{\n\t\treturn " + listname[i - 1][0] + ";\n\t}\n";
getset[i - 1][1] = "\tpublic void set" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "(Integer " + listname[i - 1][0] + ")\n\t{\n\t\tthis." + listname[i - 1][0] + "=" + listname[i - 1][0] + ";\n\t}\n";
} else if (type == -5) {
if (pkname.equals(listname[i - 1][0].toLowerCase())) {
pk = 3;
temp = "@Id\n\t@Prev({\n\t\t@SQL(db = DB.ORACLE, value=\"SELECT " + tablename.toUpperCase() + "_S.nextval FROM dual\")\n\t})\n\t";
topstr += "import org.nutz.dao.entity.annotation.Id;\nimport org.nutz.dao.entity.annotation.Prev;\nimport org.nutz.dao.entity.annotation.SQL;import org.nutz.dao.DB;\n";
}
listname[i - 1][1] = "Long ";
pandy[0] += "@Column\n\t" + temp + "private Long " + listname[i - 1][0] + ";\n\t";
getset[i - 1][0] = "\tpublic Long get" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "()\n\t{\n\t\treturn " + listname[i - 1][0] + ";\n\t}\n";
getset[i - 1][1] = "\tpublic void set" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "(Long " + listname[i - 1][0] + ")\n\t{\n\t\tthis." + listname[i - 1][0] + "=" + listname[i - 1][0] + ";\n\t}\n";
} else if (type == 6 || type == 7) //mssql float��
{
listname[i - 1][1] = "double ";
pandy[0] += "@Column\n\tprivate double " + listname[i - 1][0] + ";\n\t";
getset[i - 1][0] = "\tpublic double get" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "()\n\t{\n\t\treturn " + listname[i - 1][0] + ";\n\t}\n";
getset[i - 1][1] = "\tpublic void set" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "(double " + listname[i - 1][0] + ")\n\t{\n\t\tthis." + listname[i - 1][0] + "=" + listname[i - 1][0] + ";\n\t}\n";
} else if (type == 12) {
if (pkname.equals(listname[i - 1][0].toLowerCase())) {
pk = 2;
temp = "@Name\n\t@Prev(els = {@EL(\"uuid()\")})\n\t";
topstr += "import org.nutz.dao.entity.annotation.Name;\n";
}
listname[i - 1][1] = "String ";
pandy[0] += "@Column\n\t" + temp + "private String " + listname[i - 1][0] + ";\n\t";
// rsname[i - 1] = "\t\t\t" + listname[i - 1][0] + "=rs.getString(\"" + listname[i - 1][0] + "\");\n";
getset[i - 1][0] = "\tpublic String get" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "()\n\t{\n\t\treturn " + listname[i - 1][0] + ";\n\t}\n";
getset[i - 1][1] = "\tpublic void set" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "(String " + listname[i - 1][0] + ")\n\t{\n\t\tthis." + listname[i - 1][0] + "=" + listname[i - 1][0] + ";\n\t}\n";
} else if (type == 19) //MYSQL ��������
{
listname[i - 1][1] = "java.sql.Date ";
pandy[0] += "@Column\n\tprivate java.sql.Date " + listname[i - 1][0] + ";\n\t";
getset[i - 1][0] = "\tpublic java.sql.Date get" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "()\n\t{\n\t\treturn " + listname[i - 1][0] + ";\n\t}\n";
getset[i - 1][1] = "\tpublic void set" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "(java.sql.Date " + listname[i - 1][0] + ")\n\t{\n\t\tthis." + listname[i - 1][0] + "=" + listname[i - 1][0] + ";\n\t}\n";
} else if (type == 93) //ΪORACLEʱ����ĵĴ���
{
listname[i - 1][1] = "java.sql.Date ";
pandy[0] += "@Column\n\tprivate java.sql.Date " + listname[i - 1][0] + ";\n\t";
getset[i - 1][0] = "\tpublic java.sql.Date get" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "()\n\t{\n\t\treturn " + listname[i - 1][0] + ";\n\t}\n";
getset[i - 1][1] = "\tpublic void set" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "(java.sql.Date " + listname[i - 1][0] + ")\n\t{\n\t\tthis." + listname[i - 1][0] + "=" + listname[i - 1][0] + ";\n\t}\n";
} else if (type == 2005) //ORCALE���ֶδ���
{
listname[i - 1][1] = "Clob ";
pandy[0] += "@Column\n\tprivate String " + listname[i - 1][0] + ";\n\t";
getset[i - 1][0] = "\tpublic String get" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "()\n\t{\n\t\treturn " + listname[i - 1][0] + ";\n\t}\n";
getset[i - 1][1] = "\tpublic void set" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "(String " + listname[i - 1][0] + ")\n\t{\n\t\tthis." + listname[i - 1][0] + "=" + listname[i - 1][0] + ";\n\t}\n";
} else {
listname[i - 1][1] = "String ";
pandy[0] += "@Column\n\tprivate String " + listname[i - 1][0] + ";\n\t";
getset[i - 1][0] = "\tpublic String get" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "()\n\t{\n\t\treturn " + listname[i - 1][0] + ";\n\t}\n";
getset[i - 1][1] = "\tpublic void set" + listname[i - 1][0].toUpperCase().substring(0, 1) + listname[i - 1][0].toLowerCase().substring(1) + "(String " + listname[i - 1][0] + ")\n\t{\n\t\tthis." + listname[i - 1][0] + "=" + listname[i - 1][0] + ";\n\t}\n";
}
}
topstr += "/**\n" +
"* @author " + author + "\n" +
"* @time " + DateUtil.date2str(new java.util.Date()) + "\n" +
"*/\n@Table(\"" + tablename + "\")\npublic class ";
for (i = 0; i < listname.length; i++) {
pandy[0] += getset[i][0] + getset[i][1];
}
pandy[0] = topstr + pandy[0] + "\n}";
//Service
pandy[1] = "";
pandy[1] += "package " + pagename + ".services." + modelname + ";\n";
pandy[1] += "\nimport cn.wizzer.common.base.Service;";
pandy[1] += "\nimport " + pagename + ".models." + modelname + "." + mname + ";";
pandy[1] += "\nimport org.nutz.dao.Dao;";
pandy[1] += "\nimport org.nutz.ioc.loader.annotation.IocBean;";
pandy[1] += "\n\n";
pandy[1] += "/**\n * @author " + author + "\n * @time " + DateUtil.date2str(new java.util.Date()) + "\n * \n */";
pandy[1] += "\n@IocBean(args = {\"refer:dao\"})";
pandy[1] += "\npublic class " + sname + "Service extends Service<" + mname + "> {";
pandy[1] += "\n\t\tpublic " + sname + "Service(Dao dao) {";
pandy[1] += "\n\t\t\t\tsuper(dao);";
pandy[1] += "\n\t\t}";
pandy[1] += "\n}";
String pktype = "long";
if (pk == 2) {
pktype = "String";
}
//Controllerҳ���������
pandy[2] = "";
pandy[2] += "package " + pagename + ".controllers.platform." + modelname + ";\n";
pandy[2] += "\nimport cn.wizzer.common.annotation.SLog;";
pandy[2] += "\nimport cn.wizzer.common.base.Result;";
pandy[2] += "\nimport cn.wizzer.common.filter.PrivateFilter;";
pandy[2] += "\nimport cn.wizzer.common.page.DataTableColumn;";
pandy[2] += "\nimport cn.wizzer.common.page.DataTableOrder;";
pandy[2] += "\nimport org.apache.shiro.authz.annotation.RequiresAuthentication;";
pandy[2] += "\nimport org.apache.shiro.authz.annotation.RequiresPermissions;";
pandy[2] += "\nimport org.nutz.dao.Cnd;";
pandy[2] += "\nimport org.nutz.ioc.loader.annotation.Inject;";
pandy[2] += "\nimport org.nutz.ioc.loader.annotation.IocBean;";
pandy[2] += "\nimport org.nutz.log.Log;";
pandy[2] += "\nimport org.nutz.log.Logs;";
pandy[2] += "\nimport org.nutz.mvc.annotation.*;\n";
pandy[2] += "\nimport javax.servlet.http.HttpServletRequest;";
pandy[2] += "\nimport java.util.List;\n";
pandy[2] += "\nimport " + pagename + ".models." + modelname + "." + mname + ";";
pandy[2] += "\nimport " + pagename + ".services." + modelname + "." + sname + "Service;";
pandy[2] += "\n\n";
pandy[2] += "/**\n * @author " + author + "\n * @time " + DateUtil.date2str(new java.util.Date()) + "\n * \n */";
pandy[2] += "\n@IocBean";
pandy[2] += "\n@At(\"/platform/" + modelname.toLowerCase().replace(".", "/") + "/" + sname.toLowerCase() + "\")";
pandy[2] += "\n@Filters({ @By(type = PrivateFilter.class)})";
pandy[2] += "\npublic class " + sname + "Controller {\nprivate static final Log log = Logs.get();";
pandy[2] += "\n\t@Inject";
pandy[2] += "\n\t" + sname + "Service " + xname + "Service;\n";
pandy[2] += "\n\t@At(\"\")";
pandy[2] += "\n\t@Ok(\"beetl:/platform/" + modelname.toLowerCase().replace(".", "/") + "/index.html\")";
pandy[2] += "\n\t@RequiresAuthentication";
pandy[2] += "\n\tpublic void index() {";
pandy[2] += "\n\t\t";
pandy[2] += "\n\t}";
pandy[2] += "\n\t";
pandy[2] += "\n\t@At";
pandy[2] += "\n\t@Ok(\"beetl:/platform/" + modelname.toLowerCase().replace(".", "/") + "/add.html\")";
pandy[2] += "\n\t@RequiresAuthentication";
pandy[2] += "\n\tpublic void add() {";
pandy[2] += "\n\t";
pandy[2] += "\n\t}";
pandy[2] += "\n\t";
pandy[2] += "\n\t@At";
pandy[2] += "\n\t@Ok(\"json\")";
pandy[2] += "\n\t@RequiresPermissions(\"platform." + modelname + ".add\")";
pandy[2] += "\n\t@SLog(tag = \"Add\", msg = \"Add:" + tablename + "\")";
pandy[2] += "\n\tpublic Object addDo(@Param(\"..\") " + mname + " " + tablename.toLowerCase() + ", HttpServletRequest req) {";
pandy[2] += "\n\t\ttry {";
pandy[2] += "\n\t\t\t" + xname + "Service.insert(" + tablename.toLowerCase() + ");";
pandy[2] += "\n\t\t\treturn Result.success(\"system.success\");";
pandy[2] += "\n\t\t} catch (Exception e) {";
pandy[2] += "\n\t\t\treturn Result.error(\"system.error\");";
pandy[2] += "\n\t\t}";
pandy[2] += "\n\t}";
pandy[2] += "\n\t";
pandy[2] += "\n\t@At(\"/edit/?\")";
pandy[2] += "\n\t@Ok(\"beetl:/platform/" + modelname.toLowerCase().replace(".", "/") + "/edit.html\")";
pandy[2] += "\n\t@RequiresAuthentication";
pandy[2] += "\n\tpublic Object edit(" + pktype + " id) {";
pandy[2] += "\n\t\treturn " + xname + "Service.fetch(id);";
pandy[2] += "\n\t}";
pandy[2] += "\n\t";
pandy[2] += "\n\t@At";
pandy[2] += "\n\t@Ok(\"json\")";
pandy[2] += "\n\t@RequiresPermissions(\"platform." + modelname + ".edit\")";
pandy[2] += "\n\t@SLog(tag = \"Edit\", msg = \"Edit:" + tablename + "\")";
pandy[2] += "\n\tpublic Object editDo(@Param(\"..\") " + mname + " " + tablename.toLowerCase() + ", HttpServletRequest req) {";
pandy[2] += "\n\t\ttry {";
pandy[2] += "\n\t\t\t" + xname + "Service.updateIgnoreNull(" + tablename.toLowerCase() + ");";
pandy[2] += "\n\t\t\treturn Result.success(\"system.success\");";
pandy[2] += "\n\t\t} catch (Exception e) {";
pandy[2] += "\n\t\t\treturn Result.error(\"system.error\");";
pandy[2] += "\n\t\t}";
pandy[2] += "\n\t}";
pandy[2] += "\n\t";
pandy[2] += "\n\t@At({\"/delete\",\"/delete/?\"})";
pandy[2] += "\n\t@Ok(\"json\")";
pandy[2] += "\n\t@RequiresPermissions(\"platform." + modelname + ".delete\")";
pandy[2] += "\n\t@SLog(tag = \"Delete\", msg = \"Delete:" + tablename + "\")";
pandy[2] += "\n\tpublic Object delete(" + pktype + " id,@Param(\"ids\") " + pktype + "[] ids, HttpServletRequest req) {";
pandy[2] += "\n\t\ttry {";
pandy[2] += "\n\t\t\tif(ids!=null&&ids.length>0){";
pandy[2] += "\n\t\t\t\t" + xname + "Service.delete(ids);";
pandy[2] += "\n\t\t\t}else{";
pandy[2] += "\n\t\t\t\t" + xname + "Service.delete(id);";
pandy[2] += "\n\t\t\t}";
pandy[2] += "\n\t\t\treturn Result.success(\"system.success\");";
pandy[2] += "\n\t\t} catch (Exception e) {";
pandy[2] += "\n\t\t\treturn Result.error(\"system.error\");";
pandy[2] += "\n\t\t}";
pandy[2] += "\n\t}";
pandy[2] += "\n\t";
pandy[2] += "\n\t@At";
pandy[2] += "\n\t@Ok(\"json:full\")";
pandy[2] += "\n\t@RequiresAuthentication";
pandy[2] += "\n\tpublic Object data(@Param(\"length\") int length, @Param(\"start\") int start, @Param(\"draw\") int draw, @Param(\"::order\") List<DataTableOrder> order, @Param(\"::columns\") List<DataTableColumn> columns) {";
pandy[2] += "\n\t\tCnd cnd = Cnd.NEW();";
pandy[2] += "\n\t\treturn " + xname + "Service.data(length, start, draw, order, columns, cnd, null);";
pandy[2] += "\n\t}";
pandy[2] += "\n\n";
pandy[2] += "}";
pandy[2] += "";
/**
* index.html
*/
pandy[3] = FileUtil.getFileCnt("templete//index.html");
String th = "";
String table = "";
String tpath = "/platform/" + modelname.toLowerCase().replace(".", "/") + "/" + sname.toLowerCase();
for (i = 0; i < listname.length; i++) {
th += "\t\t\t\t<th>" + listname[i][0] + "</th>\n";
if (i == listname.length - 1) {
table += "\t\t\t\t{\"data\": \"" + listname[i][0] + "\", \"bSortable\": true}\n";
} else {
table += "\t\t\t\t{\"data\": \"" + listname[i][0] + "\", \"bSortable\": true},\n";
}
}
pandy[3] = pandy[3].replace("#th#", th).replace("#tablejs#", table).replaceAll("#path#", tpath);
/**
* add.html
*/
pandy[4] = FileUtil.getFileCnt("templete//add.html");
String div = "";
for (i = 0; i < listname.length; i++) {
div += "\t\t\t\t\t\t<div class=\"form-group\">\n";
div += "\t\t\t\t\t\t\t<label for=\"" + listname[i][0] + "\" class=\"col-sm-2 control-label\">" + listname[i][0] + "</label>\n";
div += "\t\t\t\t\t\t\t<div class=\"col-sm-8\">\n";
div += "\t\t\t\t\t\t\t\t<input type=\"text\" id=\"" + listname[i][0] + "\" class=\"form-control\" name=\"" + listname[i][0] + "\" data-parsley-required=\"true\"\n" +
" placeholder=\"\">\n";
div += "\t\t\t\t\t\t\t</div>\n";
div += "\t\t\t\t\t\t</div>\n";
}
pandy[4] = pandy[4].replace("#div#", div).replaceAll("#path#", tpath);
/**
* edit.html
*/
pandy[5] = FileUtil.getFileCnt("templete//edit.html");
div = "";
for (i = 0; i < listname.length; i++) {
div += "\t\t\t\t\t\t<div class=\"form-group\">\n";
div += "\t\t\t\t\t\t\t<label for=\"" + listname[i][0] + "\" class=\"col-sm-2 control-label\">" + listname[i][0] + "</label>\n";
div += "\t\t\t\t\t\t\t<div class=\"col-sm-8\">\n";
div += "\t\t\t\t\t\t\t\t<input type=\"text\" id=\"" + listname[i][0] + "\" class=\"form-control\" name=\"" + listname[i][0] + "\" data-parsley-required=\"true\"\n" +
" placeholder=\"\" value=\"${obj." + listname[i][0] + "!}\">\n";
div += "\t\t\t\t\t\t\t</div>\n";
div += "\t\t\t\t\t\t</div>\n";
}
pandy[5] = pandy[5].replace("#div#", div).replaceAll("#pkname#", pkname).replaceAll("#path#", tpath);
result.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
return pandy;
}
}