Generate.java


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();
}


}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章