/**
   * @param args String[]
   * @throws RuleSetNotFoundException
   * @throws IOException
   * @throws PMDException
   */
  public static void main(String[] args)
      throws RuleSetNotFoundException, IOException, PMDException {

    String targetjdk = findOptionalStringValue(args, "--targetjdk", "1.4");
    Language language = Language.JAVA;
    LanguageVersion languageVersion = language.getVersion(targetjdk);
    if (languageVersion == null) {
      languageVersion = language.getDefaultVersion();
    }

    String srcDir =
        findOptionalStringValue(args, "--source-directory", "/usr/local/java/src/java/lang/");
    List<DataSource> dataSources =
        FileUtil.collectFiles(srcDir, new LanguageFilenameFilter(language));

    boolean debug = findBooleanSwitch(args, "--debug");
    boolean parseOnly = findBooleanSwitch(args, "--parse-only");

    if (debug) {
      System.out.println("Using " + language.getName() + " " + languageVersion.getVersion());
    }
    if (parseOnly) {
      Parser parser = PMD.parserFor(languageVersion, null);
      parseStress(parser, dataSources, debug);
    } else {
      String ruleset = findOptionalStringValue(args, "--ruleset", "");
      if (debug) {
        System.out.println("Checking directory " + srcDir);
      }
      Set<RuleDuration> results = new TreeSet<RuleDuration>();
      RuleSetFactory factory = new RuleSetFactory();
      if (StringUtil.isNotEmpty(ruleset)) {
        stress(languageVersion, factory.createRuleSet(ruleset), dataSources, results, debug);
      } else {
        Iterator<RuleSet> i = factory.getRegisteredRuleSets();
        while (i.hasNext()) {
          stress(languageVersion, i.next(), dataSources, results, debug);
        }
      }

      TextReport report = new TextReport();
      report.generate(results, System.err);
    }
  }
  /** @param args the command line arguments */
  public static void main(String[] args) {

    QParameterSetGenerator g = new QParameterSetGenerator(150, 100.0, 100.0);

    System.out.println("Starting generation");
    try {
      TextReport r;
      r = new TextReport("qdata");
      r.addLines(
          "mtba \t c2va \t mst \t c2vs \t numservers \t rho \t acdf \t scdf \t ap1 \t ap2 \t ap3 \t sp1 \t sp2 \t sp3");

      QParameterSet q;
      for (int i = 1; i <= 2000; i++) {
        q = g.generateQParameterSet();
        r.addLines(q);
        //                r.addLines(q.mtba + "\t" + q.c2va + "\t" + q.mst + "\t" + q.c2vs + "\t" +
        // q.numServers + "\t" + q.rho + "\t" + q.acdfType + "\t" + q.scdfType);
      }
    } catch (IOException e) {
      System.out.println("I/O exception opening ");
      System.exit(1);
    }
    System.out.println("Completed generation");
  }