Packages

class SourceCodeGenerator extends AbstractSourceCodeGenerator with OutputHelpers

A customizable code generator for working with Slick.

For usage information please see the corresponding part of the Slick documentation.

The implementation is structured into a small hierarchy of sub-generators responsible for different fragments of the complete output. The implementation of each sub-generator can be swapped out for a customized one by overriding the corresponding factory method. SourceCodeGenerator contains a factory method Table, which it uses to generate a sub-generator for each table. The sub-generator Table in turn contains sub-generators for Table classes, entity case classes, columns, key, indices, etc. Custom sub-generators can easily be added as well.

Within the sub-generators the relevant part of the Slick data model can be accessed to drive the code generation.

Of coures it makes sense to integrate this into your build process.

Source
SourceCodeGenerator.scala
Linear Supertypes
OutputHelpers, AbstractSourceCodeGenerator, StringGeneratorHelpers, AbstractGenerator[String, String, String], GeneratorHelpers[String, String, String], AnyRef, Any
Type Hierarchy
Ordering
  1. Grouped
  2. Alphabetic
  3. By Inheritance
Inherited
  1. SourceCodeGenerator
  2. OutputHelpers
  3. AbstractSourceCodeGenerator
  4. StringGeneratorHelpers
  5. AbstractGenerator
  6. GeneratorHelpers
  7. AnyRef
  8. Any
Implicitly
  1. by StringFormat
  2. by Ensuring
  3. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Basic customization overrides

  1. abstract case class AbstractTableDef(model: model.Table) extends Product with Serializable

    Code generator for table related code

    Code generator for table related code

    model

    corresponding Slick meta model component

    Definition Classes
    AbstractGenerator
  1. def Table: (model.Table) => Table

    Table generator factory.

    Table generator factory. Override for customization.

    Definition Classes
    SourceCodeGeneratorAbstractGenerator
  2. def code: String

    Generates code for the complete model (not wrapped in a package yet)

    Generates code for the complete model (not wrapped in a package yet)

    Definition Classes
    AbstractSourceCodeGenerator
  3. def codeForContainer: String

    Generates code for the container class (not wrapped in a package yet)

    Generates code for the container class (not wrapped in a package yet)

    Definition Classes
    AbstractSourceCodeGenerator
  4. def codeForDDL: String

    Generates code for the DDL statement.

    Generates code for the DDL statement.

    Definition Classes
    AbstractSourceCodeGenerator
  5. def codePerTable: Map[String, String]

    Generates a map that associates the table name with its generated code (not wrapped in a package yet).

    Generates a map that associates the table name with its generated code (not wrapped in a package yet).

    Definition Classes
    AbstractSourceCodeGenerator
  6. def entityName: (String) => String

    Maps database table name to entity case class name

    Maps database table name to entity case class name

    Definition Classes
    AbstractGenerator
  7. def packageCode(profile: String, pkg: String, container: String, parentType: Option[String]): String

    Generates code providing the data model as trait and object in a Scala package

    Generates code providing the data model as trait and object in a Scala package

    profile

    Slick profile that is imported in the generated package (e.g. slick.jdbc.H2Profile)

    pkg

    Scala package the generated code is placed in

    container

    The name of a trait and an object the generated code will be placed in within the specified package.

    Definition Classes
    OutputHelpers
  8. def packageContainerCode(profile: String, pkg: String, container: String = "Tables"): String

    Generates code providing the stand-alone slick data model for immediate use.

    Generates code providing the stand-alone slick data model for immediate use.

    profile

    Slick profile that is imported in the generated package (e.g. scala.slick.driver.H2Driver)

    pkg

    Scala package the generated code is placed in

    container

    The name of a trait and an object the generated code will be placed in within the specified package.

    Definition Classes
    OutputHelpers
  9. def packageTableCode(tableName: String, tableCode: String, pkg: String, container: String): String

    Generates code for the given table.

    Generates code for the given table. The tableName and tableCode parameters should come from the #codePerTable map.

    tableName

    : the name of the table

    tableCode

    : the generated code for the table.

    pkg

    Scala package the generated code is placed in

    container

    The name of the container

    Definition Classes
    OutputHelpers
  10. def tableName: (String) => String

    Maps database table name to Table class and value name

    Maps database table name to Table class and value name

    Definition Classes
    AbstractGenerator

