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中,通常使用`java.security.KeyPairGenerator`类来生成公钥和私钥对,如RSA、DSA等算法。`KeyPairGenerator`需要一个密钥算法作为参数,然后通过`generateKeyPair()`方法生成密钥对。密钥对包括公钥(用于...
java java_leetcode题解之Generate Parentheses.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)...
通过`Tools > Generate JavaDoc...`菜单,可以选择要生成文档的范围,指定输出目录,并设置语言选项,生成的文档可以帮助开发者更好地理解和使用代码库。 5. **规范性**: 创建`package-info.java`文件时,需要...
at net.sf.cglib.beans.BeanCopier$Generator.generateClass(BeanCopier.java:133) at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) at ...
IDEA通过Generate.POJOs.groovy映射数据库自动生成对应的Java实体类, 具体逻辑不详细展示,可参考:https://blog.csdn.net/weixin_40375601/article/details/106807644
《codegenerate-3.6.1源码解析与二次开发指南》 在IT行业中,源码分析和二次开发是提升软件功能、优化性能的重要手段。本文将深入探讨"codegenerate-3.6.1源码",它是基于Jeecg框架的自动生成代码工具的源代码版本...
这里,我们关注的是一款名为"codegenerate"的工具,它与Java编程语言密切相关。 “codegenerate.zip”是一个包含Java代码生成工具的压缩包,可能是作者个人使用的项目备份或学习资料。尽管它可能不是专门设计供他人...
Spring Cloud+mybatise + mysql 自动生成代码工具 generateCode
打开里面的内容,替换idea项目中的Generate POJOs.groovy文件(文件路径:SCratches and Consoles -> extensions -> Database Tools and SQL -> schema - > Generate POJOs.groovy)
generate.zip"没有给出额外的上下文,但我们可以根据压缩包的名称推测,其内容可能包括一个或多个脚本、配置文件、数据库连接信息、前端界面文件(如HTML、CSS和JavaScript)以及可能的后端服务器代码(如Python、...
在给定的压缩包文件"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"这样的Java代码生成工具是现代Java开发中的得力助手,它通过自动化的方式减少了重复性工作,提升了开发效率,让开发者能更专注于业务创新和问题解决。...
codegenerate-1.0.4.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/...
以前开发过完整的快速开发平台,想分享里面的基本代码生成的开发流程,大概就两个重点,一是数据库表转java实体类,二是编写模版 代码生成器的核心开发流程 如何连接数据库,获取数据库信息,以及根据数据库的表字...
swing-generate是java swing开发的一款代码生成工具。 你可以修改模板文件进行自定义,这里使用的是velocity模板引擎, 后期会出web版本的在线模板定制 :) 标签:swing
【标题】"generate.zip"是一个包含使用Spring Boot框架构建的小型项目示例的压缩文件,旨在展示如何在实际开发中快速启动和运行一个基于Java的Web应用。这个压缩包不仅包含了项目的源代码,还提供了数据库连接配置...