protected int calculateMaxWidth(IOption option, Column column) { final String string = extractValue(column, option); return calculateMaxWidth(column, string); }
@Test public void generateUsageCSV() throws IOException { new File(CSV_FILE).getParentFile().mkdirs(); try (final PrintStream output = new PrintStream(new FileOutputStream(CSV_FILE))) { generateUsage("\"", "\",\"", "\"", new EnumMap<>(Column.class), output, getSections(configManager)); // TODO(mblow): add some validation (in addition to just ensuring no exceptions...) } }
public void generateUsage(String startDelim, String midDelim, String endDelim, EnumMap<Column, Boolean> align, PrintStream output, Section... sections) { ConfigManager configManager = getConfigManager(); StringBuilder buf = new StringBuilder(); for (Section section : getSections(configManager)) { for (IOption option : getSectionOptions(configManager, section)) { for (Column column : columns) { if (align.computeIfAbsent(column, c -> false)) { calculateMaxWidth(option, column); pad(buf, getColumnDisplayFunction().apply(column), align.computeIfAbsent(column, c -> false) ? calculateMaxWidth(column, column.name()) : 0); for (Column column : columns) { sepLine.append(column.ordinal() == 0 ? startDelim : midDelim); pad(sepLine, "", maxWidths.getOrDefault(column, 0), '-'); options.addAll(getSectionOptions(configManager, section)); options.sort(Comparator.comparing(getIOptionNameDisplayFunction())); for (IOption option : options) { for (Column column : columns) { buf.append(column.ordinal() == 0 ? startDelim : midDelim); if (column == Column.SECTION) { center(buf, extractValue(column, option), maxWidths.getOrDefault(column, 0)); } else { pad(buf, extractValue(column, option), maxWidths.getOrDefault(column, 0));
private String extractValue(Column column, IOption option) { switch (column) { case SECTION: return getSectionDisplayFunction().apply(option.section()); case PARAMETER: return getIOptionNameDisplayFunction().apply(option); case DESCRIPTION: return option.description() == null ? "N/A" : option.description(); case DEFAULT: return configManager.defaultTextForUsage(option, getIOptionNameDisplayFunction()); default: throw new IllegalStateException(String.valueOf(column)); } }
protected void generateUsage(Section... sections) { final EnumMap<Column, Boolean> align = new EnumMap<>(Column.class); align.put(Column.SECTION, true); align.put(Column.PARAMETER, true); System.err.println(); generateUsage("| ", " | ", " |", align, System.err, sections); }
@Before public void setup() { configManager = getConfigManager(); }
@Test public void generateNcUsage() { generateUsage(Section.NC); }
@Test public void generateCommonUsage() { generateUsage(Section.COMMON); }
@Test public void generateCcUsage() { generateUsage(Section.CC); }