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}