package picocli.examples.customhelp;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Help;
import picocli.CommandLine.IHelpSectionRenderer;
import picocli.CommandLine.Model.UsageMessageSpec;
import java.util.LinkedHashMap;
/**
* Example showing how to show/hide commands on specific conditions.
*
* @see https://github.com/remkop/picocli/issues/1052
*/
public class ConditionallyShowSubcommands {
@Command(name = "myApp")
static class App {
@Command(name = "do-something", description = "Do something useful.")
void doSomething() {
}
@Command(name = "generate-cmd-launcher",
description = "Generate a command prompt launcher (${PARENT-COMMAND-NAME}.cmd).")
void generateCmdLauncher() {
}
}
public static void main(String[] args) {
IHelpSectionRenderer renderer = (Help help) -> {
LinkedHashMap map = new LinkedHashMap<>(help.subcommands());
if (!isWindows()) {
map.remove("generate-cmd-launcher");
}
return help.commandList(map);
};
CommandLine cmd = new CommandLine(new App());
cmd.getHelpSectionMap().put(UsageMessageSpec.SECTION_KEY_COMMAND_LIST, renderer);
System.out.println(cmd.getUsageMessage());
}
static boolean isWindows() {
return System.getProperty("os.name").toLowerCase().contains("win");
}
}