From e6bb0f78dbbdc4b3bbb90b262444773f69426e80 Mon Sep 17 00:00:00 2001 From: Martin Visser Date: Wed, 30 Aug 2023 14:38:08 +0200 Subject: [PATCH] Save plugin config during migration --- .../ret/configuration/BasePluginConfig.kt | 24 ++++++++++++------- .../ret/commands/ConfigureProjectCommand.kt | 2 ++ .../ret/commands/PluginConfigureCommand.kt | 2 ++ .../ret/commands/PluginInitializeCommand.kt | 2 ++ 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/ret-core/src/main/kotlin/io/rabobank/ret/configuration/BasePluginConfig.kt b/ret-core/src/main/kotlin/io/rabobank/ret/configuration/BasePluginConfig.kt index c42925f..caf1cf6 100644 --- a/ret-core/src/main/kotlin/io/rabobank/ret/configuration/BasePluginConfig.kt +++ b/ret-core/src/main/kotlin/io/rabobank/ret/configuration/BasePluginConfig.kt @@ -2,6 +2,7 @@ package io.rabobank.ret.configuration import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.module.kotlin.readValue +import io.quarkus.logging.Log import io.rabobank.ret.util.OsUtils import jakarta.annotation.PostConstruct import jakarta.enterprise.context.Dependent @@ -34,6 +35,7 @@ open class BasePluginConfig : Configurable { fun migrateOldConfig() { val keysToMigrate = keysToMigrate() if (keysToMigrate.isNotEmpty()) { + Log.info("Migrating old configuration to plugin specific configuration") keysToMigrate.forEach { (oldKey, newKey) -> val oldValue = retConfig[oldKey] if (oldValue != null) { @@ -43,6 +45,7 @@ open class BasePluginConfig : Configurable { } } + config.save() retConfig.save() } } @@ -57,19 +60,22 @@ open class BasePluginConfig : Configurable { open fun keysToMigrate() = emptyList>() } -class PluginConfig(pluginName: String, objectMapper: ObjectMapper, osUtils: OsUtils) { - private val config: MutableMap +class PluginConfig(pluginName: String, private val objectMapper: ObjectMapper, osUtils: OsUtils) { + private val pluginFile = osUtils.getPluginConfig(pluginName).toFile() + val config = runCatching { objectMapper.readValue>(pluginFile) } + .getOrDefault(emptyMap()) + .toMutableMap() - init { - config = runCatching { objectMapper.readValue>(osUtils.getPluginConfig(pluginName).toFile()) } - .getOrDefault(emptyMap()) - .toMutableMap() + inline operator fun get(key: String): T? { + val value = config[key] + return if (value is T?) value else error("The config value cannot be cast to ${T::class.java}") } - @Suppress("UNCHECKED_CAST") - operator fun get(key: String): T? = config[key] as T? - operator fun set(key: String, value: Any?) { config[key] = value } + + fun save() { + objectMapper.writeValue(pluginFile, config) + } } diff --git a/ret-plugin/src/main/kotlin/io/rabobank/ret/commands/ConfigureProjectCommand.kt b/ret-plugin/src/main/kotlin/io/rabobank/ret/commands/ConfigureProjectCommand.kt index cb2ec09..33cbef6 100644 --- a/ret-plugin/src/main/kotlin/io/rabobank/ret/commands/ConfigureProjectCommand.kt +++ b/ret-plugin/src/main/kotlin/io/rabobank/ret/commands/ConfigureProjectCommand.kt @@ -3,6 +3,7 @@ package io.rabobank.ret.commands import io.quarkus.runtime.annotations.RegisterForReflection import io.rabobank.ret.RetContext import io.rabobank.ret.configuration.RetConfig +import io.rabobank.ret.util.Logged import picocli.CommandLine.Command import picocli.CommandLine.Model.CommandSpec import picocli.CommandLine.Spec @@ -13,6 +14,7 @@ import java.io.File hidden = true, ) @RegisterForReflection(targets = [RetContext::class]) +@Logged class ConfigureProjectCommand( private val retConfig: RetConfig, ) : Runnable { diff --git a/ret-plugin/src/main/kotlin/io/rabobank/ret/commands/PluginConfigureCommand.kt b/ret-plugin/src/main/kotlin/io/rabobank/ret/commands/PluginConfigureCommand.kt index 7bda658..0a6c74f 100644 --- a/ret-plugin/src/main/kotlin/io/rabobank/ret/commands/PluginConfigureCommand.kt +++ b/ret-plugin/src/main/kotlin/io/rabobank/ret/commands/PluginConfigureCommand.kt @@ -6,6 +6,7 @@ import io.quarkus.logging.Log import io.rabobank.ret.RetConsole import io.rabobank.ret.configuration.Config import io.rabobank.ret.configuration.ConfigurationProperty +import io.rabobank.ret.util.Logged import picocli.CommandLine.Command import picocli.CommandLine.Model.CommandSpec import picocli.CommandLine.Spec @@ -23,6 +24,7 @@ import picocli.CommandLine.Spec ConfigureProjectCommand::class, ], ) +@Logged class PluginConfigureCommand( private val config: Config, private val retConsole: RetConsole, diff --git a/ret-plugin/src/main/kotlin/io/rabobank/ret/commands/PluginInitializeCommand.kt b/ret-plugin/src/main/kotlin/io/rabobank/ret/commands/PluginInitializeCommand.kt index 37a63d0..a9931d5 100644 --- a/ret-plugin/src/main/kotlin/io/rabobank/ret/commands/PluginInitializeCommand.kt +++ b/ret-plugin/src/main/kotlin/io/rabobank/ret/commands/PluginInitializeCommand.kt @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper import io.quarkus.logging.Log import io.rabobank.ret.RetConsole import io.rabobank.ret.util.IntrospectionUtil +import io.rabobank.ret.util.Logged import io.rabobank.ret.util.OsUtils import picocli.CommandLine.Command import picocli.CommandLine.Model.CommandSpec @@ -23,6 +24,7 @@ import kotlin.io.path.createDirectories name = "initialize", hidden = true, ) +@Logged class PluginInitializeCommand( private val retConsole: RetConsole, private val objectMapper: ObjectMapper,