Skip to content

Commit

Permalink
feat: Option to not apply pojos as kotlin data classes (#9)
Browse files Browse the repository at this point in the history
Co-authored-by: Jonathan Cornaz <jonathan.cornaz@gmail.com>
  • Loading branch information
ursjoss and jcornaz authored Jun 19, 2024
1 parent bf4b580 commit 64e1438
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 26 deletions.
12 changes: 9 additions & 3 deletions src/main/kotlin/com/optravis/jooq/gradle/Config.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,22 @@ import java.io.Serializable
public annotation class ExperimentalJooqGeneratorConfig

@OptIn(ExperimentalJooqGeneratorConfig::class)
internal data class JooqGeneratorConfig(
internal data class JooqRootConfig(
val container: ContainerConfig,
val connection: DbConnectionConfig,
val database: JooqDatabaseConfig,
val generator: JooqGeneratorConfig,
val migrationDirectory: File,
val target: JooqTargetConfig,
val deprecateUnknownTypes: Boolean,
val javaTimeTypes: Boolean,
)

@ExperimentalJooqGeneratorConfig
public data class JooqGeneratorConfig(
internal val deprecateUnknownTypes: Boolean = true,
internal val javaTimeTypes: Boolean = true,
internal val kotlinPojos: Boolean = true,
) : Serializable

@ExperimentalJooqGeneratorConfig
public data class ContainerConfig(
internal val image: String,
Expand Down
21 changes: 11 additions & 10 deletions src/main/kotlin/com/optravis/jooq/gradle/Generator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import org.testcontainers.containers.wait.strategy.Wait
import org.testcontainers.utility.DockerImageName


internal fun JooqGeneratorConfig.generate() {
internal fun JooqRootConfig.generate() {
container.run { port ->
val jdbcUrl = connection.makeUrl(port)
var attempts = 0
Expand All @@ -43,7 +43,7 @@ private fun DbConnectionConfig.isReady(jdbcUrl: String): Boolean {
return runCatching { HikariDataSource(config).connection.close() }.isSuccess
}

private fun JooqGeneratorConfig.toConfiguration(jdbcUrl: String) =
private fun JooqRootConfig.toConfiguration(jdbcUrl: String) =
Configuration()
.withJdbc(
Jdbc()
Expand All @@ -64,14 +64,15 @@ private fun JooqGeneratorConfig.toConfiguration(jdbcUrl: String) =
.withGenerate(
Generate()
.withDaos(true)
.withDeprecationOnUnknownTypes(deprecateUnknownTypes)
.withPojosAsKotlinDataClasses(true)
.withKotlinDefaultedNullablePojoAttributes(true)
.withKotlinDefaultedNullableRecordAttributes(true)
.withKotlinNotNullPojoAttributes(true)
.withKotlinNotNullInterfaceAttributes(true)
.withKotlinNotNullRecordAttributes(true)
.withJavaTimeTypes(javaTimeTypes)
.withDeprecationOnUnknownTypes(generator.deprecateUnknownTypes)
.withPojos(!generator.kotlinPojos)
.withPojosAsKotlinDataClasses(generator.kotlinPojos)
.withKotlinDefaultedNullablePojoAttributes(generator.kotlinPojos)
.withKotlinDefaultedNullableRecordAttributes(generator.kotlinPojos)
.withKotlinNotNullPojoAttributes(generator.kotlinPojos)
.withKotlinNotNullInterfaceAttributes(generator.kotlinPojos)
.withKotlinNotNullRecordAttributes(generator.kotlinPojos)
.withJavaTimeTypes(generator.javaTimeTypes)
)
.withTarget(
Target()
Expand Down
19 changes: 6 additions & 13 deletions src/main/kotlin/com/optravis/jooq/gradle/JooqGeneratorPlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ public interface JooqGeneratorExtension {
public val jooqDbConfig: Property<JooqDatabaseConfig>
public val migrationDirectory: Property<File>
public val packageName: Property<String>
public val deprecateUnknownTypes: Property<Boolean>
public val javaTimeTypes: Property<Boolean>
public val generatorConfig: Property<JooqGeneratorConfig>
}

private object Default {
Expand Down Expand Up @@ -52,8 +51,7 @@ public class JooqGeneratorPlugin : Plugin<Project> {
connectionConfig.convention(ext.connectionConfig)
jooqDbConfig.convention(ext.jooqDbConfig)
migrationDirectory.convention(ext.migrationDirectory)
deprecateUnknownTypes.convention(ext.deprecateUnknownTypes)
javaTimeTypes.convention(ext.javaTimeTypes)
generatorConfig.convention(ext.generatorConfig)
packageName.convention(ext.packageName.orElse("${project.group}.jooq"))
}
"compileJava" { dependsOn(generateTask) }
Expand All @@ -71,8 +69,7 @@ public class JooqGeneratorPlugin : Plugin<Project> {
connectionConfig.convention(DbConnectionConfig.postgres(Default.DB, Default.USER, Default.PASSWORD))
jooqDbConfig.convention(JooqDatabaseConfig.postgres())
migrationDirectory.convention(File("${project.layout.projectDirectory}/src/main/resources/db/migration"))
deprecateUnknownTypes.convention(true)
javaTimeTypes.convention(true)
generatorConfig.convention(JooqGeneratorConfig())
}
}

Expand All @@ -92,10 +89,7 @@ private abstract class JooqGenerateTask : DefaultTask() {
abstract val packageName: Property<String>

@get:Input
abstract val deprecateUnknownTypes: Property<Boolean>

@get:Input
abstract val javaTimeTypes: Property<Boolean>
abstract val generatorConfig: Property<JooqGeneratorConfig>

@get:InputDirectory
abstract val migrationDirectory: Property<File>
Expand All @@ -110,13 +104,12 @@ private abstract class JooqGenerateTask : DefaultTask() {
.generate()
}

private fun config(): JooqGeneratorConfig = JooqGeneratorConfig(
private fun config(): JooqRootConfig = JooqRootConfig(
container = containerConfig.get(),
connection = connectionConfig.get(),
database = jooqDbConfig.get(),
migrationDirectory = migrationDirectory.get(),
deprecateUnknownTypes = deprecateUnknownTypes.get(),
javaTimeTypes = javaTimeTypes.get(),
generator = generatorConfig.get(),
target = JooqTargetConfig(
packageName = packageName.get(),
directory = outputDirectory,
Expand Down

0 comments on commit 64e1438

Please # to comment.