1 package eu.fbk.dkm.pikes.tintop; 2 3 import org.apache.commons.cli.*; 4 5 import java.io.FileInputStream; 6 import java.io.InputStreamReader; 7 import java.util.Properties; 8 9 public class CommandLineWithLogger { 10 11 private Options options; 12 private String logConfig; 13 private Properties loggerProps; 14 private String version; 15 16 private boolean debug; 17 private boolean trace; 18 19 public CommandLineWithLogger() { 20 logConfig = System.getProperty("log-config"); 21 if (logConfig == null) { 22 logConfig = "log-config.txt"; 23 } 24 25 options = new Options(); 26 options.addOption("h", "help", false, "Print this message"); 27 options.addOption(OptionBuilder.withDescription("trace mode").withLongOpt("trace").create()); 28 options.addOption(OptionBuilder.withDescription("debug mode").withLongOpt("debug").create()); 29 } 30 31 public void addOption(Option option) { 32 options.addOption(option); 33 } 34 35 public String getVersion() { 36 return version; 37 } 38 39 public void setVersion(String version) { 40 this.version = version; 41 } 42 43 public boolean isDebug() { 44 return debug; 45 } 46 47 public boolean isTrace() { 48 return trace; 49 } 50 51 public Options getOptions() { 52 return options; 53 } 54 55 public void setLogConfig(String logConfig) { 56 this.logConfig = logConfig; 57 } 58 59 public void printHelp() { 60 HelpFormatter formatter = new HelpFormatter(); 61 formatter.printHelp(150, "java <CLASS>", "\n", options, "\n", true); 62 } 63 64 public Properties getLoggerProps() { 65 return loggerProps; 66 } 67 68 public CommandLine getCommandLine(String[] args) throws ParseException { 69 CommandLineParser parser = new PosixParser(); 70 CommandLine commandLine = null; 71 72 if (version != null) { 73 options.addOption(OptionBuilder.withDescription("Output version information and exit").withLongOpt("version").create()); 74 } 75 try { 76 commandLine = parser.parse(options, args); 77 78 debug = false; 79 debug = false; 80 81 loggerProps = new Properties(); 82 try { 83 loggerProps.load(new InputStreamReader(new FileInputStream(logConfig), "UTF-8")); 84 } catch (Exception e) { 85 loggerProps.setProperty("log4j.appender.stdout", "org.apache.log4j.ConsoleAppender"); 86 loggerProps.setProperty("log4j.appender.stdout.layout.ConversionPattern", "[%t] %-5p (%F:%L) - %m %n"); 87 loggerProps.setProperty("log4j.appender.stdout.layout", "org.apache.log4j.PatternLayout"); 88 loggerProps.setProperty("log4j.appender.stdout.Encoding", "UTF-8"); 89 } 90 91 if (commandLine.hasOption("trace")) { 92 loggerProps.setProperty("log4j.rootLogger", "trace,stdout"); 93 trace = true; 94 } 95 else if (commandLine.hasOption("debug")) { 96 loggerProps.setProperty("log4j.rootLogger", "debug,stdout"); 97 debug = true; 98 } 99 else { 100 if (loggerProps.getProperty("log4j.rootLogger") == null) { 101 loggerProps.setProperty("log4j.rootLogger", "info,stdout"); 102 } 103 } 104 105 if (commandLine.hasOption("help")) { 106 throw new ParseException(""); 107 } 108 if (commandLine.hasOption("version")) { 109 throw new ParseException("Version: " + version); 110 } 111 112 } catch (ParseException exp) { 113 String message = exp.getMessage(); 114 if (message != null && message.length() > 0) { 115 System.err.println("Parsing failed: " + message + "\n"); 116 } 117 printHelp(); 118 throw exp; 119 } 120 121 return commandLine; 122 } 123 }