package org.jumpmind.db.io;
import static org.apache.commons.lang.StringUtils.isNotBlank;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import org.jumpmind.db.model.Column;
import org.jumpmind.db.model.Database;
import org.jumpmind.db.model.ForeignKey;
import org.jumpmind.db.model.Reference;
import org.jumpmind.db.model.Table;
public class DatabaseXmlAsciiDocBuilder {
public static void main(String[] args) throws Exception {
if (args.length == 0) {
System.err.println("Usage: <input_xml_file> <output_asciidoc_file>");
System.exit(-1);
}
Database db = DatabaseXmlUtil.read(new File(args[0]));
PrintWriter out = new PrintWriter(new FileWriter(args[1]));
Table[] tables = db.getTables();
for (Table table : tables) {
out.println("=== " + table.getName().toUpperCase());
out.println();
if (isNotBlank(table.getDescription())) {
out.println(table.getDescription());
}
out.println();
out.print(".");
out.println(table.getName().toUpperCase());
out.println("[cols=\"3,^1,^1,^1,^1,^1,5\"]");
out.println("|===");
out.println();
out.println("|Name|Type|Size|Default|Keys|Not Null|Description");
for (Column column : table.getColumns()) {
out.print("|");
out.print(column.getName().toUpperCase());
out.print("|");
out.print(column.getMappedType());
out.print("|");
out.print(isNotBlank(column.getSize()) ? column.getSize() : " ");
out.print("|");
out.print(isNotBlank(column.getDefaultValue()) ? column.getDefaultValue() : " ");
out.print("|");
if (column.isPrimaryKey()) {
out.print("PK ");
}
ForeignKey[] keys = table.getForeignKeys();
boolean fk = false;
for (ForeignKey foreignKey : keys) {
Reference[] references = foreignKey.getReferences();
for (Reference reference : references) {
if (reference.getLocalColumn().getName().equals(column.getName()) && !fk) {
out.print("FK");
fk = true;
}
}
}
out.print("|");
if (column.isRequired()) {
out.print("X");
}
out.print("|");
out.println(column.getDescription());
}
out.println("|===");
}
out.close();
}
public static String toTitle(String tableName) {
String[] tokens = tableName.split("_");
StringBuilder name = new StringBuilder();
for (String string : tokens) {
name.append(Character.toUpperCase(string.charAt(0)));
name.append(string.substring(1));
name.append(" ");
}
return name.toString();
}
}