`

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



分享到:
评论

相关推荐

    GenerateKey.java EncryptClasses.java

    在Java中,通常使用`java.security.KeyPairGenerator`类来生成公钥和私钥对,如RSA、DSA等算法。`KeyPairGenerator`需要一个密钥算法作为参数,然后通过`generateKeyPair()`方法生成密钥对。密钥对包括公钥(用于...

    java-leetcode题解之Generate Parentheses.java

    java java_leetcode题解之Generate Parentheses.java

    java生成二维码(qrcodeutil.java)

    import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class QRCOdeUtil { public static BufferedImage generateQRCode(String content, int width, int height)...

    开源项目经常看到 package-info.java 文件,到底有啥用?(csdn)————程序.pdf

    通过`Tools &gt; Generate JavaDoc...`菜单,可以选择要生成文档的范围,指定输出目录,并设置语言选项,生成的文档可以帮助开发者更好地理解和使用代码库。 5. **规范性**: 创建`package-info.java`文件时,需要...

    cglib-2.2.2.jar(修订版)

    at net.sf.cglib.beans.BeanCopier$Generator.generateClass(BeanCopier.java:133) at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) at ...

    Generate POJOs.groovy

    IDEA通过Generate.POJOs.groovy映射数据库自动生成对应的Java实体类, 具体逻辑不详细展示,可参考:https://blog.csdn.net/weixin_40375601/article/details/106807644

    codegenerate-3.6.1源码

    《codegenerate-3.6.1源码解析与二次开发指南》 在IT行业中,源码分析和二次开发是提升软件功能、优化性能的重要手段。本文将深入探讨"codegenerate-3.6.1源码",它是基于Jeecg框架的自动生成代码工具的源代码版本...

    codegenerate.zip

    这里,我们关注的是一款名为"codegenerate"的工具,它与Java编程语言密切相关。 “codegenerate.zip”是一个包含Java代码生成工具的压缩包,可能是作者个人使用的项目备份或学习资料。尽管它可能不是专门设计供他人...

    GenerateCode.java

    Spring Cloud+mybatise + mysql 自动生成代码工具 generateCode

    IDEA代码生成,Generate POJOs.proovy内容替换

    打开里面的内容,替换idea项目中的Generate POJOs.groovy文件(文件路径:SCratches and Consoles -&gt; extensions -&gt; Database Tools and SQL -&gt; schema - &gt; Generate POJOs.groovy)

    itcast-dashboard-generate.zip

    generate.zip"没有给出额外的上下文,但我们可以根据压缩包的名称推测,其内容可能包括一个或多个脚本、配置文件、数据库连接信息、前端界面文件(如HTML、CSS和JavaScript)以及可能的后端服务器代码(如Python、...

    MyVo Generate POJOs.groovy.zip

    在给定的压缩包文件"MyVo Generate POJOs.groovy.zip"中,包含了一系列以"Generate POJOs.groovy"命名的脚本,如"My Generate POJOs.groovy"、"MyDto Generate POJOs.groovy"、"MyInsertDto Generate POJOs.groovy...

    rapid-generator-3.9.2.20100720_code_generate.zip

    总的来说,"rapid-generator-3.9.2.20100720_code_generate.zip"这样的Java代码生成工具是现代Java开发中的得力助手,它通过自动化的方式减少了重复性工作,提升了开发效率,让开发者能更专注于业务创新和问题解决。...

    codegenerate-1.0.4.jar

    codegenerate-1.0.4.jar

    解决 java.lang.RuntimeException: Could not generate DH keypair异常处理所需的bcprov的jar

    解决 java.lang.RuntimeException: Could not generate DH keypair异常处理。 bcprov-ext-jdk15on-1.60、bcprov-jdk15on-1.60两个包放到jre下的$JAVA_HOME/jre/lib/ext的路径下,然后配置$JAVA_HOME/jre/lib/...

    code-generate.zip

    以前开发过完整的快速开发平台,想分享里面的基本代码生成的开发流程,大概就两个重点,一是数据库表转java实体类,二是编写模版 代码生成器的核心开发流程 如何连接数据库,获取数据库信息,以及根据数据库的表字...

    代码生成工具swing-generate.zip

    swing-generate是java swing开发的一款代码生成工具。 你可以修改模板文件进行自定义,这里使用的是velocity模板引擎, 后期会出web版本的在线模板定制 :) 标签:swing

    generate.zip

    【标题】"generate.zip"是一个包含使用Spring Boot框架构建的小型项目示例的压缩文件,旨在展示如何在实际开发中快速启动和运行一个基于Java的Web应用。这个压缩包不仅包含了项目的源代码,还提供了数据库连接配置...

Global site tag (gtag.js) - Google Analytics