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



你可能感兴趣的:(java,html,sql,Go)