aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/com/romangraef/jrconfig/Config.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/com/romangraef/jrconfig/Config.kt')
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/Config.kt35
1 files changed, 25 insertions, 10 deletions
diff --git a/src/main/kotlin/com/romangraef/jrconfig/Config.kt b/src/main/kotlin/com/romangraef/jrconfig/Config.kt
index 7641689..47b8bae 100644
--- a/src/main/kotlin/com/romangraef/jrconfig/Config.kt
+++ b/src/main/kotlin/com/romangraef/jrconfig/Config.kt
@@ -1,25 +1,29 @@
package com.romangraef.jrconfig
-import com.romangraef.jrconfig.variables.IntegerVariable
-import com.romangraef.jrconfig.variables.StringVariable
+import com.romangraef.jrconfig.variables.*
-typealias ConfigVariableProvider<T> = (ConfigProvider, String) -> ConfigVariable<T>
+typealias ConfigVariableProvider<T> = (ConfigSaveLoadProvider, String) -> ConfigVariable<T>
object Config {
- private var configProvider: ConfigProvider? = null
+ private var configProvider = mutableListOf<ConfigProvider>()
private val map: MutableMap<Class<*>, ConfigVariableProvider<*>> = mutableMapOf()
- private val proxyProvider: ConfigProvider = object : ConfigProvider {
+ private val proxyProvider: ConfigSaveLoadProvider = object : ConfigSaveLoadProvider {
override fun provideData(point: String): String? =
- configProvider?.provideData(point)
+ configProvider.map { it.provideData(point) }.firstOrNull()
- override fun setData(point: String, data: String) =
- configProvider?.setData(point, data) ?: Unit
+ override fun setData(point: String, data: String): Boolean =
+ configProvider.asSequence().mapNotNull { it as? ConfigSaveLoadProvider }.map { it.setData(point, data) }
+ .firstOrNull() ?: false
+
}
init {
+ map[Double::class.java] = ::DoubleVariable
+ map[Float::class.java] = ::FloatVariable
map[Int::class.java] = ::IntegerVariable
+ map[Long::class.java] = ::LongVariable
map[String::class.java] = ::StringVariable
}
@@ -31,7 +35,13 @@ object Config {
?: throw ConfigMissingProviderException(clazz)
}
+ @JvmStatic
+ fun <T : Enum<T>> getEnum(enumClass: Class<T>, point: String): ConfigVariable<T> {
+ return EnumVariable(enumClass, proxyProvider, point)
+ }
+
inline fun <reified T> get(point: String) = get(T::class.java, point)
+ inline fun <reified T : Enum<T>> getEnum(point: String) = getEnum(T::class.java, point)
@JvmStatic
fun <T> registerConfigVariableProvider(clazz: Class<T>, provider: ConfigVariableProvider<T>) {
@@ -43,8 +53,13 @@ object Config {
@JvmStatic
- fun use(provider: ConfigProvider?) {
- configProvider = provider
+ fun use(provider: ConfigProvider) {
+ configProvider.add(provider)
+ }
+
+ @JvmStatic
+ fun useFirst(provider: ConfigProvider) {
+ configProvider.add(0, provider)
}
@JvmStatic