package cn.org.rapid_framework.generator.ext; import java.io.File; import java.util.Scanner; import cn.org.rapid_framework.generator.GeneratorFacade; import cn.org.rapid_framework.generator.GeneratorProperties; import cn.org.rapid_framework.generator.util.ArrayHelper; import cn.org.rapid_framework.generator.util.StringHelper; import cn.org.rapid_framework.generator.util.SystemHelper; /** * 命令行工具类,可以直接运行 * * @author badqiu */ public class CommandLine { public static void main(String[] args) throws Exception { //disable freemarker logging freemarker.log.Logger.selectLoggerLibrary(freemarker.log.Logger.LIBRARY_NONE); startProcess(); } private static void startProcess() throws Exception { Scanner sc = new Scanner(System.in); System.out.println("templateRootDir:"+new File(getTemplateRootDir()).getAbsolutePath()); printUsages(); while(sc.hasNextLine()) { try { processLine(sc); }catch(Exception e) { e.printStackTrace(); }finally { Thread.sleep(700); printUsages(); } } } private static void processLine(Scanner sc) throws Exception { GeneratorFacade facade = new GeneratorFacade(); String cmd = sc.next(); if("gen".equals(cmd)) { String[] args = nextArguments(sc); if(args.length == 0) return; facade.g.setIncludes(getIncludes(args,1)); facade.generateByTable(args[0],getTemplateRootDir()); if(SystemHelper.isWindowsOS) { Runtime.getRuntime().exec("cmd.exe /c start "+GeneratorProperties.getRequiredProperty("outRoot").replace('/', '\\')); } }else if("del".equals(cmd)) { String[] args = nextArguments(sc); if(args.length == 0) return; facade.g.setIncludes(getIncludes(args,1)); facade.deleteByTable(args[0], getTemplateRootDir()); }else if("quit".equals(cmd)) { System.exit(0); }else { System.err.println(" [ERROR] unknow command:"+cmd); } } private static String getIncludes(String[] args, int i) { String includes = ArrayHelper.getValue(args, i); if(includes == null) return null; return includes.indexOf("*") >= 0 || includes.indexOf(",") >= 0 ? includes : includes+"/**"; } private static String getTemplateRootDir() { return System.getProperty("templateRootDir", "template"); } private static void printUsages() { System.out.println("Usage:"); System.out.println("\tgen table_name [include_path]: generate files by table_name"); System.out.println("\tdel table_name [include_path]: delete files by table_name"); System.out.println("\tgen * [include_path]: search database all tables and generate files"); System.out.println("\tdel * [include_path]: search database all tables and delete files"); System.out.println("\tquit : quit"); System.out.println("\t[include_path] subdir of templateRootDir,example: 1. dao 2. dao/**,service/**"); System.out.print("please input command:"); } private static String[] nextArguments(Scanner sc) { return StringHelper.tokenizeToStringArray(sc.nextLine()," "); } }