diff --git a/libraries/httpClient/src/main/kotlin/de/itkl/httpClient/clients/XsClient.kt b/libraries/httpClient/src/main/kotlin/de/itkl/httpClient/clients/XsClient.kt index 3be1cf5..25e5c4e 100644 --- a/libraries/httpClient/src/main/kotlin/de/itkl/httpClient/clients/XsClient.kt +++ b/libraries/httpClient/src/main/kotlin/de/itkl/httpClient/clients/XsClient.kt @@ -29,6 +29,7 @@ private val Log = KotlinLogging.logger { } class XsClient : KoinComponent { private val httpClient by inject() + suspend fun waitFor(task: XsTask): WaitForResponse { Log.info { "Wait for competition: $task" } val response = httpClient.get { diff --git a/libraries/xtractionstudio/build.gradle.kts b/libraries/xtractionstudio/build.gradle.kts new file mode 100644 index 0000000..6af9f15 --- /dev/null +++ b/libraries/xtractionstudio/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + kotlin("plugin.serialization") version embeddedKotlinVersion +} + +dependencies { + implementation("com.akuleshov7:ktoml-core:0.5.1") + implementation("com.akuleshov7:ktoml-file:0.5.1") +} \ No newline at end of file diff --git a/libraries/xtractionstudio/src/main/kotlin/de/itkl/xtractionstudio/XsEnvironment.kt b/libraries/xtractionstudio/src/main/kotlin/de/itkl/xtractionstudio/XsEnvironment.kt new file mode 100644 index 0000000..d698814 --- /dev/null +++ b/libraries/xtractionstudio/src/main/kotlin/de/itkl/xtractionstudio/XsEnvironment.kt @@ -0,0 +1,77 @@ +package de.itkl.xtractionstudio + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json + +data class XsEnvironment( + val http: Http, + val data: Data, + val build: Build, + @SerialName("xs") + val xs: XS, + val env: Map, + val credentials: Map +) { + + + @Serializable + data class Build( + val worker: String + ) + + + @Serializable + data class Http( + val proxy: String, + @SerialName("request-timeout") + val requestTimeout: String + ) + + @Serializable + data class Data( + @SerialName("corpus-dir") + val corpusDir: String + ) + + @Serializable + data class XS( + @SerialName("concurrency_limit") + val concurrencyLimit: Int + ) + + @Serializable + data class Environment( + @SerialName("user") + val user: String, + @SerialName("backend-url") + val backendUrl: String + ) + + @Serializable + data class Credentials( + val login: String, + val password: String + ) +} + +@Serializable +data class XsEnvironmentInternal( + val http: XsEnvironment.Http, + val data: XsEnvironment.Data, + val build: XsEnvironment.Build, + @SerialName("xs") + val xs: XsEnvironment.XS, + val env: Map>, + val credentials: Map> +) { + + val environmentNames get() = env.keys + fun environment(name: String): XsEnvironment.Environment? { + return env[name]?.let { + val json = Json.encodeToString(it) + Json.decodeFromString(json) + } + } +} diff --git a/libraries/xtractionstudio/src/main/kotlin/de/itkl/xtractionstudio/XsEnvironmentTomlProvider.kt b/libraries/xtractionstudio/src/main/kotlin/de/itkl/xtractionstudio/XsEnvironmentTomlProvider.kt new file mode 100644 index 0000000..e4b54a7 --- /dev/null +++ b/libraries/xtractionstudio/src/main/kotlin/de/itkl/xtractionstudio/XsEnvironmentTomlProvider.kt @@ -0,0 +1,29 @@ +package de.itkl.xtractionstudio + +import com.akuleshov7.ktoml.file.TomlFileReader +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import java.nio.file.Path + +class XsEnvironmentTomlProvider(private val path: Path) { + fun environment(): XsEnvironment { + val result = TomlFileReader.decodeFromFile(XsEnvironmentInternal.serializer(), path.toAbsolutePath().toString()) + return XsEnvironment( + http = result.http, + data = result.data, + build = result.build, + xs = result.xs, + env = result.env.mapValues { (_, value) -> + mapToObject(XsEnvironment.Environment.serializer(), value) + }, + credentials = result.credentials.mapValues { (_, value) -> + mapToObject(XsEnvironment.Credentials.serializer(), value) + } + ) + } + private fun mapToObject(deserializationStrategy: DeserializationStrategy, map: Map): T { + val json = Json.encodeToString(map) + return Json.decodeFromString(deserializationStrategy, json) + } +} \ No newline at end of file diff --git a/libraries/xtractionstudio/src/test/kotlin/de/itkl/xtractionstudio/XsEnvironmentTomlProviderTest.kt b/libraries/xtractionstudio/src/test/kotlin/de/itkl/xtractionstudio/XsEnvironmentTomlProviderTest.kt new file mode 100644 index 0000000..adc8cbd --- /dev/null +++ b/libraries/xtractionstudio/src/test/kotlin/de/itkl/xtractionstudio/XsEnvironmentTomlProviderTest.kt @@ -0,0 +1,13 @@ +package de.itkl.xtractionstudio + +import org.junit.jupiter.api.Test +import java.nio.file.Paths + +class XsEnvironmentTomlProviderTest { + @Test + fun `can parse the toml`() { + val tomlPath = Paths.get("../../assets/environments.toml") + val environment = XsEnvironmentTomlProvider(tomlPath).environment() + println(environment) + } +} \ No newline at end of file