View Javadoc

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