KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > pmd > CommandLineOptions


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 JavaDoc;
19 import java.text.MessageFormat JavaDoc;
20
21 public class CommandLineOptions {
22
23     private boolean debugEnabled;
24     private String JavaDoc targetJDK = "1.4";
25     private boolean shortNamesEnabled;
26     private int cpus = Runtime.getRuntime().availableProcessors();
27
28     private String JavaDoc excludeMarker = PMD.EXCLUDE_MARKER;
29     private String JavaDoc inputPath;
30     private String JavaDoc reportFormat;
31     private String JavaDoc reportFile;
32     private String JavaDoc ruleSets;
33     private String JavaDoc encoding = new InputStreamReader JavaDoc(System.in).getEncoding();
34     private String JavaDoc linePrefix;
35     private String JavaDoc linkPrefix;
36     private int minPriority = Rule.LOWEST_PRIORITY;
37
38
39     private boolean checkJavaFiles = true;
40     private boolean checkJspFiles = false;
41
42     private String JavaDoc[] args;
43
44     public CommandLineOptions(String JavaDoc[] args) {
45
46         if (args == null || args.length < 3) {
47             throw new RuntimeException JavaDoc(usage());
48         }
49         int optIndex = 0;
50         if (args[0].charAt(0) == '-') {
51             optIndex = args.length - 3;
52         }
53
54         inputPath = args[optIndex];
55         reportFormat = args[optIndex+1];
56         ruleSets = new SimpleRuleSetNameMapper(args[optIndex+2]).getRuleSets();
57
58         this.args = args;
59
60         for (int i = 0; i < args.length; i++) {
61             if (args[i].equals("-debug")) {
62                 debugEnabled = true;
63             } else if (args[i].equals("-shortnames")) {
64                 shortNamesEnabled = true;
65             } else if (args[i].equals("-encoding")) {
66                 encoding = args[++i];
67             } else if (args[i].equals("-cpus")) {
68                 try {
69                     cpus = Integer.parseInt(args[++i]);
70                 } catch (NumberFormatException JavaDoc e) {
71                     throw new RuntimeException JavaDoc(MessageFormat.format(
72                             "cpus parameter must be a whole number, {0} received",
73                             new String JavaDoc[] { args[i] }));
74                 }
75             } else if (args[i].equals("-targetjdk")) {
76                 targetJDK = args[++i];
77             } else if (args[i].equals("-excludemarker")) {
78                 excludeMarker = args[++i];
79             } else if (args[i].equals("-jsp")) {
80                 checkJspFiles = true;
81             } else if (args[i].equals("-nojava")) {
82                 checkJavaFiles = false;
83             } else if (args[i].equals("-lineprefix")) {
84                 linePrefix = args[++i];
85             } else if (args[i].equals("-linkprefix")) {
86                 linkPrefix = args[++i];
87             } else if (args[i].equals("-minimumpriority")) {
88                 try {
89                     minPriority = Integer.parseInt(args[++i]);
90                 } catch (NumberFormatException JavaDoc e) {
91                     throw new RuntimeException JavaDoc(MessageFormat.format(
92                             "minimumpriority parameter must be a whole number, {0} received",
93                             new String JavaDoc[] { args[i] }));
94                 }
95             } else if (args[i].equals("-reportfile")) {
96                 reportFile = args[++i];
97             }
98         }
99     }
100
101     public Renderer createRenderer() {
102         if (reportFormat.equals("xml")) {
103             return new XMLRenderer();
104         } else if (reportFormat.equals("ideaj")) {
105             return new IDEAJRenderer(args);
106         } else if (reportFormat.equals("papari")) {
107             return new PapariTextRenderer();
108         } else if (reportFormat.equals("text")) {
109             return new TextRenderer();
110         } else if (reportFormat.equals("emacs")) {
111             return new EmacsRenderer();
112         } else if (reportFormat.equals("csv")) {
113             return new CSVRenderer();
114         } else if (reportFormat.equals("html")) {
115             return new HTMLRenderer();
116         } else if (reportFormat.equals("yahtml")) {
117             return new YAHTMLRenderer();
118         } else if (reportFormat.equals("summaryhtml")) {
119             return new SummaryHTMLRenderer(linkPrefix, linePrefix);
120         } else if (reportFormat.equals("vbhtml")) {
121             return new VBHTMLRenderer();
122         }
123         if (!reportFormat.equals("")) {
124             try {
125                 return (Renderer) Class.forName(reportFormat).newInstance();
126             } catch (Exception JavaDoc e) {
127                 throw new IllegalArgumentException JavaDoc("Can't find the custom format " + reportFormat + ": " + e.getClass().getName());
128             }
129         }
130
131         throw new IllegalArgumentException JavaDoc("Can't create report with format of " + reportFormat);
132     }
133
134     public boolean containsCommaSeparatedFileList() {
135         return inputPath.indexOf(',') != -1;
136     }
137
138     public String JavaDoc getInputPath() {
139         return this.inputPath;
140     }
141
142     public String JavaDoc getEncoding() {
143         return this.encoding;
144     }
145
146     public String JavaDoc getReportFormat() {
147         return this.reportFormat;
148     }
149
150     public String JavaDoc getReportFile() {
151         return this.reportFile;
152     }
153
154     public String JavaDoc getRulesets() {
155         return this.ruleSets;
156     }
157
158     public String JavaDoc getExcludeMarker() {
159         return this.excludeMarker;
160     }
161
162     public boolean debugEnabled() {
163         return debugEnabled;
164     }
165
166     public int getCpus() {
167         return cpus;
168     }
169
170     public String JavaDoc getTargetJDK() {
171         return targetJDK;
172     }
173
174     public boolean shortNamesEnabled() {
175         return shortNamesEnabled;
176     }
177
178     public int getMinPriority() {
179         return minPriority;
180     }
181
182     public String JavaDoc usage() {
183         return PMD.EOL + PMD.EOL +
184                 "Mandatory arguments:" + PMD.EOL +
185                 "1) A java source code filename or directory" + PMD.EOL +
186                 "2) A report format " + PMD.EOL +
187                 "3) A ruleset filename or a comma-delimited string of ruleset filenames" + PMD.EOL +
188                 PMD.EOL +
189                 "For example: " + PMD.EOL +
190                 "c:\\> java -jar pmd-" + PMD.VERSION + ".jar c:\\my\\source\\code html unusedcode" + PMD.EOL +
191                 PMD.EOL +
192                 "Optional arguments that may be put before or after the mandatory arguments: " + PMD.EOL +
193                 "-debug: prints debugging information" + PMD.EOL +
194                 "-targetjdk: specifies a language version to target - 1.3, 1.4, 1.5 or 1.6" + PMD.EOL +
195                 "-cpus: specifies the number of threads to create" + PMD.EOL +
196                 "-encoding: specifies the character set encoding of the source code files PMD is reading (i.e., UTF-8)" + PMD.EOL +
197                 "-excludemarker: specifies the String that marks the a line which PMD should ignore; default is NOPMD" + PMD.EOL +
198                 "-shortnames: prints shortened filenames in the report" + PMD.EOL +
199                 "-linkprefix: path to HTML source, for summary html renderer only" + PMD.EOL +
200                 "-lineprefix: custom anchor to affected line in the source file, for summary html renderer only" + PMD.EOL +
201                 "-minimumpriority: rule priority threshold; rules with lower priority than they will not be used" + PMD.EOL +
202                 "-reportfile: send report output to a file; default to System.out" + PMD.EOL +
203                 PMD.EOL +
204                 "For example: " + PMD.EOL +
205                 "c:\\> java -jar pmd-" + PMD.VERSION + ".jar c:\\my\\source\\code text unusedcode,imports -targetjdk 1.5 -debug" + PMD.EOL +
206                 "c:\\> java -jar pmd-" + PMD.VERSION + ".jar c:\\my\\source\\code xml basic,design -encoding UTF-8" + PMD.EOL +
207                 PMD.EOL;
208     }
209
210     /**
211      * @return Returns the checkJavaFiles.
212      */

213     public boolean isCheckJavaFiles() {
214         return checkJavaFiles;
215     }
216
217     /**
218      * @return Returns the checkJspFiles.
219      */

220     public boolean isCheckJspFiles() {
221         return checkJspFiles;
222     }
223 }
224
225
226
227          
228
Popular Tags