package com.w11k.lsql.schemaexporter; import com.google.common.io.Files; import com.w11k.lsql.Column; import com.w11k.lsql.Table; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.util.Map; public class TableExporter { private final Table table; private final SchemaExporter schemaExporter; private final File packageFolderFile; public TableExporter(Table table, SchemaExporter schemaExporter, File packageFolderFile) { this.table = table; this.schemaExporter = schemaExporter; this.packageFolderFile = packageFolderFile; } public void export() { StringBuilder sb = new StringBuilder(); sb.append("package ").append(this.schemaExporter.getPackageName()).append(";\n\n"); sb.append("public class ").append(nameToIdentifier(this.table.getSchemaAndTableName())).append(" {\n\n"); // Field instances for (Map.Entry<String, Column> entry : this.table.getColumns().entrySet()) { Class<?> javaType = entry.getValue().getConverter().getJavaType(); sb.append(" "); sb.append(javaType.getCanonicalName()).append(" ").append(entry.getKey()).append(";\n"); } sb.append("\n"); // Getter/setter for (Map.Entry<String, Column> entry : this.table.getColumns().entrySet()) { generateGetterSetter(sb, entry); } sb.append("}\n"); File pojoSourceFile = getPojoSourceFile(); try { Files.write(sb, pojoSourceFile, Charset.forName("UTF-8")); } catch (IOException e) { throw new RuntimeException(e); } } private File getPojoSourceFile() { return new File(this.packageFolderFile, nameToIdentifier(this.table.getSchemaAndTableName()) + ".java"); } private void generateGetterSetter(StringBuilder sb, Map.Entry<String, Column> entry) { // Getter sb.append(" public "); sb.append(entry.getValue().getConverter().getJavaType().getCanonicalName()); sb.append(" "); boolean isBool = Boolean.class.isAssignableFrom(entry.getValue().getConverter().getJavaType()); String prefix = isBool ? "is" : "get"; sb.append(prefix).append(nameToIdentifier(entry.getKey())).append("() {\n"); sb.append(" return this.").append(entry.getKey()).append(";\n"); sb.append(" }\n\n"); // Setter sb.append(" public void "); sb.append("set").append(nameToIdentifier(entry.getKey())).append("("); sb.append(entry.getValue().getConverter().getJavaType().getCanonicalName()); sb.append(" ").append(entry.getKey()); sb.append(") {\n"); sb.append(" this.").append(entry.getKey()).append(" = "); sb.append(entry.getKey()).append(";\n"); sb.append(" }\n\n"); } protected String nameToIdentifier(String name) { return name.substring(0, 1).toUpperCase() + name.substring(1); } }