package com.netflix.governator.configuration; import java.io.PrintWriter; import java.util.Map; import org.slf4j.Logger; import com.google.common.collect.Maps; import com.google.inject.Inject; import com.netflix.governator.configuration.ConfigurationDocumentation.Entry; /** * Simple implementation of a configuration writer that outputs in column format * * @author elandau * */ public class ConfigurationColumnWriter { private final ConfigurationDocumentation config; @Inject public ConfigurationColumnWriter(ConfigurationDocumentation config) { this.config = config; } /** * Write the documentation table to a logger * @param log */ public void output(Logger log) { Map<String, Entry> entries = config.getSortedEntries(); if ( entries.isEmpty() ) { return; } ColumnPrinter printer = build(entries); log.debug("Configuration Details"); for ( String line : printer.generate() ) { log.debug(line); } } /** * Write the documentation table to System.out */ public void output() { output(new PrintWriter(System.out)); } /** * Output documentation table to a PrintWriter * * @param out */ public void output(PrintWriter out) { Map<String, Entry> entries = config.getSortedEntries(); if ( entries.isEmpty() ) { return; } ColumnPrinter printer = build(entries); out.println("Configuration Details"); printer.print(out); } /** * Construct a ColumnPrinter using the entries * * @param entries * @return */ private ColumnPrinter build(Map<String, Entry> entries) { ColumnPrinter printer = new ColumnPrinter(); printer.addColumn("PROPERTY"); printer.addColumn("FIELD"); printer.addColumn("DEFAULT"); printer.addColumn("VALUE"); printer.addColumn("DESCRIPTION"); Map<String, Entry> sortedEntries = Maps.newTreeMap(); sortedEntries.putAll(entries); for ( Entry entry : sortedEntries.values() ) { printer.addValue(0, entry.configurationName); printer.addValue(1, entry.field.getDeclaringClass().getName() + "#" + entry.field.getName()); printer.addValue(2, entry.defaultValue); printer.addValue(3, entry.has ? entry.value : ""); printer.addValue(4, entry.documentation); } return printer; } }