package org.stagemonitor; import java.io.IOException; import java.util.Collection; import java.util.List; import java.util.Map; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.stagemonitor.core.StagemonitorPlugin; import org.stagemonitor.configuration.ConfigurationRegistry; import org.stagemonitor.configuration.ConfigurationOption; import org.stagemonitor.util.StringUtils; public class ConfigurationOptionsMarkdownExporter { private ConfigurationOptionsMarkdownExporter() { } public static void main(String[] args) throws IOException { StringBuilder markdown = new StringBuilder(); final Map<String, List<ConfigurationOption<?>>> configurationOptionsByPlugin = new ConfigurationRegistry(StagemonitorPlugin.class).getConfigurationOptionsByCategory(); MultiValueMap<String, ConfigurationOption<?>> configurationOptionsByTags = new LinkedMultiValueMap<>(); configurationOptionsByPlugin.values() .stream() .flatMap(Collection::stream) .filter(opt -> !opt.getTags().isEmpty()) .forEach(opt -> opt.getTags() .forEach(tag -> configurationOptionsByTags.add(tag, opt))); markdown.append("# Overview\n"); markdown.append("## All Plugins\n"); for (String plugin : configurationOptionsByPlugin.keySet()) { markdown.append("* ").append(linkToHeadline(plugin)).append('\n'); } markdown.append("\n"); markdown.append("## Available Tags\n"); for (String tag : configurationOptionsByTags.keySet()) { markdown.append("`").append(tag).append("` "); } markdown.append("\n"); markdown.append("# Options by Plugin\n"); for (Map.Entry<String, List<ConfigurationOption<?>>> entry : configurationOptionsByPlugin.entrySet()) { final String pluginName = entry.getKey(); markdown.append("* ").append(linkToHeadline(pluginName)).append('\n'); for (ConfigurationOption<?> option : entry.getValue()) { markdown.append(" * ").append(linkToHeadline(option.getLabel())).append('\n'); } } markdown.append("\n"); markdown.append("# Options by Tag\n"); markdown.append("\n"); for (Map.Entry<String, List<ConfigurationOption<?>>> entry : configurationOptionsByTags.entrySet()) { markdown.append("* `").append(entry.getKey()).append("` \n"); for (ConfigurationOption<?> option : entry.getValue()) { markdown.append(" * ").append(linkToHeadline(option.getLabel())).append('\n'); }} markdown.append("\n"); for (Map.Entry<String, List<ConfigurationOption<?>>> entry : configurationOptionsByPlugin.entrySet()) { markdown.append("# ").append(entry.getKey()).append("\n\n"); for (ConfigurationOption<?> configurationOption : entry.getValue()) { markdown.append("## ").append(configurationOption.getLabel()).append("\n\n"); markdown.append(configurationOption.getDescription()).append("\n\n"); markdown.append("Key: `").append(configurationOption.getKey()).append("`\n\n"); markdown.append("Default Value: "); markdown.append('`').append(configurationOption.getDefaultValueAsString()).append("`\n\n"); if (!configurationOption.getTags().isEmpty()) { markdown.append("Tags: "); for (String tag : configurationOption.getTags()) { markdown.append('`').append(tag).append("` "); } markdown.append("\n\n"); } } markdown.append("***\n\n"); } System.out.println(markdown); } private static String linkToHeadline(String headline) { return "[" + headline + "](#" + StringUtils.slugify(headline) + ')'; } }