1 /*** 2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html 3 */ 4 package net.sourceforge.pmd; 5 6 import net.sourceforge.pmd.renderers.CSVRenderer; 7 import net.sourceforge.pmd.renderers.EmacsRenderer; 8 import net.sourceforge.pmd.renderers.HTMLRenderer; 9 import net.sourceforge.pmd.renderers.IDEAJRenderer; 10 import net.sourceforge.pmd.renderers.PapariTextRenderer; 11 import net.sourceforge.pmd.renderers.Renderer; 12 import net.sourceforge.pmd.renderers.SummaryHTMLRenderer; 13 import net.sourceforge.pmd.renderers.TextRenderer; 14 import net.sourceforge.pmd.renderers.VBHTMLRenderer; 15 import net.sourceforge.pmd.renderers.XMLRenderer; 16 17 import java.io.InputStreamReader; 18 19 public class CommandLineOptions { 20 21 private boolean debugEnabled; 22 private boolean jdk13; 23 private boolean shortNamesEnabled; 24 25 private String inputFileName; 26 private String reportFormat; 27 private String ruleSets; 28 private String encoding = new InputStreamReader(System.in).getEncoding(); 29 30 private String[] args; 31 32 public CommandLineOptions(String[] args) { 33 34 if (args == null || args.length < 3) { 35 throw new RuntimeException(usage()); 36 } 37 38 inputFileName = args[0]; 39 reportFormat = args[1]; 40 ruleSets = args[2]; 41 42 this.args = args; 43 44 for (int i=0; i<args.length; i++) { 45 if (args[i].equals("-debug")) { 46 debugEnabled = true; 47 } else if (args[i].equals("-shortnames")) { 48 shortNamesEnabled = true; 49 } else if (args[i].equals("-encoding")) { 50 encoding = args[i+1]; 51 } else if (args[i].equals("-jdk13")) { 52 jdk13 = true; 53 } 54 } 55 } 56 57 public Renderer createRenderer() { 58 if (reportFormat.equals("xml")) { 59 return new XMLRenderer(); 60 } else if (reportFormat.equals("ideaj")) { 61 return new IDEAJRenderer(args); 62 } else if (reportFormat.equals("papari")) { 63 return new PapariTextRenderer(); 64 } else if (reportFormat.equals("text")) { 65 return new TextRenderer(); 66 } else if (reportFormat.equals("emacs")) { 67 return new EmacsRenderer(); 68 } else if (reportFormat.equals("csv")) { 69 return new CSVRenderer(); 70 } else if (reportFormat.equals("html")) { 71 return new HTMLRenderer(); 72 } 73 if (reportFormat.equals("summaryhtml")) { 74 return new SummaryHTMLRenderer(); 75 } 76 if (reportFormat.equals("vbhtml")) { 77 return new VBHTMLRenderer(); 78 } 79 if (!reportFormat.equals("")) { 80 try { 81 return (Renderer)Class.forName(reportFormat).newInstance(); 82 } catch (Exception e) { 83 throw new IllegalArgumentException("Can't find the custom format " + reportFormat + ": " + e.getClass().getName()); 84 } 85 } 86 87 throw new IllegalArgumentException("Can't create report with format of " + reportFormat); 88 } 89 90 public boolean containsCommaSeparatedFileList() { 91 return inputFileName.indexOf(',') != -1; 92 } 93 94 public String getInputFileName() { 95 return this.inputFileName; 96 } 97 98 public String getEncoding() { 99 return this.encoding; 100 } 101 102 public String getReportFormat() { 103 return this.reportFormat; 104 } 105 106 public String getRulesets() { 107 return this.ruleSets; 108 } 109 110 public boolean debugEnabled() { 111 return debugEnabled; 112 } 113 114 public boolean jdk13() { 115 return jdk13; 116 } 117 118 public boolean shortNamesEnabled() { 119 return shortNamesEnabled; 120 } 121 122 public String usage() { 123 return PMD.EOL + PMD.EOL + 124 "Mandatory arguments:" + PMD.EOL + 125 "1) A java source code filename or directory" + PMD.EOL + 126 "2) A report format " + PMD.EOL + 127 "3) A ruleset filename or a comma-delimited string of ruleset filenames" + PMD.EOL + 128 PMD.EOL + 129 "For example: " + PMD.EOL + 130 "c://> java -jar pmd-1.8.jar c://my//source//code html rulesets/unusedcode.xml,rulesets/imports.xml" + PMD.EOL + 131 PMD.EOL + 132 "Optional arguments that may be put after the mandatory arguments are: " + PMD.EOL + 133 "-debug: prints debugging information " + PMD.EOL + 134 "-jdk13: enables PMD to parse source code written using 'assert' as an identifier" + PMD.EOL + 135 "-encoding: specifies the character set encoding of the source code files PMD is reading (i.e., UTF-8)" + PMD.EOL + 136 "-shortnames: prints shortened filenames in the report" + PMD.EOL + 137 PMD.EOL + 138 "For example: " + PMD.EOL + 139 "c://> java -jar pmd-1.8.jar c://my//source//code html rulesets/unusedcode.xml,rulesets/imports.xml -jdk13 -debug" + PMD.EOL + 140 "c://> java -jar pmd-1.8.jar c://my//source//code html rulesets/unusedcode.xml,rulesets/imports.xml -encoding UTF-8" + PMD.EOL + 141 PMD.EOL; 142 } 143 } 144 145