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 import net.sourceforge.pmd.renderers.YAHTMLRenderer;
17
18 import java.io.InputStreamReader;
19
20 public class CommandLineOptions {
21
22 private boolean debugEnabled;
23 private String targetJDK = "1.4";
24 private boolean shortNamesEnabled;
25
26 private String excludeMarker = ExcludeLines.EXCLUDE_MARKER;
27 private String inputPath;
28 private String reportFormat;
29 private String ruleSets;
30 private String encoding = new InputStreamReader(System.in).getEncoding();
31
32 private boolean checkJavaFiles = true;
33 private boolean checkJspFiles = false;
34
35 private String[] args;
36
37 public CommandLineOptions(String[] args) {
38
39 if (args == null || args.length < 3) {
40 throw new RuntimeException(usage());
41 }
42
43 inputPath = args[0];
44 reportFormat = args[1];
45 ruleSets = new SimpleRuleSetNameMapper(args[2]).getRuleSets();
46
47 this.args = args;
48
49 for (int i = 0; i < args.length; i++) {
50 if (args[i].equals("-debug")) {
51 debugEnabled = true;
52 } else if (args[i].equals("-shortnames")) {
53 shortNamesEnabled = true;
54 } else if (args[i].equals("-encoding")) {
55 encoding = args[i + 1];
56 } else if (args[i].equals("-targetjdk")) {
57 targetJDK = args[i + 1];
58 } else if (args[i].equals("-excludemarker")) {
59 excludeMarker = args[i + 1];
60 } else if (args[i].equals("-jsp")) {
61 checkJspFiles = true;
62 } else if (args[i].equals("-nojava")) {
63 checkJavaFiles = false;
64 }
65 }
66 }
67
68 public Renderer createRenderer() {
69 if (reportFormat.equals("xml")) {
70 return new XMLRenderer();
71 } else if (reportFormat.equals("ideaj")) {
72 return new IDEAJRenderer(args);
73 } else if (reportFormat.equals("papari")) {
74 return new PapariTextRenderer();
75 } else if (reportFormat.equals("text")) {
76 return new TextRenderer();
77 } else if (reportFormat.equals("emacs")) {
78 return new EmacsRenderer();
79 } else if (reportFormat.equals("csv")) {
80 return new CSVRenderer();
81 } else if (reportFormat.equals("html")) {
82 return new HTMLRenderer();
83 } else if (reportFormat.equals("yahtml")) {
84 return new YAHTMLRenderer();
85 } else if (reportFormat.equals("summaryhtml")) {
86 return new SummaryHTMLRenderer();
87 } else if (reportFormat.equals("vbhtml")) {
88 return new VBHTMLRenderer();
89 }
90 if (!reportFormat.equals("")) {
91 try {
92 return (Renderer) Class.forName(reportFormat).newInstance();
93 } catch (Exception e) {
94 throw new IllegalArgumentException("Can't find the custom format " + reportFormat + ": " + e.getClass().getName());
95 }
96 }
97
98 throw new IllegalArgumentException("Can't create report with format of " + reportFormat);
99 }
100
101 public boolean containsCommaSeparatedFileList() {
102 return inputPath.indexOf(',') != -1;
103 }
104
105 public String getInputPath() {
106 return this.inputPath;
107 }
108
109 public String getEncoding() {
110 return this.encoding;
111 }
112
113 public String getReportFormat() {
114 return this.reportFormat;
115 }
116
117 public String getRulesets() {
118 return this.ruleSets;
119 }
120
121 public String getExcludeMarker() {
122 return this.excludeMarker;
123 }
124
125 public boolean debugEnabled() {
126 return debugEnabled;
127 }
128
129 public String getTargetJDK() {
130 return targetJDK;
131 }
132
133 public boolean shortNamesEnabled() {
134 return shortNamesEnabled;
135 }
136
137 public String usage() {
138 return PMD.EOL + PMD.EOL +
139 "Mandatory arguments:" + PMD.EOL +
140 "1) A java source code filename or directory" + PMD.EOL +
141 "2) A report format " + PMD.EOL +
142 "3) A ruleset filename or a comma-delimited string of ruleset filenames" + PMD.EOL +
143 PMD.EOL +
144 "For example: " + PMD.EOL +
145 "c://> java -jar pmd-" + PMD.VERSION + ".jar c://my//source//code html unusedcode" + PMD.EOL +
146 PMD.EOL +
147 "Optional arguments that may be put after the mandatory arguments are: " + PMD.EOL +
148 "-debug: prints debugging information " + PMD.EOL +
149 "-targetjdk: specifies a language version to target - 1.3, 1.4, or 1.5" + PMD.EOL +
150 "-encoding: specifies the character set encoding of the source code files PMD is reading (i.e., UTF-8)" + PMD.EOL +
151 "-excludemarker: specifies the String that marks the a line which PMD should ignore; default is NOPMD" + PMD.EOL +
152 "-shortnames: prints shortened filenames in the report" + PMD.EOL +
153 PMD.EOL +
154 "For example: " + PMD.EOL +
155 "c://> java -jar pmd-" + PMD.VERSION + ".jar c://my//source//code text unusedcode,imports -targetjdk 1.5 -debug" + PMD.EOL +
156 "c://> java -jar pmd-" + PMD.VERSION + ".jar c://my//source//code xml basic,design -encoding UTF-8" + PMD.EOL +
157 PMD.EOL;
158 }
159
160 /***
161 * @return Returns the checkJavaFiles.
162 */
163 public boolean isCheckJavaFiles() {
164 return checkJavaFiles;
165 }
166
167 /***
168 * @return Returns the checkJspFiles.
169 */
170 public boolean isCheckJspFiles() {
171 return checkJspFiles;
172 }
173 }
174
175