001package gu.sql2java.generator; 002 003import org.apache.commons.cli.CommandLine; 004import org.apache.commons.cli.Option; 005import org.apache.commons.cli.Options; 006import org.apache.commons.cli.ParseException; 007import org.slf4j.Logger; 008import org.slf4j.LoggerFactory; 009 010import com.google.common.base.Function; 011import com.google.common.collect.Lists; 012 013import net.gdface.cli.BaseAppConfig; 014import net.gdface.utils.MiscellaneousUtils; 015 016import java.io.File; 017import java.net.MalformedURLException; 018import java.net.URL; 019import java.net.URLClassLoader; 020import java.util.List; 021/** 022 * 终端命令行配置参数 023 * @author guyadong 024 * 025 */ 026public class GeneratorConfig extends BaseAppConfig implements GeneratorConstants { 027 private static final Logger logger = LoggerFactory.getLogger(GeneratorConfig.class); 028 029 static final GeneratorConfig CONFIG = new GeneratorConfig(); 030 031 private File propFile; 032 private String classPath; 033 private URLClassLoader classLoader; 034 public GeneratorConfig() { 035 super(true); 036 options.addOption(Option.builder(PROPFILE_OPTION).longOpt(PROPFILE_OPTION_LONG) 037 .desc(PROPFILE_OPTION_DESC).numberOfArgs(1).type(File.class).required(true).build()); 038 039 options.addOption(Option.builder(CLASSPATH_OPTION).longOpt(CLASSPATH_OPTION_LONG) 040 .desc(CLASSPATH_OPTION_DESC).numberOfArgs(1).build()); 041 042 defaultValue.setProperty(PROPFILE_OPTION_LONG, null); 043 defaultValue.setProperty(CLASSPATH_OPTION_LONG, ""); 044 045 } 046 @Override 047 public void loadConfig(Options options, CommandLine cmd) throws ParseException { 048 super.loadConfig(options, cmd); 049 this.propFile = getProperty(PROPFILE_OPTION_LONG); 050 this.classPath = getProperty(CLASSPATH_OPTION_LONG); 051 052 } 053 @Override 054 protected String getAppName() { 055 return Generator.class.getSimpleName(); 056 } 057 @Override 058 protected String getHeader() { 059 return "Sql2java (java)代码生成器"; 060 } 061 062 /** 063 * @return propfile 064 */ 065 public File getPropFile() { 066 return propFile; 067 } 068 069 /** 070 * 根据classPath参数创建自定义{@link URLClassLoader}对象 071 * @return {@link URLClassLoader}对象,classPath为空则返回{@code null} 072 */ 073 public synchronized ClassLoader getClassloader(){ 074 if(null == classLoader){ 075 List<String> paths = MiscellaneousUtils.elementsOf(classPath); 076 if(!paths.isEmpty()){ 077 List<URL> urls = Lists.transform(paths, new Function<String, URL>() { 078 079 @Override 080 public URL apply(String input) { 081 try { 082 return new File(input).getAbsoluteFile().toURI().toURL(); 083 } catch (MalformedURLException e) { 084 throw new RuntimeException(e); 085 } 086 } 087 }); 088 logger.info("classpath: {}",urls); 089 classLoader = new URLClassLoader(urls.toArray(new URL[urls.size()])); 090 } 091 } 092 return classLoader; 093 } 094}