Skip to content

Commit 1afde73

Browse files
committed
feat(config): replace tomlj with jtoml and update TOML parsing logic
- Migrated from `tomlj` to `jtoml` for TOML parsing to address compatibility and functionality enhancements. - Refactored `BigDataExtensionsConfigLoader` to utilize `jtoml` API. - Updated build configuration to replace `tomlj` dependencies with `jtoml`.
1 parent 9b090c1 commit 1afde73

3 files changed

Lines changed: 22 additions & 17 deletions

File tree

extensions/build.gradle.kts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ dependencies {
4646
compileOnly(libs.sparkHive)
4747
compileOnly(libs.servletApi)
4848
implementation(libs.kotlinxSerialization)
49-
implementation(libs.tomlj)
49+
implementation(libs.jtoml)
5050

5151
shadedRuntime(libs.hadoopClientApi)
5252
shadedRuntime(libs.hadoopClientRuntime)
@@ -72,7 +72,7 @@ dependencies {
7272
shadedRuntime(libs.icebergAwsBundle)
7373
shadedRuntime(libs.servletApi)
7474
shadedRuntime(libs.kotlinxSerialization)
75-
shadedRuntime(libs.tomlj)
75+
shadedRuntime(libs.jtoml)
7676

7777
testImplementation(libs.junitJupiterApi)
7878
testImplementation(libs.hadoopClientApi)
@@ -87,6 +87,7 @@ dependencies {
8787
testRuntimeOnly(libs.junitJupiterEngine)
8888
testRuntimeOnly(libs.junitPlatformLauncher)
8989
testRuntimeOnly(libs.slf4jSimple)
90+
testRuntimeOnly(libs.servletApi)
9091
}
9192

9293
val runtimeShadowJar = tasks.named<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar>("shadowJar") {

extensions/src/main/kotlin/org/openprojectx/bigdata/test/extensions/config/BigDataExtensionsConfigLoader.kt

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,13 @@ import org.openprojectx.bigdata.test.extensions.objectstore.ObjectStoreUploadSou
2525
import org.openprojectx.bigdata.test.extensions.objectstore.S3BucketExtension
2626
import org.openprojectx.bigdata.test.extensions.objectstore.S3UploadExtension
2727
import org.openprojectx.bigdata.test.extensions.spark.SparkSqlPreparationExtensionProvider
28-
import org.tomlj.Toml
29-
import org.tomlj.TomlArray
30-
import org.tomlj.TomlTable
28+
import io.ous.jtoml.JToml
3129
import java.math.BigDecimal
3230
import java.time.LocalDate
3331
import java.time.LocalDateTime
3432
import java.time.LocalTime
3533
import java.time.OffsetDateTime
34+
import java.util.Date
3635
import java.util.ServiceLoader
3736

3837
class BigDataExtensionsConfigLoader(
@@ -187,34 +186,39 @@ class BigDataExtensionsConfigLoader(
187186
}
188187

189188
private object TomlConfigParser {
189+
private val trailingArrayComma = Regex(",\\s*]")
190+
190191
fun parse(text: String): JsonObject {
191-
val result = Toml.parse(text)
192-
require(!result.hasErrors()) {
193-
result.errors().joinToString(separator = System.lineSeparator()) { it.toString() }
194-
}
192+
val result = JToml.parseString(text.replace(trailingArrayComma, "\n]"))
195193
return result.toJsonObject()
196194
}
197195

198-
private fun TomlTable.toJsonObject(): JsonObject =
199-
JsonObject(keySet().associateWith { key -> get(key).toJsonElement() })
196+
private fun Map<*, *>.toJsonObject(): JsonObject =
197+
JsonObject(entries.associate { (key, value) ->
198+
require(key is String) { "Unsupported TOML key type: ${key?.javaClass}" }
199+
key to value.toJsonElement()
200+
})
200201

201-
private fun TomlArray.toJsonArray(): JsonArray =
202-
JsonArray((0 until size()).map { index -> get(index).toJsonElement() })
202+
private fun Iterable<*>.toJsonArray(): JsonArray =
203+
JsonArray(map { value -> value.toJsonElement() })
203204

204205
private fun Any?.toJsonElement(): JsonElement =
205206
when (this) {
206207
null -> JsonPrimitive("null")
207208
is String -> JsonPrimitive(this)
208209
is Boolean -> JsonPrimitive(this)
210+
is Int -> JsonPrimitive(this)
209211
is Long -> JsonPrimitive(this)
212+
is Float -> JsonPrimitive(this)
210213
is Double -> JsonPrimitive(this)
211214
is BigDecimal -> JsonPrimitive(this)
212-
is TomlTable -> toJsonObject()
213-
is TomlArray -> toJsonArray()
215+
is Map<*, *> -> toJsonObject()
216+
is Iterable<*> -> toJsonArray()
214217
is OffsetDateTime,
215218
is LocalDateTime,
216219
is LocalDate,
217220
is LocalTime,
221+
is Date,
218222
-> JsonPrimitive(toString())
219223
else -> error("Unsupported TOML value type: ${this::class}")
220224
}

gradle/libs.versions.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ bouncycastle = "1.83"
2929
awsSdk = "2.41.5"
3030
mysqlConnector = "8.4.0"
3131
servletApi = "4.0.1"
32-
tomlj = "1.1.1"
32+
jtoml = "2.0.0"
3333

3434
[libraries]
3535
kotlinGradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
@@ -77,7 +77,7 @@ awsSdkS3 = { module = "software.amazon.awssdk:s3", version.ref = "awsSdk" }
7777
awsSdkS3TransferManager = { module = "software.amazon.awssdk:s3-transfer-manager", version.ref = "awsSdk" }
7878
servletApi = { module = "javax.servlet:javax.servlet-api", version.ref = "servletApi" }
7979
mysqlConnector = { module = "com.mysql:mysql-connector-j", version.ref = "mysqlConnector" }
80-
tomlj = { module = "org.tomlj:tomlj", version.ref = "tomlj" }
80+
jtoml = { module = "io.ous:jtoml", version.ref = "jtoml" }
8181

8282
# Libraries can be bundled together for easier import
8383
[bundles]

0 commit comments

Comments
 (0)