diff --git a/demo/pom.xml b/demo/pom.xml index abbcf69..62f05e3 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -13,7 +13,11 @@ ${project.jdk.version} UTF-8 UTF-8 + true + true + 8.0.33 + 2.24.3 configured-demo jar @@ -24,38 +28,112 @@ ${project.parent.groupId} configured-core ${project.parent.version} - compile ${project.parent.groupId} configured-feature-commentable ${project.parent.version} - compile ${project.parent.groupId} configured-feature-versioned ${project.parent.version} - compile ${project.parent.groupId} configured-feature-validators ${project.parent.version} - compile + + + + ${project.parent.groupId} + configured-feature-kotlin + ${project.parent.version} + + + + ${project.parent.groupId} + configured-yaml + ${project.parent.version} + test + + + + ${project.parent.groupId} + configured-gson + ${project.parent.version} + test + + + + ${project.parent.groupId} + configured-sql + ${project.parent.version} + test + + + + cc.carm.lib + easysql-beecp + 0.4.7 + test + + + + mysql + mysql-connector-java + ${deps.mysql-driver.version} + test + + + + ${project.parent.groupId} + configured-mongodb + ${project.parent.version} + test + + + + ${project.parent.groupId} + configured-hocon + ${project.parent.version} + test + + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + ${kotlin.version} + + + + org.apache.logging.log4j + log4j-api + ${log4j.version} + test + + + + org.apache.logging.log4j + log4j-core + ${log4j.version} + test + + + + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j.version} + test - - org.apache.maven.plugins - maven-compiler-plugin - org.apache.maven.plugins maven-jar-plugin @@ -68,6 +146,64 @@ org.apache.maven.plugins maven-javadoc-plugin + + org.jetbrains.kotlin + kotlin-maven-plugin + ${kotlin.version} + + + compile + compile + + compile + + + + src/main/java + target/generated-sources/annotations + + + + + test-compile + test-compile + + test-compile + + + + + 1.8 + + + + org.apache.maven.plugins + maven-compiler-plugin + + + default-compile + none + + + default-testCompile + none + + + compile + compile + + compile + + + + testCompile + test-compile + + testCompile + + + + diff --git a/demo/src/main/java/cc/carm/lib/configuration/demo/tests/ConfigurationTest.java b/demo/src/main/java/cc/carm/lib/configuration/demo/tests/ConfigurationTest.java index ce21b20..d5cf665 100644 --- a/demo/src/main/java/cc/carm/lib/configuration/demo/tests/ConfigurationTest.java +++ b/demo/src/main/java/cc/carm/lib/configuration/demo/tests/ConfigurationTest.java @@ -1,11 +1,13 @@ package cc.carm.lib.configuration.demo.tests; import cc.carm.lib.configuration.demo.tests.conf.DemoConfiguration; +import cc.carm.lib.configuration.demo.tests.conf.KotlinConfiguration; import cc.carm.lib.configuration.demo.tests.conf.RegistryConfig; import cc.carm.lib.configuration.demo.tests.model.UserRecord; import cc.carm.lib.configuration.source.ConfigurationHolder; import org.jetbrains.annotations.TestOnly; +import java.util.LinkedHashMap; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; @@ -80,6 +82,22 @@ public class ConfigurationTest { } + public static void testKotlin(ConfigurationHolder provider) { + provider.initialize(KotlinConfiguration.class); + + System.out.println("> Test Kotlin value before:"); + System.out.println(KotlinConfiguration.INSTANCE.getLINKED_MAP().get()); + + LinkedHashMap map = new LinkedHashMap<>(); + map.put("Language", "Kotlin"); + System.out.println("> Test Kotlin value -> " + map); + KotlinConfiguration.INSTANCE.getLINKED_MAP().set(map); + + System.out.println("> Test Kotlin value after:"); + System.out.println(KotlinConfiguration.INSTANCE.getLINKED_MAP().get()); + + } + public static void save(ConfigurationHolder provider) { try { provider.save(); diff --git a/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/KotlinConfiguration.kt b/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/KotlinConfiguration.kt new file mode 100644 index 0000000..ccef89e --- /dev/null +++ b/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/KotlinConfiguration.kt @@ -0,0 +1,33 @@ +package cc.carm.lib.configuration.demo.tests.conf + +import cc.carm.lib.configuration.Configuration +import cc.carm.lib.configuration.annotation.ConfigPath +import cc.carm.lib.configuration.annotation.ConfigVersion +import cc.carm.lib.configuration.kotlin.value.* +import java.util.* + +@ConfigPath(root = true) +object KotlinConfiguration : Configuration { + @ConfigVersion(1) + val VERSION = valueFrom(Double::class) { + defaults(1.0) + } + + val USER_LIST = listFrom(String::class) { + defaults("Carm Jos") + } + + val NICKNAME = mapFrom(String::class, ::mutableMapOf) { + defaultMap(mapOf("Carm Jos" to "Carm")) + parse { v -> v } + serialize { v -> v } + } + + val LINKED_MAP = linkedMapFrom(String::class) { + parse { value -> + value + } + serialize { v -> v } + defaults("key", "value") + } +} \ No newline at end of file diff --git a/providers/gson/src/test/java/config/JSONConfigTest.java b/demo/src/test/java/cc/carm/lib/configuration/tests/test/JSONConfigTests.java similarity index 88% rename from providers/gson/src/test/java/config/JSONConfigTest.java rename to demo/src/test/java/cc/carm/lib/configuration/tests/test/JSONConfigTests.java index c5cca74..4f9d77d 100644 --- a/providers/gson/src/test/java/config/JSONConfigTest.java +++ b/demo/src/test/java/cc/carm/lib/configuration/tests/test/JSONConfigTests.java @@ -1,4 +1,4 @@ -package config; +package cc.carm.lib.configuration.tests.test; import cc.carm.lib.configuration.demo.tests.ConfigurationTest; import cc.carm.lib.configuration.source.ConfigurationHolder; @@ -7,7 +7,7 @@ import org.junit.Test; import java.io.File; -public class JSONConfigTest { +public class JSONConfigTests { protected final ConfigurationHolder holder = JSONConfigFactory .from(new File("target"), "config.json") diff --git a/providers/yaml/src/test/java/yaml/test/YamlTests.java b/demo/src/test/java/cc/carm/lib/configuration/tests/test/YamlTests.java similarity index 84% rename from providers/yaml/src/test/java/yaml/test/YamlTests.java rename to demo/src/test/java/cc/carm/lib/configuration/tests/test/YamlTests.java index 7540ab8..5c974b4 100644 --- a/providers/yaml/src/test/java/yaml/test/YamlTests.java +++ b/demo/src/test/java/cc/carm/lib/configuration/tests/test/YamlTests.java @@ -1,4 +1,4 @@ -package yaml.test; +package cc.carm.lib.configuration.tests.test; import cc.carm.lib.configuration.commentable.CommentableMeta; import cc.carm.lib.configuration.demo.tests.ConfigurationTest; @@ -44,5 +44,13 @@ public class YamlTests { ConfigurationTest.save(holder); } + @Test + public void testKotlin() { + ConfigurationHolder holder = YAMLConfigFactory.from("target/kotlin.yml").build(); + + ConfigurationTest.testKotlin(holder); + + ConfigurationTest.save(holder); + } } diff --git a/providers/mongodb/src/test/java/config/MongoConfig.java b/demo/src/test/java/cc/carm/lib/configuration/tests/test/mongodb/MongoConfig.java similarity index 90% rename from providers/mongodb/src/test/java/config/MongoConfig.java rename to demo/src/test/java/cc/carm/lib/configuration/tests/test/mongodb/MongoConfig.java index b831c37..ec856c6 100644 --- a/providers/mongodb/src/test/java/config/MongoConfig.java +++ b/demo/src/test/java/cc/carm/lib/configuration/tests/test/mongodb/MongoConfig.java @@ -1,4 +1,4 @@ -package config; +package cc.carm.lib.configuration.tests.test.mongodb; import cc.carm.lib.configuration.Configuration; import cc.carm.lib.configuration.value.standard.ConfiguredValue; diff --git a/providers/mongodb/src/test/java/config/MongoTest.java b/demo/src/test/java/cc/carm/lib/configuration/tests/test/mongodb/MongoTest.java similarity index 97% rename from providers/mongodb/src/test/java/config/MongoTest.java rename to demo/src/test/java/cc/carm/lib/configuration/tests/test/mongodb/MongoTest.java index 7abdfd1..c179dd0 100644 --- a/providers/mongodb/src/test/java/config/MongoTest.java +++ b/demo/src/test/java/cc/carm/lib/configuration/tests/test/mongodb/MongoTest.java @@ -1,4 +1,4 @@ -package config; +package cc.carm.lib.configuration.tests.test.mongodb; import cc.carm.lib.configuration.demo.tests.ConfigurationTest; import cc.carm.lib.configuration.source.ConfigurationHolder; diff --git a/providers/sql/src/test/java/config/SQLConfigTest.java b/demo/src/test/java/cc/carm/lib/configuration/tests/test/sql/SQLConfigTest.java similarity index 96% rename from providers/sql/src/test/java/config/SQLConfigTest.java rename to demo/src/test/java/cc/carm/lib/configuration/tests/test/sql/SQLConfigTest.java index 24bf9cb..f8f36ff 100644 --- a/providers/sql/src/test/java/config/SQLConfigTest.java +++ b/demo/src/test/java/cc/carm/lib/configuration/tests/test/sql/SQLConfigTest.java @@ -1,4 +1,4 @@ -package config; +package cc.carm.lib.configuration.tests.test.sql; import cc.carm.lib.configuration.demo.DatabaseConfiguration; import cc.carm.lib.configuration.demo.tests.ConfigurationTest; diff --git a/providers/gson/src/test/resources/example.json b/demo/src/test/resources/example.json similarity index 100% rename from providers/gson/src/test/resources/example.json rename to demo/src/test/resources/example.json diff --git a/providers/mongodb/src/test/resources/log4j2.xml b/demo/src/test/resources/log4j2.xml similarity index 89% rename from providers/mongodb/src/test/resources/log4j2.xml rename to demo/src/test/resources/log4j2.xml index f06fcad..b624382 100644 --- a/providers/mongodb/src/test/resources/log4j2.xml +++ b/demo/src/test/resources/log4j2.xml @@ -1,5 +1,5 @@ - + diff --git a/features/kotlin/pom.xml b/features/kotlin/pom.xml new file mode 100644 index 0000000..7624207 --- /dev/null +++ b/features/kotlin/pom.xml @@ -0,0 +1,120 @@ + + + 4.0.0 + + cc.carm.lib + configured-parent + 4.1.3 + ../../pom.xml + + + ${project.jdk.version} + ${project.jdk.version} + UTF-8 + UTF-8 + 1.9.22 + + + configured-feature-kotlin + jar + + + + ${project.groupId} + configured-core + ${project.version} + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + ${kotlin.version} + compile + + + + + ${project.basedir}/src/main/kotlin + + + + org.apache.maven.plugins + maven-jar-plugin + + + org.apache.maven.plugins + maven-source-plugin + + + org.apache.maven.plugins + maven-javadoc-plugin + + + org.jetbrains.kotlin + kotlin-maven-plugin + ${kotlin.version} + + + compile + compile + + compile + + + + test-compile + test-compile + + test-compile + + + + + 1.8 + + + + org.jetbrains.dokka + dokka-maven-plugin + 2.0.0 + + + pre-site + + dokka + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + default-compile + none + + + default-testCompile + none + + + compile + compile + + compile + + + + testCompile + test-compile + + testCompile + + + + + + + \ No newline at end of file diff --git a/features/kotlin/src/main/kotlin/cc/carm/lib/configuration/kotlin/value/Lists.kt b/features/kotlin/src/main/kotlin/cc/carm/lib/configuration/kotlin/value/Lists.kt new file mode 100644 index 0000000..bcddeaf --- /dev/null +++ b/features/kotlin/src/main/kotlin/cc/carm/lib/configuration/kotlin/value/Lists.kt @@ -0,0 +1,29 @@ +package cc.carm.lib.configuration.kotlin.value + +import cc.carm.lib.configuration.adapter.ValueType +import cc.carm.lib.configuration.builder.list.SourceListBuilder +import cc.carm.lib.configuration.value.standard.ConfiguredList +import kotlin.reflect.KClass + +inline fun listFrom( + clazz: KClass, block: (SourceListBuilder.() -> Unit) +): ConfiguredList { + return listFrom(clazz.java, block) +} + +inline fun listFrom( + clazz: Class, block: (SourceListBuilder.() -> Unit) +): ConfiguredList { + return listFrom(ValueType.of(clazz), block) +} + +inline fun listFrom( + valueType: ValueType, block: (SourceListBuilder.() -> Unit) +): ConfiguredList { + val configBuilder = ConfiguredList.builderOf(V::class.java) + val sourceValueBuilder: SourceListBuilder = if (valueType.rawType == String::class.java) { + @Suppress("UNCHECKED_CAST") + configBuilder.fromString() as SourceListBuilder + } else configBuilder.from(valueType) + return sourceValueBuilder.also(block).build() +} \ No newline at end of file diff --git a/features/kotlin/src/main/kotlin/cc/carm/lib/configuration/kotlin/value/Maps.kt b/features/kotlin/src/main/kotlin/cc/carm/lib/configuration/kotlin/value/Maps.kt new file mode 100644 index 0000000..e784a38 --- /dev/null +++ b/features/kotlin/src/main/kotlin/cc/carm/lib/configuration/kotlin/value/Maps.kt @@ -0,0 +1,107 @@ +package cc.carm.lib.configuration.kotlin.value + +import cc.carm.lib.configuration.adapter.ValueType +import cc.carm.lib.configuration.builder.map.SourceMapBuilder +import cc.carm.lib.configuration.value.standard.ConfiguredMap +import java.util.* +import kotlin.reflect.KClass + +inline fun hashmapFrom( + clazz: KClass, + block: SourceMapBuilder, S, K, V>.() -> Unit +): ConfiguredMap { + return hashmapFrom(clazz.java, block) +} + +inline fun hashmapFrom( + clazz: Class, + block: SourceMapBuilder, S, K, V>.() -> Unit +): ConfiguredMap { + return hashmapFrom(ValueType.of(clazz), block) +} + +inline fun hashmapFrom( + valueType: ValueType, + block: SourceMapBuilder, S, K, V>.() -> Unit +): ConfiguredMap { + val mapCreator = ConfiguredMap.builderOf(K::class.java, V::class.java) + val sourceValueBuilder: SourceMapBuilder, S, K, V> = mapCreator.asHashMap().from(valueType) + return sourceValueBuilder.also(block).build() +} + +inline fun linkedMapFrom( + clazz: KClass, + block: SourceMapBuilder, S, K, V>.() -> Unit +): ConfiguredMap { + return linkedMapFrom(clazz.java, block) +} + +inline fun linkedMapFrom( + clazz: Class, + block: SourceMapBuilder, S, K, V>.() -> Unit +): ConfiguredMap { + return linkedMapFrom(ValueType.of(clazz), block) +} + +inline fun linkedMapFrom( + valueType: ValueType, + block: SourceMapBuilder, S, K, V>.() -> Unit +): ConfiguredMap { + val mapCreator = ConfiguredMap.builderOf(K::class.java, V::class.java) + val sourceValueBuilder: SourceMapBuilder, S, K, V> = mapCreator.asLinkedMap().from(valueType) + return sourceValueBuilder.also(block).build() +} + +inline fun treeMapFrom( + clazz: KClass, + block: SourceMapBuilder, S, K, V>.() -> Unit +): ConfiguredMap { + return treeMapFrom(clazz.java, block) +} + +inline fun treeMapFrom( + clazz: Class, + block: SourceMapBuilder, S, K, V>.() -> Unit +): ConfiguredMap { + return treeMapFrom(ValueType.of(clazz), block) +} + +inline fun treeMapFrom( + valueType: ValueType, + block: SourceMapBuilder, S, K, V>.() -> Unit +): ConfiguredMap { + val mapCreator = ConfiguredMap.builderOf(K::class.java, V::class.java) + val sourceValueBuilder: SourceMapBuilder, S, K, V> = mapCreator.asTreeMap().from(valueType) + return sourceValueBuilder.also(block).build() +} + +inline fun , S : Any, reified K, reified V> mapFrom( + clazz: KClass, + noinline map: () -> MAP, + block: SourceMapBuilder.() -> Unit +): ConfiguredMap { + return mapFrom(clazz.java, map, block) +} + +inline fun , S : Any, reified K, reified V> mapFrom( + clazz: Class, + noinline map: () -> MAP, + block: SourceMapBuilder.() -> Unit +): ConfiguredMap { + return mapFrom(ValueType.of(clazz), map, block) +} + +inline fun , S : Any, reified K, reified V> mapFrom( + valueType: ValueType, + noinline map: () -> MAP, + block: SourceMapBuilder.() -> Unit +): ConfiguredMap { + val mapCreator = ConfiguredMap.builderOf(K::class.java, V::class.java) + val sourceValueBuilder: SourceMapBuilder = mapCreator.constructor(map).from(valueType) + return sourceValueBuilder.also(block).build() +} + + +fun , S, K, V> SourceMapBuilder.defaultMap(map: MAP): SourceMapBuilder { + return defaults(map) +} \ No newline at end of file diff --git a/features/kotlin/src/main/kotlin/cc/carm/lib/configuration/kotlin/value/Values.kt b/features/kotlin/src/main/kotlin/cc/carm/lib/configuration/kotlin/value/Values.kt new file mode 100644 index 0000000..5d9be11 --- /dev/null +++ b/features/kotlin/src/main/kotlin/cc/carm/lib/configuration/kotlin/value/Values.kt @@ -0,0 +1,36 @@ +package cc.carm.lib.configuration.kotlin.value + +import cc.carm.lib.configuration.adapter.ValueType +import cc.carm.lib.configuration.builder.value.SourceValueBuilder +import cc.carm.lib.configuration.value.standard.ConfiguredValue +import kotlin.reflect.KClass + +inline fun valueFrom( + clazz: KClass, block: (SourceValueBuilder.() -> Unit) +): ConfiguredValue { + return valueFrom(clazz.java, block) +} + +inline fun valueFrom( + clazz: Class, block: (SourceValueBuilder.() -> Unit) +): ConfiguredValue { + return valueFrom(ValueType.of(clazz), block) +} + +inline fun valueFrom( + valueType: ValueType, block: (SourceValueBuilder.() -> Unit) +): ConfiguredValue { + val configBuilder = ConfiguredValue.builderOf(V::class.java) + val sourceValueBuilder: SourceValueBuilder = if (valueType.rawType == String::class.java) { + @Suppress("UNCHECKED_CAST") + configBuilder.fromString() as SourceValueBuilder + } else configBuilder.from(valueType) + sourceValueBuilder.parse { holder, data -> + holder.deserialize(V::class.java, data) + } + sourceValueBuilder.serialize { holder, data -> + @Suppress("UNCHECKED_CAST") + holder.serialize(data) as? S + } + return sourceValueBuilder.also(block).build() +} diff --git a/pom.xml b/pom.xml index c75a608..9a5acfe 100644 --- a/pom.xml +++ b/pom.xml @@ -10,6 +10,7 @@ ${project.jdk.version} UTF-8 UTF-8 + 2.0.21 cc.carm.lib @@ -24,6 +25,7 @@ features/versioned features/validators features/text + features/kotlin providers/yaml providers/gson @@ -166,7 +168,6 @@ - org.apache.maven.plugins maven-javadoc-plugin diff --git a/providers/gson/pom.xml b/providers/gson/pom.xml index f7d5dcd..e21ca41 100644 --- a/providers/gson/pom.xml +++ b/providers/gson/pom.xml @@ -41,13 +41,6 @@ compile - - ${project.parent.groupId} - configured-demo - ${project.parent.version} - test - - com.google.code.gson gson diff --git a/providers/hocon/pom.xml b/providers/hocon/pom.xml index ab6c3dc..e76ae39 100644 --- a/providers/hocon/pom.xml +++ b/providers/hocon/pom.xml @@ -43,14 +43,6 @@ ${project.parent.version} compile - - - ${project.parent.groupId} - configured-demo - ${project.parent.version} - test - - com.typesafe config diff --git a/providers/mongodb/pom.xml b/providers/mongodb/pom.xml index 83fb34f..dccf17f 100644 --- a/providers/mongodb/pom.xml +++ b/providers/mongodb/pom.xml @@ -14,9 +14,7 @@ ${project.jdk.version} UTF-8 UTF-8 - 5.4.0 - 2.24.3 configured-mongodb @@ -42,41 +40,6 @@ ${deps.mongodb.version} - - org.apache.logging.log4j - log4j-api - ${log4j.version} - test - - - - org.apache.logging.log4j - log4j-core - ${log4j.version} - test - - - - org.apache.logging.log4j - log4j-slf4j-impl - ${log4j.version} - test - - - - ${project.parent.groupId} - configured-demo - ${project.parent.version} - test - - - - ${project.parent.groupId} - configured-gson - ${project.parent.version} - test - - diff --git a/providers/sql/pom.xml b/providers/sql/pom.xml index 721050e..a10d480 100644 --- a/providers/sql/pom.xml +++ b/providers/sql/pom.xml @@ -14,9 +14,6 @@ ${project.jdk.version} UTF-8 UTF-8 - - 8.0.33 - 2.24.3 configured-sql @@ -61,55 +58,6 @@ 0.4.7 - - cc.carm.lib - easysql-beecp - 0.4.7 - test - - - - ${project.parent.groupId} - configured-demo - ${project.parent.version} - test - - - - org.apache.logging.log4j - log4j-api - ${deps.log4j.version} - test - - - - org.apache.logging.log4j - log4j-core - ${deps.log4j.version} - test - - - - org.apache.logging.log4j - log4j-slf4j-impl - ${deps.log4j.version} - test - - - - ${project.parent.groupId} - configured-gson - ${project.parent.version} - test - - - - mysql - mysql-connector-java - ${deps.mysql-driver.version} - test - - diff --git a/providers/sql/src/test/resources/log4j2.xml b/providers/sql/src/test/resources/log4j2.xml deleted file mode 100644 index f06fcad..0000000 --- a/providers/sql/src/test/resources/log4j2.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/providers/yaml/pom.xml b/providers/yaml/pom.xml index b724faf..e85308c 100644 --- a/providers/yaml/pom.xml +++ b/providers/yaml/pom.xml @@ -64,13 +64,6 @@ compile - - ${project.parent.groupId} - configured-demo - ${project.parent.version} - test - - diff --git a/providers/yaml/src/test/java/sample/SampleTest.java b/providers/yaml/src/test/java/sample/SampleTest.java index 259734a..3fa6014 100644 --- a/providers/yaml/src/test/java/sample/SampleTest.java +++ b/providers/yaml/src/test/java/sample/SampleTest.java @@ -4,7 +4,7 @@ import cc.carm.lib.configuration.source.ConfigurationHolder; import cc.carm.lib.configuration.source.yaml.YAMLConfigFactory; import org.junit.Test; -public class SampleTest { +public class SampleTest { @Test public void test() {