[#2442] - implement yamlsample config help output; (#2443)

This commit is contained in:
dragosnutu
2019-03-26 09:22:59 +02:00
committed by William Cheng
parent 173ae6f368
commit 9e391efd1d
2 changed files with 73 additions and 25 deletions

View File

@@ -72,8 +72,8 @@ SYNOPSIS
OPTIONS OPTIONS
-f <output format>, --format <output format> -f <output format>, --format <output format>
Write output files in the desired format. Options are 'text' and Write output files in the desired format. Options are 'text',
'markdown'. Default is 'text'. 'markdown' or 'yamlsample'. Default is 'text'.
-g <generator name>, --generator-name <generator name> -g <generator name>, --generator-name <generator name>
generator to get config help for generator to get config help for

View File

@@ -29,8 +29,8 @@ import org.slf4j.LoggerFactory;
import java.io.*; import java.io.*;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Map;
import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4; import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4;
import static org.apache.commons.lang3.StringUtils.isEmpty; import static org.apache.commons.lang3.StringUtils.isEmpty;
@@ -40,30 +40,34 @@ public class ConfigHelp implements Runnable {
private static final Logger LOGGER = LoggerFactory.getLogger(Generate.class); private static final Logger LOGGER = LoggerFactory.getLogger(Generate.class);
@Option(name = {"-g", "--generator-name"}, title = "generator name", public static final String FORMAT_TEXT = "text";
description = "generator to get config help for") public static final String FORMAT_MARKDOWN = "markdown";
public static final String FORMAT_YAMLSAMPLE = "yamlsample";
@Option(name = {"-g",
"--generator-name"}, title = "generator name", description = "generator to get config help for")
private String generatorName; private String generatorName;
@Option(name = {"--named-header"}, title = "named header", @Option(name = {
description = "Header includes the generator name, for clarity in output") "--named-header"}, title = "named header", description = "Header includes the generator name, for clarity in output")
private Boolean namedHeader; private Boolean namedHeader;
@Option(name = {"-o", "--output"}, title = "output location", @Option(name = {"-o",
description = "Optionally write help to this location, otherwise default is standard output") "--output"}, title = "output location", description = "Optionally write help to this location, otherwise default is standard output")
private String outputFile; private String outputFile;
@Option(name = {"-f", "--format"}, title = "output format", @Option(name = {"-f",
description = "Write output files in the desired format. Options are 'text' and 'markdown'. Default is 'text'.") "--format"}, title = "output format", description = "Write output files in the desired format. Options are 'text', 'markdown' or 'yamlsample'. Default is 'text'.", allowedValues = {
FORMAT_TEXT, FORMAT_MARKDOWN, FORMAT_YAMLSAMPLE})
private String format; private String format;
@Option(name = {"--markdown-header"}, title = "markdown header", @Option(name = {
description = "When format=markdown, include this option to write out markdown headers (e.g. for docusaurus).") "--markdown-header"}, title = "markdown header", description = "When format=markdown, include this option to write out markdown headers (e.g. for docusaurus).")
private Boolean markdownHeader; private Boolean markdownHeader;
private String newline = System.lineSeparator(); private String newline = System.lineSeparator();
@Override @Override public void run() {
public void run() {
if (isEmpty(generatorName)) { if (isEmpty(generatorName)) {
LOGGER.error("[error] A generator name (--generator-name / -g) is required."); LOGGER.error("[error] A generator name (--generator-name / -g) is required.");
System.exit(1); System.exit(1);
@@ -73,20 +77,34 @@ public class ConfigHelp implements Runnable {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
CodegenConfig config = CodegenConfigLoader.forName(generatorName); CodegenConfig config = CodegenConfigLoader.forName(generatorName);
if (StringUtils.isEmpty(format) || "text".equalsIgnoreCase(format)) { String desiredFormat = StringUtils.defaultIfBlank(format, FORMAT_TEXT);
generatePlainTextHelp(sb, config);
} else if ("markdown".equalsIgnoreCase(format)) { switch (desiredFormat) {
generateMarkdownHelp(sb, config); case FORMAT_MARKDOWN:
} else { generateMarkdownHelp(sb, config);
LOGGER.warn("[warning] Unrecognized format option: %s.%n", format); break;
case FORMAT_YAMLSAMPLE:
generateYamlSample(sb, config);
break;
case FORMAT_TEXT:
generatePlainTextHelp(sb, config);
break;
default:
LOGGER.warn("[warning] Unrecognized format option: {}", format);
break;
} }
if (!isEmpty(outputFile)) { if (!isEmpty(outputFile)) {
File out = Paths.get(outputFile).toFile(); File out = Paths.get(outputFile).toFile();
//noinspection ResultOfMethodCallIgnored //noinspection ResultOfMethodCallIgnored
out.getParentFile().mkdirs(); File parentFolder = out.getParentFile();
if (parentFolder != null && parentFolder.isDirectory()) {
parentFolder.mkdirs();
}
try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(out), StandardCharsets.UTF_8))) { try (Writer writer = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(out), StandardCharsets.UTF_8))) {
writer.write(sb.toString()); writer.write(sb.toString());
} }
} else { } else {
@@ -101,12 +119,41 @@ public class ConfigHelp implements Runnable {
} }
} }
private void generateYamlSample(StringBuilder sb, CodegenConfig config) {
for (CliOption langCliOption : config.cliOptions()) {
sb.append("# Description: ").append(langCliOption.getDescription()).append(newline);
Map<String, String> enums = langCliOption.getEnum();
if (enums != null) {
sb.append("# Available Values:").append(newline);
for (Map.Entry<String, String> entry : enums.entrySet()) {
sb.append("# ").append(entry.getKey()).append(newline);
sb.append("# ").append(entry.getValue()).append(newline);
}
}
String defaultValue = langCliOption.getDefault();
if (defaultValue != null) {
sb.append(langCliOption.getOpt()).append(": ").append(defaultValue).append(newline);
} else {
sb.append("# ").append(langCliOption.getOpt()).append(": ").append(newline);
}
sb.append(newline);
}
}
private void generateMarkdownHelp(StringBuilder sb, CodegenConfig config) { private void generateMarkdownHelp(StringBuilder sb, CodegenConfig config) {
sb.append(newline); sb.append(newline);
if (Boolean.TRUE.equals(markdownHeader)) { if (Boolean.TRUE.equals(markdownHeader)) {
sb.append("---").append(newline); sb.append("---").append(newline);
sb.append("id: generator-opts-").append(config.getTag().toValue()).append("-").append(config.getName()).append(newline); sb.append("id: generator-opts-").append(config.getTag().toValue()).append("-")
.append(config.getName()).append(newline);
sb.append("title: Config Options for ").append(generatorName).append(newline); sb.append("title: Config Options for ").append(generatorName).append(newline);
sb.append("sidebar_label: ").append(generatorName).append(newline); sb.append("sidebar_label: ").append(generatorName).append(newline);
sb.append("---").append(newline); sb.append("---").append(newline);
@@ -167,7 +214,8 @@ public class ConfigHelp implements Runnable {
for (CliOption langCliOption : config.cliOptions()) { for (CliOption langCliOption : config.cliOptions()) {
sb.append("\t").append(langCliOption.getOpt()); sb.append("\t").append(langCliOption.getOpt());
sb.append(newline); sb.append(newline);
sb.append("\t ").append(langCliOption.getOptionHelp().replaceAll("\n", System.lineSeparator() + "\t ")); sb.append("\t ").append(langCliOption.getOptionHelp()
.replaceAll("\n", System.lineSeparator() + "\t "));
sb.append(newline); sb.append(newline);
sb.append(newline); sb.append(newline);
} }