From 81e2ad06cc742c474b8b303c8fc770db49ec26c0 Mon Sep 17 00:00:00 2001 From: Alexander Nozik Date: Mon, 1 Aug 2022 18:12:57 +0300 Subject: [PATCH] refactor MutableMeta set method to accept wider range of receivers --- build.gradle.kts | 4 +-- dataforge-context/build.gradle.kts | 6 ++-- dataforge-data/build.gradle.kts | 6 ++-- dataforge-io/build.gradle.kts | 10 +++--- .../dataforge-io-yaml/build.gradle.kts | 6 ++-- .../kscience/dataforge/io/workDirectory.kt | 4 +-- dataforge-meta/build.gradle.kts | 6 ++-- .../space/kscience/dataforge/meta/Meta.kt | 2 +- .../kscience/dataforge/meta/MutableMeta.kt | 36 ++++--------------- .../meta/descriptors/MetaDescriptorBuilder.kt | 1 + .../space/kscience/dataforge/meta/mapMeta.kt | 3 +- .../dataforge/values/ValueProvider.kt | 26 +++++++++++++- .../kscience/dataforge/meta/ConfigTest.kt | 1 + .../dataforge/meta/MetaBuilderTest.kt | 5 +-- .../dataforge/meta/MetaDelegateTest.kt | 1 + .../space/kscience/dataforge/meta/MetaTest.kt | 1 + dataforge-output/build.gradle.kts | 4 +-- dataforge-scripting/build.gradle.kts | 4 +-- dataforge-workspace/build.gradle.kts | 6 ++-- gradle.properties | 4 +-- settings.gradle.kts | 10 +++--- 21 files changed, 77 insertions(+), 69 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index d153653d..066623fb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,12 +1,12 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { - id("ru.mipt.npm.gradle.project") + id("space.kscience.gradle.project") } allprojects { group = "space.kscience" - version = "0.6.0-dev-10" + version = "0.6.0-dev-12" } subprojects { diff --git a/dataforge-context/build.gradle.kts b/dataforge-context/build.gradle.kts index 4d476c50..056d5590 100644 --- a/dataforge-context/build.gradle.kts +++ b/dataforge-context/build.gradle.kts @@ -1,6 +1,6 @@ plugins { - id("ru.mipt.npm.gradle.mpp") - id("ru.mipt.npm.gradle.native") + id("space.kscience.gradle.mpp") + id("space.kscience.gradle.native") } description = "Context and provider definitions" @@ -31,5 +31,5 @@ kotlin { } readme { - maturity = ru.mipt.npm.gradle.Maturity.DEVELOPMENT + maturity = space.kscience.gradle.Maturity.DEVELOPMENT } \ No newline at end of file diff --git a/dataforge-data/build.gradle.kts b/dataforge-data/build.gradle.kts index 74ed12db..9af661f9 100644 --- a/dataforge-data/build.gradle.kts +++ b/dataforge-data/build.gradle.kts @@ -1,6 +1,6 @@ plugins { - id("ru.mipt.npm.gradle.mpp") - id("ru.mipt.npm.gradle.native") + id("space.kscience.gradle.mpp") + id("space.kscience.gradle.native") } kscience{ @@ -19,5 +19,5 @@ kotlin { } readme{ - maturity = ru.mipt.npm.gradle.Maturity.EXPERIMENTAL + maturity = space.kscience.gradle.Maturity.EXPERIMENTAL } diff --git a/dataforge-io/build.gradle.kts b/dataforge-io/build.gradle.kts index f4bdd54a..3d6ff062 100644 --- a/dataforge-io/build.gradle.kts +++ b/dataforge-io/build.gradle.kts @@ -1,14 +1,14 @@ -import ru.mipt.npm.gradle.KScienceVersions +import space.kscience.gradle.KScienceVersions plugins { - id("ru.mipt.npm.gradle.mpp") - id("ru.mipt.npm.gradle.native") + id("space.kscience.gradle.mpp") + id("space.kscience.gradle.native") } description = "IO module" kscience { - useSerialization(sourceSet = ru.mipt.npm.gradle.DependencySourceSet.TEST) { + useSerialization(sourceSet = space.kscience.gradle.DependencySourceSet.TEST) { cbor() } } @@ -27,5 +27,5 @@ kotlin { } readme{ - maturity = ru.mipt.npm.gradle.Maturity.PROTOTYPE + maturity = space.kscience.gradle.Maturity.PROTOTYPE } \ No newline at end of file diff --git a/dataforge-io/dataforge-io-yaml/build.gradle.kts b/dataforge-io/dataforge-io-yaml/build.gradle.kts index 1b57fc71..f42b2911 100644 --- a/dataforge-io/dataforge-io-yaml/build.gradle.kts +++ b/dataforge-io/dataforge-io-yaml/build.gradle.kts @@ -1,6 +1,6 @@ plugins { - id("ru.mipt.npm.gradle.mpp") -// id("ru.mipt.npm.gradle.native") + id("space.kscience.gradle.mpp") +// id("space.kscience.gradle.native") } description = "YAML meta IO" @@ -26,7 +26,7 @@ kotlin { } readme{ - maturity = ru.mipt.npm.gradle.Maturity.PROTOTYPE + maturity = space.kscience.gradle.Maturity.PROTOTYPE description =""" YAML meta converters and Front Matter envelope format """.trimIndent() diff --git a/dataforge-io/src/jvmMain/kotlin/space/kscience/dataforge/io/workDirectory.kt b/dataforge-io/src/jvmMain/kotlin/space/kscience/dataforge/io/workDirectory.kt index 4e799ee1..f89321cf 100644 --- a/dataforge-io/src/jvmMain/kotlin/space/kscience/dataforge/io/workDirectory.kt +++ b/dataforge-io/src/jvmMain/kotlin/space/kscience/dataforge/io/workDirectory.kt @@ -2,8 +2,8 @@ package space.kscience.dataforge.io import space.kscience.dataforge.context.ContextBuilder import space.kscience.dataforge.meta.get -import space.kscience.dataforge.meta.set import space.kscience.dataforge.meta.string +import space.kscience.dataforge.values.set import java.nio.file.Path import kotlin.io.path.Path @@ -23,6 +23,6 @@ public fun ContextBuilder.workDirectory(path: String) { } } -public fun ContextBuilder.workDirectory(path: Path){ +public fun ContextBuilder.workDirectory(path: Path) { workDirectory(path.toAbsolutePath().toString()) } diff --git a/dataforge-meta/build.gradle.kts b/dataforge-meta/build.gradle.kts index a2cc3c66..4252de77 100644 --- a/dataforge-meta/build.gradle.kts +++ b/dataforge-meta/build.gradle.kts @@ -1,6 +1,6 @@ plugins { - id("ru.mipt.npm.gradle.mpp") - id("ru.mipt.npm.gradle.native") + id("space.kscience.gradle.mpp") + id("space.kscience.gradle.native") } kscience { @@ -12,5 +12,5 @@ kscience { description = "Meta definition and basic operations on meta" readme{ - maturity = ru.mipt.npm.gradle.Maturity.DEVELOPMENT + maturity = space.kscience.gradle.Maturity.DEVELOPMENT } \ No newline at end of file diff --git a/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/Meta.kt b/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/Meta.kt index 01a5ebf2..a5409764 100644 --- a/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/Meta.kt +++ b/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/Meta.kt @@ -109,7 +109,7 @@ public operator fun Meta.get(name: Name): Meta? = this.getMeta(name) /** * Parse [Name] from [key] using full name notation and pass it to [Meta.get] */ -public operator fun Meta.get(key: String): Meta? = this.get(Name.parse(key)) +public operator fun Meta.get(key: String): Meta? = this[Name.parse(key)] /** * Get all items matching given name. The index of the last element, if present is used as a [Regex], diff --git a/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/MutableMeta.kt b/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/MutableMeta.kt index d39a6dbf..21d4887d 100644 --- a/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/MutableMeta.kt +++ b/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/MutableMeta.kt @@ -23,9 +23,7 @@ public annotation class MetaBuilder public interface MutableMetaProvider : MetaProvider, MutableValueProvider { override fun getMeta(name: Name): MutableMeta? public fun setMeta(name: Name, node: Meta?) - override fun setValue(name: Name, value: Value?) { - getMeta(name)?.value = value - } + override fun setValue(name: Name, value: Value?) } /** @@ -144,12 +142,12 @@ public interface MutableMeta : Meta, MutableMetaProvider { /** * Set or replace node at given [name] */ -public operator fun MutableMeta.set(name: Name, meta: Meta): Unit = setMeta(name, meta) +public operator fun MutableMetaProvider.set(name: Name, meta: Meta): Unit = setMeta(name, meta) /** * Set or replace value at given [name] */ -public operator fun MutableMeta.set(name: Name, value: Value?): Unit = setValue(name, value) +public operator fun MutableValueProvider.set(name: Name, value: Value?): Unit = setValue(name, value) public fun MutableMeta.getOrCreate(key: String): MutableMeta = getOrCreate(Name.parse(key)) @@ -179,26 +177,6 @@ public fun MutableMetaProvider.remove(key: String) { public operator fun MutableMetaProvider.set(Key: NameToken, value: Meta): Unit = setMeta(Key.asName(), value) public operator fun MutableMetaProvider.set(key: String, value: Meta): Unit = setMeta(Name.parse(key), value) -//value setters - -public operator fun MutableMeta.set(name: NameToken, value: Value?): Unit = set(name.asName(), value) -public operator fun MutableMeta.set(key: String, value: Value?): Unit = set(Name.parse(key), value) - -public operator fun MutableMeta.set(name: Name, value: String): Unit = set(name, value.asValue()) -public operator fun MutableMeta.set(name: NameToken, value: String): Unit = set(name.asName(), value.asValue()) -public operator fun MutableMeta.set(key: String, value: String): Unit = set(Name.parse(key), value.asValue()) - -public operator fun MutableMeta.set(name: Name, value: Boolean): Unit = set(name, value.asValue()) -public operator fun MutableMeta.set(name: NameToken, value: Boolean): Unit = set(name.asName(), value.asValue()) -public operator fun MutableMeta.set(key: String, value: Boolean): Unit = set(Name.parse(key), value.asValue()) - -public operator fun MutableMeta.set(name: Name, value: Number): Unit = set(name, value.asValue()) -public operator fun MutableMeta.set(name: NameToken, value: Number): Unit = set(name.asName(), value.asValue()) -public operator fun MutableMeta.set(key: String, value: Number): Unit = set(Name.parse(key), value.asValue()) - -public operator fun MutableMeta.set(name: Name, value: List): Unit = set(name, value.asValue()) -public operator fun MutableMeta.set(name: NameToken, value: List): Unit = set(name.asName(), value.asValue()) -public operator fun MutableMeta.set(key: String, value: List): Unit = set(Name.parse(key), value.asValue()) //public fun MutableMeta.set(key: String, index: String, value: Value?): Unit = // set(key.toName().withIndex(index), value) @@ -207,7 +185,7 @@ public operator fun MutableMeta.set(key: String, value: List): Unit = set /* Same name siblings generation */ -public fun MutableMeta.setIndexed( +public fun MutableMetaProvider.setIndexed( name: Name, metas: Iterable, indexFactory: (Meta, index: Int) -> String = { _, index -> index.toString() }, @@ -221,10 +199,10 @@ public fun MutableMeta.setIndexed( } } -public operator fun MutableMeta.set(name: Name, metas: Iterable): Unit = +public operator fun MutableMetaProvider.set(name: Name, metas: Iterable): Unit = setIndexed(name, metas) -public operator fun MutableMeta.set(key: String, metas: Iterable): Unit = +public operator fun MutableMetaProvider.set(key: String, metas: Iterable): Unit = setIndexed(Name.parse(key), metas) @@ -234,7 +212,7 @@ public operator fun MutableMeta.set(key: String, metas: Iterable): Unit = * * node updates node and replaces anything but node * * node list updates node list if number of nodes in the list is the same and replaces anything otherwise */ -public fun MutableMeta.update(meta: Meta) { +public fun MutableMetaProvider.update(meta: Meta) { meta.valueSequence().forEach { (name, value) -> set(name, value) } diff --git a/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/descriptors/MetaDescriptorBuilder.kt b/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/descriptors/MetaDescriptorBuilder.kt index b0e45b67..ef4dcc21 100644 --- a/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/descriptors/MetaDescriptorBuilder.kt +++ b/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/descriptors/MetaDescriptorBuilder.kt @@ -8,6 +8,7 @@ import space.kscience.dataforge.names.length import space.kscience.dataforge.values.Value import space.kscience.dataforge.values.ValueType import space.kscience.dataforge.values.asValue +import space.kscience.dataforge.values.set import kotlin.collections.set public class MetaDescriptorBuilder @PublishedApi internal constructor() { diff --git a/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/mapMeta.kt b/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/mapMeta.kt index 0c129932..c5d95297 100644 --- a/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/mapMeta.kt +++ b/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/mapMeta.kt @@ -6,6 +6,7 @@ import space.kscience.dataforge.misc.DFExperimental import space.kscience.dataforge.names.Name import space.kscience.dataforge.values.ListValue import space.kscience.dataforge.values.Value +import space.kscience.dataforge.values.setValue /** * Convert meta to map of maps @@ -43,7 +44,7 @@ public fun Map.toMeta(@Suppress("UNUSED_PARAMETER") descriptor: Me if (value is List<*>) { val items = value.map { toMeta(it) } if (items.all { it.isLeaf }) { - set(key, ListValue(items.map { it.value!! })) + setValue(key, ListValue(items.map { it.value!! })) } else { setIndexed(Name.parse(key), value.map { toMeta(it) }) } diff --git a/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/values/ValueProvider.kt b/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/values/ValueProvider.kt index 300c3b6a..038bf358 100644 --- a/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/values/ValueProvider.kt +++ b/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/values/ValueProvider.kt @@ -1,6 +1,9 @@ package space.kscience.dataforge.values +import space.kscience.dataforge.meta.set import space.kscience.dataforge.names.Name +import space.kscience.dataforge.names.NameToken +import space.kscience.dataforge.names.asName /** * An object that could provide values @@ -20,4 +23,25 @@ public interface MutableValueProvider : ValueProvider { public fun MutableValueProvider.setValue(key: String, value: Value?) { setValue(Name.parse(key), value) -} \ No newline at end of file +} + +//value setters + +public operator fun MutableValueProvider.set(name: NameToken, value: Value?): Unit = set(name.asName(), value) +public operator fun MutableValueProvider.set(key: String, value: Value?): Unit = set(Name.parse(key), value) + +public operator fun MutableValueProvider.set(name: Name, value: String): Unit = set(name, value.asValue()) +public operator fun MutableValueProvider.set(name: NameToken, value: String): Unit = set(name.asName(), value.asValue()) +public operator fun MutableValueProvider.set(key: String, value: String): Unit = set(Name.parse(key), value.asValue()) + +public operator fun MutableValueProvider.set(name: Name, value: Boolean): Unit = set(name, value.asValue()) +public operator fun MutableValueProvider.set(name: NameToken, value: Boolean): Unit = set(name.asName(), value.asValue()) +public operator fun MutableValueProvider.set(key: String, value: Boolean): Unit = set(Name.parse(key), value.asValue()) + +public operator fun MutableValueProvider.set(name: Name, value: Number): Unit = set(name, value.asValue()) +public operator fun MutableValueProvider.set(name: NameToken, value: Number): Unit = set(name.asName(), value.asValue()) +public operator fun MutableValueProvider.set(key: String, value: Number): Unit = set(Name.parse(key), value.asValue()) + +public operator fun MutableValueProvider.set(name: Name, value: List): Unit = set(name, value.asValue()) +public operator fun MutableValueProvider.set(name: NameToken, value: List): Unit = set(name.asName(), value.asValue()) +public operator fun MutableValueProvider.set(key: String, value: List): Unit = set(Name.parse(key), value.asValue()) diff --git a/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/ConfigTest.kt b/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/ConfigTest.kt index a2117abf..4e791d45 100644 --- a/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/ConfigTest.kt +++ b/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/ConfigTest.kt @@ -1,5 +1,6 @@ package space.kscience.dataforge.meta +import space.kscience.dataforge.values.set import kotlin.test.Test import kotlin.test.assertEquals diff --git a/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/MetaBuilderTest.kt b/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/MetaBuilderTest.kt index 3667110f..eb0d809b 100644 --- a/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/MetaBuilderTest.kt +++ b/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/MetaBuilderTest.kt @@ -2,6 +2,7 @@ package space.kscience.dataforge.meta import space.kscience.dataforge.values.Value import space.kscience.dataforge.values.asValue +import space.kscience.dataforge.values.set import kotlin.test.Test import kotlin.test.assertEquals @@ -25,9 +26,9 @@ class MetaBuilderTest { } @Test - fun testSNS(){ + fun testSNS() { val meta = Meta { - repeat(10){ + repeat(10) { "b.a[$it]" put it } }.seal() diff --git a/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/MetaDelegateTest.kt b/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/MetaDelegateTest.kt index 7a2dbc22..7079d67c 100644 --- a/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/MetaDelegateTest.kt +++ b/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/MetaDelegateTest.kt @@ -1,5 +1,6 @@ package space.kscience.dataforge.meta +import space.kscience.dataforge.values.set import kotlin.test.Test import kotlin.test.assertEquals diff --git a/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/MetaTest.kt b/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/MetaTest.kt index f88bc307..ae17cffc 100644 --- a/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/MetaTest.kt +++ b/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/MetaTest.kt @@ -4,6 +4,7 @@ import space.kscience.dataforge.misc.DFExperimental import space.kscience.dataforge.values.NumberValue import space.kscience.dataforge.values.True import space.kscience.dataforge.values.Value +import space.kscience.dataforge.values.set import kotlin.test.Test import kotlin.test.assertEquals diff --git a/dataforge-output/build.gradle.kts b/dataforge-output/build.gradle.kts index 7faac326..a858ff93 100644 --- a/dataforge-output/build.gradle.kts +++ b/dataforge-output/build.gradle.kts @@ -1,6 +1,6 @@ plugins { - id("ru.mipt.npm.gradle.mpp") - id("ru.mipt.npm.gradle.native") + id("space.kscience.gradle.mpp") + id("space.kscience.gradle.native") } kotlin { diff --git a/dataforge-scripting/build.gradle.kts b/dataforge-scripting/build.gradle.kts index a538a980..c33898c1 100644 --- a/dataforge-scripting/build.gradle.kts +++ b/dataforge-scripting/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("ru.mipt.npm.gradle.mpp") + id("space.kscience.gradle.mpp") } kotlin { @@ -25,5 +25,5 @@ kotlin { } readme{ - maturity = ru.mipt.npm.gradle.Maturity.PROTOTYPE + maturity = space.kscience.gradle.Maturity.PROTOTYPE } \ No newline at end of file diff --git a/dataforge-workspace/build.gradle.kts b/dataforge-workspace/build.gradle.kts index 5a8f911f..1ab9f957 100644 --- a/dataforge-workspace/build.gradle.kts +++ b/dataforge-workspace/build.gradle.kts @@ -1,6 +1,6 @@ plugins { - id("ru.mipt.npm.gradle.mpp") - id("ru.mipt.npm.gradle.native") + id("space.kscience.gradle.mpp") + id("space.kscience.gradle.native") } kscience{ @@ -20,5 +20,5 @@ kotlin { } readme{ - maturity = ru.mipt.npm.gradle.Maturity.EXPERIMENTAL + maturity = space.kscience.gradle.Maturity.EXPERIMENTAL } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index b0680497..4ec08ab4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,6 +3,6 @@ org.gradle.jvmargs=-Xmx4096m kotlin.code.style=official kotlin.mpp.stability.nowarn=true -#kotlin.incremental.js.ir=true +kotlin.incremental.js.ir=true -toolsVersion=0.11.7-kotlin-1.7.0 +toolsVersion=0.12.0-kotlin-1.7.20-Beta diff --git a/settings.gradle.kts b/settings.gradle.kts index a19ee5f0..83dc4201 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,10 +15,10 @@ pluginManagement { } plugins { - id("ru.mipt.npm.gradle.project") version toolsVersion - id("ru.mipt.npm.gradle.mpp") version toolsVersion - id("ru.mipt.npm.gradle.jvm") version toolsVersion - id("ru.mipt.npm.gradle.js") version toolsVersion + id("space.kscience.gradle.project") version toolsVersion + id("space.kscience.gradle.mpp") version toolsVersion + id("space.kscience.gradle.jvm") version toolsVersion + id("space.kscience.gradle.js") version toolsVersion } } @@ -34,7 +34,7 @@ dependencyResolutionManagement { versionCatalogs { create("npmlibs") { - from("ru.mipt.npm:version-catalog:$toolsVersion") + from("space.kscience:version-catalog:$toolsVersion") } } }