package com.w11k.lsql.schemaexporter; import com.w11k.lsql.LSql; import com.w11k.lsql.Table; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.net.URISyntaxException; import java.net.URL; public class SchemaExporter { private final Logger logger = LoggerFactory.getLogger(getClass()); public static File pathRelativeToProjectRoot(String fileInProjectRoot, String folderRelativeToProjectRoot) { try { URL resource = SchemaExporter.class.getResource("/"); File folder = new File(resource.toURI()); while (folder != null) { File maybeFile = new File(folder, fileInProjectRoot); if (maybeFile.exists()) { return new File(folder, folderRelativeToProjectRoot); } folder = folder.getParentFile(); } } catch (URISyntaxException e) { throw new RuntimeException(e); } throw new IllegalArgumentException("No parent folder with file '" + fileInProjectRoot + "' found"); } private final LSql lSql; private File outputDir = null; private String packageName; public SchemaExporter(LSql lSql) { this.lSql = lSql; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } public File getOutputDir() { return outputDir; } public void setOutputPath(File outputDir) { this.outputDir = outputDir; } @SuppressWarnings("ResultOfMethodCallIgnored") public void export() { String packageFolder = this.packageName.replaceAll("\\.", File.separator); File packageFolderFile = new File(this.outputDir, packageFolder); packageFolderFile.mkdirs(); assert packageFolderFile.isDirectory(); assert packageFolderFile.exists(); for (Table table : this.lSql.getTables()) { logger.info("Generating POJO for table '" + table.getSchemaAndTableName() + "'"); new TableExporter(table, this, packageFolderFile).export(); } } }