aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/Config.kt35
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/ConfigProvider.kt1
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/ConfigSaveLoadProvider.kt5
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/ConfigVariable.kt1
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/DefaultConfigVariable.kt12
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/FilePropertiesProvider.kt10
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt12
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/variables/DoubleVariable.kt15
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/variables/EnumVariable.kt15
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/variables/FloatVariable.kt15
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/variables/IntegerVariable.kt4
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/variables/LongVariable.kt15
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/variables/StringVariable.kt4
13 files changed, 122 insertions, 22 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
diff --git a/src/main/kotlin/com/romangraef/jrconfig/ConfigProvider.kt b/src/main/kotlin/com/romangraef/jrconfig/ConfigProvider.kt
index 019cdef..8873c56 100644
--- a/src/main/kotlin/com/romangraef/jrconfig/ConfigProvider.kt
+++ b/src/main/kotlin/com/romangraef/jrconfig/ConfigProvider.kt
@@ -2,5 +2,4 @@ package com.romangraef.jrconfig
interface ConfigProvider {
fun provideData(point: String): String?
- fun setData(point: String, data: String)
} \ No newline at end of file
diff --git a/src/main/kotlin/com/romangraef/jrconfig/ConfigSaveLoadProvider.kt b/src/main/kotlin/com/romangraef/jrconfig/ConfigSaveLoadProvider.kt
new file mode 100644
index 0000000..5085c2f
--- /dev/null
+++ b/src/main/kotlin/com/romangraef/jrconfig/ConfigSaveLoadProvider.kt
@@ -0,0 +1,5 @@
+package com.romangraef.jrconfig
+
+interface ConfigSaveLoadProvider : ConfigProvider {
+ fun setData(point: String, data: String): Boolean
+} \ No newline at end of file
diff --git a/src/main/kotlin/com/romangraef/jrconfig/ConfigVariable.kt b/src/main/kotlin/com/romangraef/jrconfig/ConfigVariable.kt
index 8a9d375..c0ade39 100644
--- a/src/main/kotlin/com/romangraef/jrconfig/ConfigVariable.kt
+++ b/src/main/kotlin/com/romangraef/jrconfig/ConfigVariable.kt
@@ -7,4 +7,5 @@ interface ConfigVariable<T> {
fun set(value: T)
operator fun getValue(thisRef: Any?, property: KProperty<*>) = get()
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) = set(value)
+ fun defaultValue(t: T?): ConfigVariable<T>
} \ No newline at end of file
diff --git a/src/main/kotlin/com/romangraef/jrconfig/DefaultConfigVariable.kt b/src/main/kotlin/com/romangraef/jrconfig/DefaultConfigVariable.kt
new file mode 100644
index 0000000..661a0f6
--- /dev/null
+++ b/src/main/kotlin/com/romangraef/jrconfig/DefaultConfigVariable.kt
@@ -0,0 +1,12 @@
+package com.romangraef.jrconfig
+
+class DefaultConfigVariable<T>(private val internal: ConfigVariable<T>, private val default: T) : ConfigVariable<T> {
+ override fun get(): T = try {
+ internal.get()
+ } catch (e: Exception) {
+ default
+ }
+
+ override fun set(value: T): Unit = internal.set(value)
+ override fun defaultValue(t: T?): ConfigVariable<T> = internal.defaultValue(t)
+} \ No newline at end of file
diff --git a/src/main/kotlin/com/romangraef/jrconfig/FilePropertiesProvider.kt b/src/main/kotlin/com/romangraef/jrconfig/FilePropertiesProvider.kt
index fda7bf9..9fe1ec8 100644
--- a/src/main/kotlin/com/romangraef/jrconfig/FilePropertiesProvider.kt
+++ b/src/main/kotlin/com/romangraef/jrconfig/FilePropertiesProvider.kt
@@ -6,7 +6,7 @@ import java.io.FileOutputStream
import java.io.IOException
import java.util.*
-class FilePropertiesProvider(private val file: File) : ConfigProvider {
+class FilePropertiesProvider(private val file: File) : ConfigSaveLoadProvider {
private var properties: Properties = Properties()
init {
@@ -28,17 +28,19 @@ class FilePropertiesProvider(private val file: File) : ConfigProvider {
return properties.getProperty(point)
}
- override fun setData(point: String, data: String) {
+ override fun setData(point: String, data: String): Boolean {
properties.setProperty(point, data)
- save()
+ return save()
}
- private fun save() {
+ private fun save(): Boolean {
try {
properties.store(FileOutputStream(file), "application config")
+ return true
} catch (e: IOException) {
e.printStackTrace()
}
+ return false
}
diff --git a/src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt b/src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt
index ae38409..e1034c2 100644
--- a/src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt
+++ b/src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt
@@ -2,7 +2,7 @@ package com.romangraef.jrconfig
import java.util.function.Function
-abstract class TransformerConfigVariable<T>(private val provider: ConfigProvider, private val point: String) :
+abstract class TransformerConfigVariable<T>(private val provider: ConfigSaveLoadProvider, private val point: String) :
ConfigVariable<T> {
protected abstract fun transform(value: String): T
protected abstract fun serialize(data: T): String
@@ -12,16 +12,22 @@ abstract class TransformerConfigVariable<T>(private val provider: ConfigProvider
}
- override fun set(value: T) =
+ override fun set(value: T) {
provider.setData(point, serialize(value))
+ }
+ override fun defaultValue(t: T?): ConfigVariable<T> = if (t == null) {
+ this
+ } else {
+ DefaultConfigVariable(this, t)
+ }
companion object {
/**
* Quick and dirty. Please consider using a subclass.
*/
fun <T> getVariable(
- provider: ConfigProvider,
+ provider: ConfigSaveLoadProvider,
point: String,
transform: Function<String, T>,
serialize: Function<T, String>
diff --git a/src/main/kotlin/com/romangraef/jrconfig/variables/DoubleVariable.kt b/src/main/kotlin/com/romangraef/jrconfig/variables/DoubleVariable.kt
new file mode 100644
index 0000000..db0dbce
--- /dev/null
+++ b/src/main/kotlin/com/romangraef/jrconfig/variables/DoubleVariable.kt
@@ -0,0 +1,15 @@
+package com.romangraef.jrconfig.variables
+
+import com.romangraef.jrconfig.ConfigSaveLoadProvider
+import com.romangraef.jrconfig.TransformerConfigVariable
+
+class DoubleVariable(provider: ConfigSaveLoadProvider, point: String) :
+ TransformerConfigVariable<Double>(provider, point) {
+ override fun transform(value: String): Double {
+ return value.toDouble()
+ }
+
+ override fun serialize(data: Double): String {
+ return data.toString()
+ }
+} \ No newline at end of file
diff --git a/src/main/kotlin/com/romangraef/jrconfig/variables/EnumVariable.kt b/src/main/kotlin/com/romangraef/jrconfig/variables/EnumVariable.kt
new file mode 100644
index 0000000..2a65177
--- /dev/null
+++ b/src/main/kotlin/com/romangraef/jrconfig/variables/EnumVariable.kt
@@ -0,0 +1,15 @@
+package com.romangraef.jrconfig.variables
+
+import com.romangraef.jrconfig.ConfigSaveLoadProvider
+import com.romangraef.jrconfig.TransformerConfigVariable
+
+class EnumVariable<T : Enum<T>>(val enumClass: Class<T>, provider: ConfigSaveLoadProvider, point: String) :
+ TransformerConfigVariable<T>(provider, point) {
+ override fun transform(value: String): T {
+ return java.lang.Enum.valueOf(enumClass, value)
+ }
+
+ override fun serialize(data: T): String {
+ return data.name
+ }
+} \ No newline at end of file
diff --git a/src/main/kotlin/com/romangraef/jrconfig/variables/FloatVariable.kt b/src/main/kotlin/com/romangraef/jrconfig/variables/FloatVariable.kt
new file mode 100644
index 0000000..6a8bb61
--- /dev/null
+++ b/src/main/kotlin/com/romangraef/jrconfig/variables/FloatVariable.kt
@@ -0,0 +1,15 @@
+package com.romangraef.jrconfig.variables
+
+import com.romangraef.jrconfig.ConfigSaveLoadProvider
+import com.romangraef.jrconfig.TransformerConfigVariable
+
+class FloatVariable(provider: ConfigSaveLoadProvider, point: String) :
+ TransformerConfigVariable<Float>(provider, point) {
+ override fun transform(value: String): Float {
+ return value.toFloat()
+ }
+
+ override fun serialize(data: Float): String {
+ return data.toString()
+ }
+} \ No newline at end of file
diff --git a/src/main/kotlin/com/romangraef/jrconfig/variables/IntegerVariable.kt b/src/main/kotlin/com/romangraef/jrconfig/variables/IntegerVariable.kt
index 97cd719..0d9c11e 100644
--- a/src/main/kotlin/com/romangraef/jrconfig/variables/IntegerVariable.kt
+++ b/src/main/kotlin/com/romangraef/jrconfig/variables/IntegerVariable.kt
@@ -1,9 +1,9 @@
package com.romangraef.jrconfig.variables
-import com.romangraef.jrconfig.ConfigProvider
+import com.romangraef.jrconfig.ConfigSaveLoadProvider
import com.romangraef.jrconfig.TransformerConfigVariable
-class IntegerVariable(provider: ConfigProvider, point: String) :
+class IntegerVariable(provider: ConfigSaveLoadProvider, point: String) :
TransformerConfigVariable<Int>(provider, point) {
override fun transform(value: String): Int {
return value.toInt()
diff --git a/src/main/kotlin/com/romangraef/jrconfig/variables/LongVariable.kt b/src/main/kotlin/com/romangraef/jrconfig/variables/LongVariable.kt
new file mode 100644
index 0000000..90c8601
--- /dev/null
+++ b/src/main/kotlin/com/romangraef/jrconfig/variables/LongVariable.kt
@@ -0,0 +1,15 @@
+package com.romangraef.jrconfig.variables
+
+import com.romangraef.jrconfig.ConfigSaveLoadProvider
+import com.romangraef.jrconfig.TransformerConfigVariable
+
+class LongVariable(provider: ConfigSaveLoadProvider, point: String) :
+ TransformerConfigVariable<Long>(provider, point) {
+ override fun transform(value: String): Long {
+ return value.toLong()
+ }
+
+ override fun serialize(data: Long): String {
+ return data.toString()
+ }
+} \ No newline at end of file
diff --git a/src/main/kotlin/com/romangraef/jrconfig/variables/StringVariable.kt b/src/main/kotlin/com/romangraef/jrconfig/variables/StringVariable.kt
index 62ee801..9ec92e2 100644
--- a/src/main/kotlin/com/romangraef/jrconfig/variables/StringVariable.kt
+++ b/src/main/kotlin/com/romangraef/jrconfig/variables/StringVariable.kt
@@ -1,9 +1,9 @@
package com.romangraef.jrconfig.variables
-import com.romangraef.jrconfig.ConfigProvider
+import com.romangraef.jrconfig.ConfigSaveLoadProvider
import com.romangraef.jrconfig.TransformerConfigVariable
-class StringVariable(provider: ConfigProvider, point: String) :
+class StringVariable(provider: ConfigSaveLoadProvider, point: String) :
TransformerConfigVariable<String>(provider, point) {
override fun transform(value: String): String {
return value