From d68fbfd8a5fc9e55e433ed409e544b0e0caa81c4 Mon Sep 17 00:00:00 2001 From: Alexander Nozik Date: Wed, 11 Nov 2020 10:54:52 +0300 Subject: [PATCH] Descriptor in SchemeSpec --- build.gradle.kts | 2 +- dataforge-meta/api/dataforge-meta.api | 10 ++++++---- .../kotlin/hep/dataforge/meta/Scheme.kt | 20 +++++++++++++------ 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 67b8fec3..3229c409 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ plugins { id("ru.mipt.npm.project") } -val dataforgeVersion by extra("0.2.0-dev-6") +val dataforgeVersion by extra("0.2.0-dev-7") val bintrayRepo by extra("dataforge") val githubProject by extra("dataforge-core") diff --git a/dataforge-meta/api/dataforge-meta.api b/dataforge-meta/api/dataforge-meta.api index 743f482a..f946f881 100644 --- a/dataforge-meta/api/dataforge-meta.api +++ b/dataforge-meta/api/dataforge-meta.api @@ -479,11 +479,11 @@ public class hep/dataforge/meta/Scheme : hep/dataforge/meta/Configurable, hep/da public fun ()V public fun (Lhep/dataforge/meta/Config;Lhep/dataforge/meta/ItemProvider;Lhep/dataforge/meta/descriptors/NodeDescriptor;)V public synthetic fun (Lhep/dataforge/meta/Config;Lhep/dataforge/meta/ItemProvider;Lhep/dataforge/meta/descriptors/NodeDescriptor;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun getConfig ()Lhep/dataforge/meta/Config; + public final fun getConfig ()Lhep/dataforge/meta/Config; public final fun getDefaultItem (Lhep/dataforge/names/Name;)Lhep/dataforge/meta/MetaItem; public fun getDefaultLayer ()Lhep/dataforge/meta/Meta; public synthetic fun getDescriptor ()Lhep/dataforge/meta/descriptors/ItemDescriptor; - public fun getDescriptor ()Lhep/dataforge/meta/descriptors/NodeDescriptor; + public final fun getDescriptor ()Lhep/dataforge/meta/descriptors/NodeDescriptor; public fun getItem (Lhep/dataforge/names/Name;)Lhep/dataforge/meta/MetaItem; public final fun isEmpty ()Z public fun setItem (Lhep/dataforge/names/Name;Lhep/dataforge/meta/MetaItem;)V @@ -499,9 +499,11 @@ public final class hep/dataforge/meta/SchemeKt { public static synthetic fun toScheme$default (Lhep/dataforge/meta/Meta;Lhep/dataforge/meta/Specification;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lhep/dataforge/meta/Configurable; } -public class hep/dataforge/meta/SchemeSpec : hep/dataforge/meta/Specification { +public class hep/dataforge/meta/SchemeSpec : hep/dataforge/meta/Specification, hep/dataforge/meta/descriptors/Described { public fun (Lkotlin/jvm/functions/Function0;)V - public fun (Lkotlin/jvm/functions/Function2;)V + public fun (Lkotlin/jvm/functions/Function3;)V + public synthetic fun getDescriptor ()Lhep/dataforge/meta/descriptors/ItemDescriptor; + public fun getDescriptor ()Lhep/dataforge/meta/descriptors/NodeDescriptor; public synthetic fun wrap (Lhep/dataforge/meta/Meta;Lhep/dataforge/meta/ItemProvider;)Lhep/dataforge/meta/MutableItemProvider; public fun wrap (Lhep/dataforge/meta/Meta;Lhep/dataforge/meta/ItemProvider;)Lhep/dataforge/meta/Scheme; } diff --git a/dataforge-meta/src/commonMain/kotlin/hep/dataforge/meta/Scheme.kt b/dataforge-meta/src/commonMain/kotlin/hep/dataforge/meta/Scheme.kt index a85e464f..7d982404 100644 --- a/dataforge-meta/src/commonMain/kotlin/hep/dataforge/meta/Scheme.kt +++ b/dataforge-meta/src/commonMain/kotlin/hep/dataforge/meta/Scheme.kt @@ -12,12 +12,16 @@ import hep.dataforge.names.asName public open class Scheme( config: Config = Config(), internal var default: ItemProvider? = null, - override val descriptor: NodeDescriptor? = null, + descriptor: NodeDescriptor? = null, ) : Configurable, Described, MetaRepr { override var config: Config = config internal set + override var descriptor: NodeDescriptor? = descriptor + internal set + + public fun getDefaultItem(name: Name): MetaItem<*>? { return default?.getItem(name) ?: descriptor?.get(name)?.defaultItem() } @@ -79,13 +83,14 @@ public inline operator fun T.invoke(block: T.() -> Unit): T = apply * A specification for simplified generation of wrappers */ public open class SchemeSpec( - private val builder: (config: Config, defaultProvider: ItemProvider) -> T, -) : Specification { + private val builder: (config: Config, defaultProvider: ItemProvider, descriptor: NodeDescriptor?) -> T, +) : Specification, Described { - public constructor(emptyBuilder: () -> T) : this({ config: Config, defaultProvider: ItemProvider -> + public constructor(emptyBuilder: () -> T) : this({ config: Config, defaultProvider: ItemProvider, descriptor: NodeDescriptor? -> emptyBuilder().apply { this.config = config this.default = defaultProvider + this.descriptor = descriptor } }) @@ -93,10 +98,13 @@ public open class SchemeSpec( * If the provided [Meta] is a [Config] use it as a scheme base, otherwise use it as default. */ override fun wrap(meta: Meta, defaultProvider: ItemProvider): T = if (meta is Config) { - builder(meta, defaultProvider) + builder(meta, defaultProvider, descriptor) } else { - builder(Config(), meta.withDefault(defaultProvider)) + builder(Config(), meta.withDefault(defaultProvider), descriptor) } + + //TODO Generate descriptor from Scheme class + override val descriptor: NodeDescriptor? get() = null } ///**