/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd;
import net.sourceforge.pmd.renderers.CSVRenderer;
import net.sourceforge.pmd.renderers.EmacsRenderer;
import net.sourceforge.pmd.renderers.HTMLRenderer;
import net.sourceforge.pmd.renderers.IDEAJRenderer;
import net.sourceforge.pmd.renderers.PapariTextRenderer;
import net.sourceforge.pmd.renderers.Renderer;
import net.sourceforge.pmd.renderers.SummaryHTMLRenderer;
import net.sourceforge.pmd.renderers.TextRenderer;
import net.sourceforge.pmd.renderers.VBHTMLRenderer;
import net.sourceforge.pmd.renderers.XMLRenderer;
import java.io.InputStreamReader;
public class CommandLineOptions {
private boolean debugEnabled;
private boolean jdk13;
private boolean shortNamesEnabled;
private String inputFileName;
private String reportFormat;
private String ruleSets;
private String encoding = new InputStreamReader(System.in).getEncoding();
private String[] args;
public CommandLineOptions(String[] args) {
if (args == null || args.length < 3) {
throw new RuntimeException(usage());
}
inputFileName = args[0];
reportFormat = args[1];
ruleSets = args[2];
this.args = args;
for (int i=0; i<args.length; i++) {
if (args[i].equals("-debug")) {
debugEnabled = true;
} else if (args[i].equals("-shortnames")) {
shortNamesEnabled = true;
} else if (args[i].equals("-encoding")) {
encoding = args[i+1];
} else if (args[i].equals("-jdk13")) {
jdk13 = true;
}
}
}
public Renderer createRenderer() {
if (reportFormat.equals("xml")) {
return new XMLRenderer();
} else if (reportFormat.equals("ideaj")) {
return new IDEAJRenderer(args);
} else if (reportFormat.equals("papari")) {
return new PapariTextRenderer();
} else if (reportFormat.equals("text")) {
return new TextRenderer();
} else if (reportFormat.equals("emacs")) {
return new EmacsRenderer();
} else if (reportFormat.equals("csv")) {
return new CSVRenderer();
} else if (reportFormat.equals("html")) {
return new HTMLRenderer();
}
if (reportFormat.equals("summaryhtml")) {
return new SummaryHTMLRenderer();
}
if (reportFormat.equals("vbhtml")) {
return new VBHTMLRenderer();
}
if (!reportFormat.equals("")) {
try {
return (Renderer)Class.forName(reportFormat).newInstance();
} catch (Exception e) {
throw new IllegalArgumentException("Can't find the custom format " + reportFormat + ": " + e.getClass().getName());
}
}
throw new IllegalArgumentException("Can't create report with format of " + reportFormat);
}
public boolean containsCommaSeparatedFileList() {
return inputFileName.indexOf(',') != -1;
}
public String getInputFileName() {
return this.inputFileName;
}
public String getEncoding() {
return this.encoding;
}
public String getReportFormat() {
return this.reportFormat;
}
public String getRulesets() {
return this.ruleSets;
}
public boolean debugEnabled() {
return debugEnabled;
}
public boolean jdk13() {
return jdk13;
}
public boolean shortNamesEnabled() {
return shortNamesEnabled;
}
public String usage() {
return PMD.EOL + PMD.EOL +
"Mandatory arguments:" + PMD.EOL +
"1) A java source code filename or directory" + PMD.EOL +
"2) A report format " + PMD.EOL +
"3) A ruleset filename or a comma-delimited string of ruleset filenames" + PMD.EOL +
PMD.EOL +
"For example: " + PMD.EOL +
"c:\\> java -jar pmd-1.8.jar c:\\my\\source\\code html rulesets/unusedcode.xml,rulesets/imports.xml" + PMD.EOL +
PMD.EOL +
"Optional arguments that may be put after the mandatory arguments are: " + PMD.EOL +
"-debug: prints debugging information " + PMD.EOL +
"-jdk13: enables PMD to parse source code written using 'assert' as an identifier" + PMD.EOL +
"-encoding: specifies the character set encoding of the source code files PMD is reading (i.e., UTF-8)" + PMD.EOL +
"-shortnames: prints shortened filenames in the report" + PMD.EOL +
PMD.EOL +
"For example: " + PMD.EOL +
"c:\\> java -jar pmd-1.8.jar c:\\my\\source\\code html rulesets/unusedcode.xml,rulesets/imports.xml -jdk13 -debug" + PMD.EOL +
"c:\\> java -jar pmd-1.8.jar c:\\my\\source\\code html rulesets/unusedcode.xml,rulesets/imports.xml -encoding UTF-8" + PMD.EOL +
PMD.EOL;
}
}