From e3023da0727520129d744607a0c60979b5f21fc1 Mon Sep 17 00:00:00 2001 From: Stewart Stewart Date: Fri, 24 Feb 2017 10:24:48 -0500 Subject: clean up main file --- src/main/scala/Main.scala | 108 +++++++++++++++++++++++++++++++++ src/main/scala/NamespacedCodegen.scala | 100 ------------------------------ src/main/scala/OutputHelpers.scala | 11 ---- 3 files changed, 108 insertions(+), 111 deletions(-) create mode 100644 src/main/scala/Main.scala delete mode 100644 src/main/scala/NamespacedCodegen.scala diff --git a/src/main/scala/Main.scala b/src/main/scala/Main.scala new file mode 100644 index 0000000..55275a3 --- /dev/null +++ b/src/main/scala/Main.scala @@ -0,0 +1,108 @@ +import java.net.URI +import java.nio.file.Paths + +import scala.concurrent.Await +import scala.concurrent.duration.Duration +import scala.concurrent.ExecutionContext.Implicits.global +import slick.backend.DatabaseConfig +import slick.codegen.SourceCodeGenerator +import slick.driver.JdbcProfile + +trait TableFileGenerator { self: SourceCodeGenerator => + def writeTablesToFile(profile: String, + folder: String, + pkg: String, + fileName: String): Unit +} + +trait RowFileGenerator { self: SourceCodeGenerator => + def writeRowsToFile(folder: String, pkg: String, fileName: String): Unit +} + +object Generator { + + private def outputSchemaCode(schemaName: String, + profile: String, + folder: String, + pkg: String, + tableGen: TableFileGenerator, + rowGen: RowFileGenerator): Unit = { + val camelSchemaName = schemaName.split('_').map(_.capitalize).mkString("") + + tableGen.writeTablesToFile(profile: String, + folder: String, + pkg: String, + fileName = s"${camelSchemaName}Tables.scala") + rowGen.writeRowsToFile(folder: String, + pkg: String, + fileName = s"${camelSchemaName}Rows.scala") + } + + def run(uri: URI, + pkg: String, + schemaNames: Option[List[String]], + outputPath: String, + manualForeignKeys: Map[(String, String), (String, String)], + parentType: Option[String], + idType: Option[String], + header: String, + schemaImports: List[String], + typeReplacements: Map[String, String]) = { + val dc: DatabaseConfig[JdbcProfile] = + DatabaseConfig.forURI[JdbcProfile](uri) + val parsedSchemasOpt: Option[Map[String, List[String]]] = + schemaNames.map(SchemaParser.parse) + val imports = schemaImports.map("import " + _).mkString("\n") + + try { + val dbModel: slick.model.Model = Await.result( + dc.db.run(SchemaParser.createModel(dc.driver, parsedSchemasOpt)), + Duration.Inf) + + parsedSchemasOpt.getOrElse(Map.empty).foreach { + case (schemaName, tables) => + val profile = + s"""slick.backend.DatabaseConfig.forConfig[slick.driver.JdbcProfile]("${uri + .getFragment()}").driver""" + + val schemaOnlyModel = Await.result( + dc.db.run( + SchemaParser.createModel(dc.driver, + Some(Map(schemaName -> tables)))), + Duration.Inf) + + val rowGenerator = new RowSourceCodeGenerator( + schemaOnlyModel, + headerComment = header, + imports = imports, + schemaName = schemaName, + dbModel, + idType, + manualForeignKeys, + typeReplacements + ) + + val tableGenerator = + new TableSourceCodeGenerator(schemaOnlyModel = schemaOnlyModel, + headerComment = header, + imports = imports, + schemaName = schemaName, + fullDatabaseModel = dbModel, + pkg = pkg, + manualForeignKeys, + parentType = parentType, + idType, + typeReplacements) + + outputSchemaCode(schemaName = schemaName, + profile = profile, + folder = outputPath, + pkg = pkg, + tableGen = tableGenerator, + rowGen = rowGenerator) + } + } finally { + dc.db.close() + } + } +} diff --git a/src/main/scala/NamespacedCodegen.scala b/src/main/scala/NamespacedCodegen.scala deleted file mode 100644 index 7ae4ac0..0000000 --- a/src/main/scala/NamespacedCodegen.scala +++ /dev/null @@ -1,100 +0,0 @@ -import java.net.URI -import java.nio.file.Paths - -import scala.concurrent.Await -import scala.concurrent.duration.Duration -import scala.concurrent.ExecutionContext.Implicits.global -import slick.backend.DatabaseConfig -import slick.codegen.{SourceCodeGenerator, StringGeneratorHelpers} -import slick.driver.JdbcProfile -import slick.{model => sModel} -import slick.model.{Column, Model, Table, QualifiedName} - -object Generator { - - def outputSchemaCode(schemaName: String, - profile: String, - folder: String, - pkg: String, - tableGen: TableFileGenerator, - rowGen: RowFileGenerator): Unit = { - val camelSchemaName = schemaName.split('_').map(_.capitalize).mkString("") - - tableGen.writeTablesToFile(profile: String, - folder: String, - pkg: String, - fileName = s"${camelSchemaName}Tables.scala") - rowGen.writeRowsToFile(folder: String, - pkg: String, - fileName = s"${camelSchemaName}Rows.scala") - } - - def run(uri: URI, - pkg: String, - schemaNames: Option[List[String]], - outputPath: String, - manualForeignKeys: Map[(String, String), (String, String)], - parentType: Option[String], - idType: Option[String], - header: String, - schemaImports: List[String], - typeReplacements: Map[String, String]) = { - val dc: DatabaseConfig[JdbcProfile] = - DatabaseConfig.forURI[JdbcProfile](uri) - val parsedSchemasOpt: Option[Map[String, List[String]]] = - schemaNames.map(SchemaParser.parse) - val imports = schemaImports.map("import " + _).mkString("\n") - - try { - val dbModel: Model = Await.result( - dc.db.run(SchemaParser.createModel(dc.driver, parsedSchemasOpt)), - Duration.Inf) - - parsedSchemasOpt.getOrElse(Map.empty).foreach { - case (schemaName, tables) => - val profile = - s"""slick.backend.DatabaseConfig.forConfig[slick.driver.JdbcProfile]("${uri - .getFragment()}").driver""" - - val schemaOnlyModel = Await.result( - dc.db.run( - SchemaParser.createModel(dc.driver, - Some(Map(schemaName -> tables)))), - Duration.Inf) - - val rowGenerator = new RowSourceCodeGenerator( - schemaOnlyModel, - headerComment = header, - imports = imports, - schemaName = schemaName, - dbModel, - idType, - manualForeignKeys, - typeReplacements - ) - - val tableGenerator = new TableSourceCodeGenerator( - schemaOnlyModel = schemaOnlyModel, - headerComment = header, - imports = imports, - schemaName = schemaName, - fullDatabaseModel = dbModel, - pkg = pkg, - manualForeignKeys, - parentType = parentType, - idType, - typeReplacements) - - outputSchemaCode( - schemaName = schemaName, - profile = profile, - folder = outputPath, - pkg = pkg, - tableGen = tableGenerator, - rowGen = rowGenerator) - } - } finally { - dc.db.close() - } - } -} diff --git a/src/main/scala/OutputHelpers.scala b/src/main/scala/OutputHelpers.scala index b68af8c..852c2ff 100644 --- a/src/main/scala/OutputHelpers.scala +++ b/src/main/scala/OutputHelpers.scala @@ -1,16 +1,5 @@ import slick.codegen.{SourceCodeGenerator, OutputHelpers} -trait TableFileGenerator { self: SourceCodeGenerator => - def writeTablesToFile(profile: String, - folder: String, - pkg: String, - fileName: String): Unit -} - -trait RowFileGenerator { self: SourceCodeGenerator => - def writeRowsToFile(folder: String, pkg: String, fileName: String): Unit -} - trait TableOutputHelpers extends TableFileGenerator with OutputHelpers { self: SourceCodeGenerator => -- cgit v1.2.3