protected void printHelpTopic(String topic, PrintWriter pw) {
    if (topic.equalsIgnoreCase("all")) {
      for (final String helpTopic : helpTopics) {
        if (!helpTopic.equals("all")) {
          pw.println("-------- " + helpTopic + " --------");
          printHelpTopic(helpTopic, pw);
        }
      }
    } else if (topic.equalsIgnoreCase("overview")) {
      pw.println(
          String.format(
              "This program allows GemFire to be managed from the command line. It expects a command to execute.See the help topic %s. For a summary of supported options see the help topic %s.For a concise description of command line syntax see the help topic %s.For a description of system configuration see the help topic %s.For help on a specific command use the %s option with the command name.",

              "commands", "options", "usage", "configuration", "-h"));
    } else if (topic.equalsIgnoreCase("commands")) {
      pw.println(usageMap.get("gemfire") + " <command> ...");
      format(pw, (String) helpMap.get("gemfire"), "  ", 0);
      for (final String validCommand : validCommands) {
        pw.println((String) usageMap.get(validCommand));
        if (helpMap.get(validCommand) == null) {
          pw.println("  (help message missing for " + validCommand + ")");
        } else {
          format(pw, (String) helpMap.get(validCommand), "  ", 0);
        }
      }
    } else if (topic.equalsIgnoreCase("options")) {
      pw.println(
          "All command line options start with a - and are not required.Each option has a default that will be used when its not specified.Options that take an argument always use a single = character, with no spaces, to delimit where the option name ends and the argument begins.Options that precede the command word can be used with any command and are also permitted to follow the command word.");
      for (final String validOption : validOptions) {
        pw.print(validOption + ":");
        try {
          format(pw, (String) helpMap.get(validOption), "  ", validOption.length() + 1);
        } catch (RuntimeException ex) {
          System.err.println(
              String.format("no help for option %s]", validOption));
          throw ex;
        }
      }
    } else if (topic.equalsIgnoreCase("usage")) {
      pw.println(
          "The following synax is used in the usage strings:[] designate an optional item() are used to group items<> designate non-literal text. Used to designate logical items* suffix means zero or more of the previous item| means the item to the left or right is required");
      for (final String validCommand : validCommands) {
        pw.println(getUsageString(validCommand));
      }
    }
  }
Represents a list of ResourceInst that have been combined together. Note the most common case
is for this class to only own a single ResourceInst.
geode-core/src/main/java/org/apache/geode/internal/SystemAdmin.java