Esempio n. 1
0
  /**
   * Output usage message flag listing.
   *
   * @param subclassOpts array containing flag and description pairs
   */
  protected void outputFlags(String[][] subclassOpts) {

    // Build options list
    final ArrayList<String[]> optionList = new ArrayList<>();

    // Add options directly supported by AbstractMain
    optionList.addAll(
        Arrays.<String[]>asList(
            new String[][] {
              {"--classpath, -cp path", "Append to the classpath (useful with `java -jar ...')"},
              {"--read-only, -ro", "Disallow database modifications"},
              {"--new-schema", "Allow recording of a new database schema version"},
              {
                "--schema-version, -v num",
                "Specify database schema version (default highest recorded)"
              },
              {
                "--model-pkg package",
                "Scan for @JSimpleClass model classes under Java package (=> JSimpleDB mode)"
              },
              {
                "--type-pkg package",
                "Scan for @JFieldType types under Java package to register custom types"
              },
              {"--pkg, -p package", "Equivalent to `--model-pkg package --type-pkg package'"},
              {"--help, -h", "Show this help message"},
              {"--verbose", "Show verbose error messages"},
            }));

    // Add options supported by the various key/value implementations
    final KVImplementation[] kvs = KVImplementation.getImplementations();
    for (KVImplementation kv : kvs)
      optionList.addAll(Arrays.<String[]>asList(kv.getCommandLineOptions()));

    // Add options supported by subclass
    if (subclassOpts != null) optionList.addAll(Arrays.<String[]>asList(subclassOpts));

    // Sort options
    Collections.sort(
        optionList,
        new Comparator<String[]>() {
          @Override
          public int compare(String[] opt1, String[] opt2) {
            return opt1[0].compareTo(opt2[0]);
          }
        });

    // Display all supported options
    int width = 0;
    for (String[] opt : optionList) width = Math.max(width, opt[0].length());
    for (String[] opt : optionList)
      System.err.println(String.format("  %-" + width + "s  %s", opt[0], opt[1]));

    // Display additional usage text
    for (KVImplementation kv : kvs) {
      final String usageText = kv.getUsageText();
      if (usageText != null) System.err.println(usageText.trim());
    }
  }