From 64e1438f84ac92fc7bf4217f94d826450500e5b7 Mon Sep 17 00:00:00 2001 From: Urs Joss Date: Wed, 19 Jun 2024 11:31:44 +0200 Subject: [PATCH] feat: Option to not apply pojos as kotlin data classes (#9) Co-authored-by: Jonathan Cornaz --- .../kotlin/com/optravis/jooq/gradle/Config.kt | 12 ++++++++--- .../com/optravis/jooq/gradle/Generator.kt | 21 ++++++++++--------- .../jooq/gradle/JooqGeneratorPlugin.kt | 19 ++++++----------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/main/kotlin/com/optravis/jooq/gradle/Config.kt b/src/main/kotlin/com/optravis/jooq/gradle/Config.kt index 02cbbdd..f3732f5 100644 --- a/src/main/kotlin/com/optravis/jooq/gradle/Config.kt +++ b/src/main/kotlin/com/optravis/jooq/gradle/Config.kt @@ -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, diff --git a/src/main/kotlin/com/optravis/jooq/gradle/Generator.kt b/src/main/kotlin/com/optravis/jooq/gradle/Generator.kt index 54eaad1..0dafcab 100644 --- a/src/main/kotlin/com/optravis/jooq/gradle/Generator.kt +++ b/src/main/kotlin/com/optravis/jooq/gradle/Generator.kt @@ -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 @@ -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() @@ -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() diff --git a/src/main/kotlin/com/optravis/jooq/gradle/JooqGeneratorPlugin.kt b/src/main/kotlin/com/optravis/jooq/gradle/JooqGeneratorPlugin.kt index feda3d0..10dc5c7 100644 --- a/src/main/kotlin/com/optravis/jooq/gradle/JooqGeneratorPlugin.kt +++ b/src/main/kotlin/com/optravis/jooq/gradle/JooqGeneratorPlugin.kt @@ -23,8 +23,7 @@ public interface JooqGeneratorExtension { public val jooqDbConfig: Property public val migrationDirectory: Property public val packageName: Property - public val deprecateUnknownTypes: Property - public val javaTimeTypes: Property + public val generatorConfig: Property } private object Default { @@ -52,8 +51,7 @@ public class JooqGeneratorPlugin : Plugin { 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) } @@ -71,8 +69,7 @@ public class JooqGeneratorPlugin : Plugin { 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()) } } @@ -92,10 +89,7 @@ private abstract class JooqGenerateTask : DefaultTask() { abstract val packageName: Property @get:Input - abstract val deprecateUnknownTypes: Property - - @get:Input - abstract val javaTimeTypes: Property + abstract val generatorConfig: Property @get:InputDirectory abstract val migrationDirectory: Property @@ -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,