package generate; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import play.data.validation.Required; import play.data.validation.Valid; import models.Client; import models.Setting; public class Generate { private String projectPath = "D:/playwork/easydoc_waimao/app/"; //项目地址 private Class clazz; //模型名字 private String className; private String controllerName; //控制器的名字 private String sql = "order by id desc"; //排序方式 private List<Field> fields; private String viewpath; public Generate(String className,String controllerName) throws ClassNotFoundException { clazz = Class.forName(className); this.className = className.substring(className.lastIndexOf(".")+1); this.controllerName = controllerName; this.viewpath = projectPath + "views/"+controllerName+"/"; } private void go() throws IOException{ fields = getFiled(); controller(); mkdir(); list(); create(); show(); } private List<Field> getFiled(){ List<Field> list = new ArrayList<Field>(); if(clazz!=null){ Field[] fields = clazz.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; list.add(field); } } return list; } private String format(String format,String... args){ return String.format(format, args); } private String firstToLowerCase(String str){ String ch = str.substring(0,1); ch = ch.toLowerCase(); String other = str.substring(1); return ch + other; } private void controller() throws IOException{ File controllerFile = new File(projectPath+"controllers/"+controllerName+".java"); if(controllerFile.exists()) controllerFile.delete(); controllerFile.createNewFile(); PrintStream ps = new PrintStream(controllerFile); ps.println("package controllers;"); ps.println("import java.util.*;"); ps.println("import models.*;"); ps.println("import play.data.validation.*;"); ps.println("import utils.*;"); ps.println(""); ps.println("public class "+controllerName+" extends Application{"); ps.println(""); // list method ps.println(" public static void list(int page) {"); ps.println(format(" PagedList<%s> pagedList = new PagedList<%s>(page,10);", className,className)); ps.println(format(" pagedList.setRowCount(%s.count());", className)); ps.println(format(" List<%s> list = %s.find(\"%s\").fetch(page,pagedList.getPageSize());", className,className,sql)); ps.println(" pagedList.setList(list);"); ps.println(" render(pagedList);"); ps.println(" }"); ps.println(""); // create method ps.println(" public static void create() {"); ps.println(" render();"); ps.println(" }"); ps.println(""); //save method ps.println(format(" public static void save(@Valid %s %s) {",className,firstToLowerCase(className))); ps.println(" if(validation.hasErrors()){"); ps.println(format(" render(\"@create\",%s);",firstToLowerCase(className))); ps.println(" }"); ps.println(format(" %s.save();",firstToLowerCase(className))); ps.println(" list(1);"); ps.println(" }"); ps.println(""); //edit method ps.println(format(" public static void edit(long id) {")); ps.println(format(" %s %s = %s.findById(id);", className,firstToLowerCase(className),className)); ps.println(format(" notFoundIfNull(%s);", firstToLowerCase(className))); ps.println(format(" render(\"@create\",%s);",firstToLowerCase(className))); ps.println(" }"); ps.println(""); //delete method ps.println(format(" public static void delete(long id) {")); ps.println(format(" %s %s = %s.findById(id);", className,firstToLowerCase(className),className)); ps.println(format(" notFoundIfNull(%s);", firstToLowerCase(className))); ps.println(format(" %s.delete();",firstToLowerCase(className))); ps.println(" list(1);"); ps.println(" }"); ps.println(""); ps.println("}"); ps.close(); } private void mkdir(){ File file = new File(viewpath); if(!file.exists()) file.mkdir(); } //list page private void list() throws IOException{ File listFile = new File(viewpath + "/list.html"); if(listFile.exists()) listFile.delete(); listFile.createNewFile(); PrintStream ps = new PrintStream(listFile); ps.println("#{extends 'main.html' /}"); ps.println("<div id=\"wrapper\"><div id=\"content\"><div id=\"box\">"); ps.println(format("<h3>&{'%s.title'}</h3>",firstToLowerCase(className))); ps.println("#{include 'result.html'/}"); //table ps.println("<table><thead><tr>"); for(Field field : fields){ ps.println(format("<th align=\"left\">&{'%s.%s'}</th>", firstToLowerCase(className),field.getName())); } ps.println("<th width=\"100\" align=\"center\">&{'admin.action'}</th>"); ps.println("</tr></thead>"); ps.println("<tbody>"); ps.println("#{list pagedList.list ,as:'row'}"); ps.println("<tr>"); for(Field field : fields){ ps.println(format("<td align=\"left\">${row.%s}</td>",field.getName())); } ps.println("<td align=\"center\">"); ps.println("<a href=\"@{edit(row.id)}\"><img src=\"/public/images/icons/user_edit.png\" title=\"&{'admin.edit'}\" width=\"16\" height=\"16\" /></a>"); ps.println("<a href=\"@{delete(row.id)}\"><img src=\"/public/images/icons/user_delete.png\" title=\"&{'admin.delete'}\" width=\"16\" height=\"16\" /></a>"); ps.println("</td>"); ps.println("</tr>"); ps.println("#{/list}"); ps.println("</tbody></table>"); ps.println("#{page pagedList:pagedList ,pagedIndexKey:\"page\"/}"); ps.println("</div></div></div>"); } //create page private void create() throws IOException{ File createFile = new File(viewpath + "/create.html"); if(createFile.exists()) createFile.delete(); createFile.createNewFile(); PrintStream ps = new PrintStream(createFile); ps.println("#{extends 'main.html' /}"); ps.println("<div id=\"wrapper\"><div id=\"content\"><div id=\"box\">"); ps.println(format("<h3>&{'%s.title'}</h3>",firstToLowerCase(className))); ps.println("#{form @save(),id:\"form\"}"); ps.println(format("<fieldset id=\"%s\">",firstToLowerCase(className))); for(Field field : fields){ ps.println("<p>"); ps.println(format("#{field '%s.%s'}",firstToLowerCase(className),field.getName())); ps.println("<label for=\"${field.id}\"><b>&{field.name} : </b></label>"); ps.println("<input type=\"text\" class=\"text\" id=\"${field.id}\" name=\"${field.name}\" value=\"${field.value}\"/>"); if(field.getAnnotation(Required.class)==null){ ps.println("<span class=\"error\"> #{error field.name /}</span>"); }else{ ps.println("<span class=\"error\">* #{error field.name /}</span>"); } ps.println("#{/field}"); ps.println("</p>"); } ps.println("<div style=\"padding-left:143px;\">"); ps.println(format("<input type=\"hidden\" id=\"id\" name=\"%s.id\" value=\"${%s?.id}\"/>", firstToLowerCase(className),firstToLowerCase(className))); ps.println("<input type=\"submit\" value=\"&{'admin.save'}\"/>"); ps.println("<input type=\"button\" value=\"&{'admin.back'}\" class=\"backBtn\" />"); ps.println("</div>"); ps.println("</fieldset>"); ps.println("#{/form}"); ps.println("</div></div></div>"); } private void show(){ System.out.println("生成成功..."); System.out.println("请往message.zh里增加以下参数"); System.out.println(format("%s.title =",firstToLowerCase(className))); for(Field field : fields){ System.out.println(format("%s.%s =",firstToLowerCase(className),field.getName())); } } public static void main(String[] args) throws Exception { new Generate("models.ChangeBill","ChangeBills").go(); } }