Output

  1. def writeStringToFile(content: String, folder: String, pkg: String, fileName: String): Unit

    Writes given content to a file.

    Writes given content to a file. Ensures the file ends with a newline character.

    Definition Classes
    OutputHelpers
  2. def writeToFile(profile: String, folder: String, pkg: String, container: String = "Tables", fileName: String = "Tables.scala"): Unit

    Generates code and writes it to a file.

    Generates code and writes it to a file. Creates a folder structure for the given package inside the given srcFolder and places the new file inside or overrides the existing one.

    profile

    Slick profile that is imported in the generated package (e.g. slick.jdbc.H2Profile)

    folder

    target folder, in which the package structure folders are placed

    pkg

    Scala package the generated code is placed in (a subfolder structure will be created within srcFolder)

    container

    The name of a trait and an object the generated code will be placed in within the specified package.

    fileName

    Name of the output file, to which the code will be written

    Definition Classes
    OutputHelpers
  3. def writeToMultipleFiles(profile: String, folder: String, pkg: String, container: String = "Tables"): Unit

    Generates code and writes it to multiple files.

    Generates code and writes it to multiple files. Creates a folder structure for the given package inside the given srcFolder and places the new files inside or overrides the existing one.

    profile

    Slick profile that is imported in the generated package (e.g. scala.slick.driver.H2Driver)

    folder

    target folder, in which the output files are placed

    pkg

    Scala package the generated code is placed in (a subfolder structure will be created within srcFolder)

    container

    The name of a trait and an object the generated code will be placed in within the specified package.

    Definition Classes
    OutputHelpers

Ungrouped

  1. abstract class AbstractSourceCodeTableDef extends AbstractTableDef
    Definition Classes
    AbstractSourceCodeGenerator
  2. implicit class StringExtensions extends AnyRef

    Slick code generator string extension methods.

    Slick code generator string extension methods. (Warning: Not unicode-safe, uses String#apply)

    Definition Classes
    GeneratorHelpers
  3. class SourceCodeTableDef extends AbstractSourceCodeTableDef
  4. type Table = SourceCodeTableDef

    Table generator virtual class

    Table generator virtual class

    Definition Classes
    SourceCodeGeneratorAbstractGenerator
  1. val ddlEnabled: Boolean

    Enables DDL Generation.

    Enables DDL Generation.

    Definition Classes
    AbstractGenerator
  2. def docWithCode(doc: String, code: String): String

    Assemble doc comment with scala code

    Assemble doc comment with scala code

    Definition Classes
    StringGeneratorHelpersGeneratorHelpers
  3. def foreignKeysPerTable: Map[String, List[String]]
    Definition Classes
    AbstractSourceCodeGenerator
  4. def indent(code: String): String
    Definition Classes
    GeneratorHelpers
  5. final def optionType(t: String): String

    Wrap the given type into an Option type

    Wrap the given type into an Option type

    Definition Classes
    StringGeneratorHelpersGeneratorHelpers
  6. def parentType: Option[String]

    The parent type of the generated main trait.

    The parent type of the generated main trait. This can be overridden in subclasses.

    Definition Classes
    OutputHelpers
  7. def parseType(tpe: String): String

    Generates code for a qualified Scala type

    Generates code for a qualified Scala type

    Definition Classes
    StringGeneratorHelpersGeneratorHelpers
  8. def rootTraitCode(profile: String, pkg: String, container: String = "Tables"): String
    Definition Classes
    OutputHelpers
  9. val scalaKeywords: Seq[String]

    Words that are reserved keywords in Scala

    Words that are reserved keywords in Scala

    Definition Classes
    GeneratorHelpers
  10. def shouldQuoteIdentifier(s: String): Boolean
    Definition Classes
    StringGeneratorHelpers
  11. val slickTableTermMembersNoArgs: Seq[String]

    Existing term member names in Table[_] that do not take parameters

    Existing term member names in Table[_] that do not take parameters

    Definition Classes
    GeneratorHelpers
  12. final lazy val tables: Seq[Table]

    Table code generators.

    Table code generators.

    Definition Classes
    AbstractGenerator
  13. final lazy val tablesByName: Map[QualifiedName, Table]

    Table code generators indexed by db table name.

    Table code generators indexed by db table name.

    Definition Classes
    AbstractGenerator
  14. def termName(name: String): String

    Marks a String as a TermName (e.g.

    Marks a String as a TermName (e.g. for escaping scala keywords)

    Definition Classes
    StringGeneratorHelpersGeneratorHelpers
  15. def typeName(name: String): String

    Marks a String as a TypeName (e.g.

    Marks a String as a TypeName (e.g. for escaping scala keywords)

    Definition Classes
    StringGeneratorHelpersGeneratorHelpers