Cache descriptor defaults
This commit is contained in:
parent
3e8421187f
commit
0acb6ec448
@ -4,6 +4,7 @@
|
|||||||
### Added
|
### Added
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
- **API breaking** Descriptor no has a member property `defaultValue` instead of `defaultItem()` extension. It cahces default value state on the first call. It is done because computing default on each call is too expensive.
|
||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ plugins {
|
|||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
group = "space.kscience"
|
group = "space.kscience"
|
||||||
version = "0.4.0"
|
version = "0.4.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
subprojects {
|
subprojects {
|
||||||
|
@ -501,15 +501,11 @@ public abstract interface class space/kscience/dataforge/meta/descriptors/Descri
|
|||||||
public final class space/kscience/dataforge/meta/descriptors/Described$Companion {
|
public final class space/kscience/dataforge/meta/descriptors/Described$Companion {
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class space/kscience/dataforge/meta/descriptors/DescriptorMetaKt {
|
|
||||||
public static final fun defaultItem (Lspace/kscience/dataforge/meta/descriptors/ItemDescriptor;)Lspace/kscience/dataforge/meta/TypedMetaItem;
|
|
||||||
public static final fun defaultMeta (Lspace/kscience/dataforge/meta/descriptors/NodeDescriptor;)Lspace/kscience/dataforge/meta/Laminate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract interface class space/kscience/dataforge/meta/descriptors/ItemDescriptor : space/kscience/dataforge/meta/MetaRepr {
|
public abstract interface class space/kscience/dataforge/meta/descriptors/ItemDescriptor : space/kscience/dataforge/meta/MetaRepr {
|
||||||
public static final field Companion Lspace/kscience/dataforge/meta/descriptors/ItemDescriptor$Companion;
|
public static final field Companion Lspace/kscience/dataforge/meta/descriptors/ItemDescriptor$Companion;
|
||||||
public static final field DEFAULT_INDEX_KEY Ljava/lang/String;
|
public static final field DEFAULT_INDEX_KEY Ljava/lang/String;
|
||||||
public abstract fun getAttributes ()Lspace/kscience/dataforge/meta/Meta;
|
public abstract fun getAttributes ()Lspace/kscience/dataforge/meta/Meta;
|
||||||
|
public abstract fun getDefaultValue ()Lspace/kscience/dataforge/meta/TypedMetaItem;
|
||||||
public abstract fun getIndexKey ()Ljava/lang/String;
|
public abstract fun getIndexKey ()Ljava/lang/String;
|
||||||
public abstract fun getInfo ()Ljava/lang/String;
|
public abstract fun getInfo ()Ljava/lang/String;
|
||||||
public abstract fun getMultiple ()Z
|
public abstract fun getMultiple ()Z
|
||||||
@ -552,6 +548,7 @@ public final class space/kscience/dataforge/meta/descriptors/ItemDescriptorKt {
|
|||||||
|
|
||||||
public abstract interface class space/kscience/dataforge/meta/descriptors/NodeDescriptor : space/kscience/dataforge/meta/descriptors/ItemDescriptor {
|
public abstract interface class space/kscience/dataforge/meta/descriptors/NodeDescriptor : space/kscience/dataforge/meta/descriptors/ItemDescriptor {
|
||||||
public static final field Companion Lspace/kscience/dataforge/meta/descriptors/NodeDescriptor$Companion;
|
public static final field Companion Lspace/kscience/dataforge/meta/descriptors/NodeDescriptor$Companion;
|
||||||
|
public fun defaultMeta ()Lspace/kscience/dataforge/meta/Laminate;
|
||||||
public abstract fun getDefault ()Lspace/kscience/dataforge/meta/Config;
|
public abstract fun getDefault ()Lspace/kscience/dataforge/meta/Config;
|
||||||
public abstract fun getItems ()Ljava/util/Map;
|
public abstract fun getItems ()Ljava/util/Map;
|
||||||
public abstract fun getNodes ()Ljava/util/Map;
|
public abstract fun getNodes ()Ljava/util/Map;
|
||||||
@ -570,6 +567,7 @@ public final class space/kscience/dataforge/meta/descriptors/NodeDescriptorBuild
|
|||||||
public synthetic fun build ()Lspace/kscience/dataforge/meta/descriptors/ItemDescriptor;
|
public synthetic fun build ()Lspace/kscience/dataforge/meta/descriptors/ItemDescriptor;
|
||||||
public fun build ()Lspace/kscience/dataforge/meta/descriptors/NodeDescriptor;
|
public fun build ()Lspace/kscience/dataforge/meta/descriptors/NodeDescriptor;
|
||||||
public fun getDefault ()Lspace/kscience/dataforge/meta/Config;
|
public fun getDefault ()Lspace/kscience/dataforge/meta/Config;
|
||||||
|
public fun getDefaultValue ()Lspace/kscience/dataforge/meta/TypedMetaItem;
|
||||||
public fun getItems ()Ljava/util/Map;
|
public fun getItems ()Ljava/util/Map;
|
||||||
public fun getNodes ()Ljava/util/Map;
|
public fun getNodes ()Ljava/util/Map;
|
||||||
public fun getRequired ()Z
|
public fun getRequired ()Z
|
||||||
@ -610,6 +608,7 @@ public final class space/kscience/dataforge/meta/descriptors/ValueDescriptorBuil
|
|||||||
public final fun default (Ljava/lang/Object;)V
|
public final fun default (Ljava/lang/Object;)V
|
||||||
public fun getAllowedValues ()Ljava/util/List;
|
public fun getAllowedValues ()Ljava/util/List;
|
||||||
public fun getDefault ()Lspace/kscience/dataforge/values/Value;
|
public fun getDefault ()Lspace/kscience/dataforge/values/Value;
|
||||||
|
public fun getDefaultValue ()Lspace/kscience/dataforge/meta/TypedMetaItem;
|
||||||
public fun getRequired ()Z
|
public fun getRequired ()Z
|
||||||
public fun getType ()Ljava/util/List;
|
public fun getType ()Ljava/util/List;
|
||||||
public fun isAllowedValue (Lspace/kscience/dataforge/values/Value;)Z
|
public fun isAllowedValue (Lspace/kscience/dataforge/values/Value;)Z
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
package space.kscience.dataforge.meta
|
package space.kscience.dataforge.meta
|
||||||
|
|
||||||
import space.kscience.dataforge.meta.descriptors.*
|
import space.kscience.dataforge.meta.descriptors.Described
|
||||||
|
import space.kscience.dataforge.meta.descriptors.NodeDescriptor
|
||||||
|
import space.kscience.dataforge.meta.descriptors.get
|
||||||
|
import space.kscience.dataforge.meta.descriptors.validateItem
|
||||||
import space.kscience.dataforge.names.Name
|
import space.kscience.dataforge.names.Name
|
||||||
import space.kscience.dataforge.names.NameToken
|
import space.kscience.dataforge.names.NameToken
|
||||||
import space.kscience.dataforge.names.asName
|
import space.kscience.dataforge.names.asName
|
||||||
@ -53,7 +56,7 @@ public open class Scheme() : Described, MetaRepr, ItemPropertyProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getDefaultItem(name: Name): MetaItem? {
|
private fun getDefaultItem(name: Name): MetaItem? {
|
||||||
return default?.get(name) ?: descriptor?.get(name)?.defaultItem()
|
return default?.get(name) ?: descriptor?.get(name)?.defaultValue
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -94,7 +97,7 @@ public open class Scheme() : Described, MetaRepr, ItemPropertyProvider {
|
|||||||
descriptor?.items?.forEach { (key, itemDescriptor) ->
|
descriptor?.items?.forEach { (key, itemDescriptor) ->
|
||||||
val token = NameToken(key)
|
val token = NameToken(key)
|
||||||
val name = token.asName()
|
val name = token.asName()
|
||||||
val item = default?.get(name) ?: itemDescriptor.defaultItem()
|
val item = default?.get(name) ?: itemDescriptor.defaultValue
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
put(token, item)
|
put(token, item)
|
||||||
}
|
}
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
package space.kscience.dataforge.meta.descriptors
|
|
||||||
|
|
||||||
import space.kscience.dataforge.meta.*
|
|
||||||
import space.kscience.dataforge.names.NameToken
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A [Meta] that is constructed from [NodeDescriptor]
|
|
||||||
*/
|
|
||||||
private class DescriptorMeta(val descriptor: NodeDescriptor) : Meta, MetaBase() {
|
|
||||||
override val items: Map<NameToken, MetaItem>
|
|
||||||
get() = buildMap {
|
|
||||||
descriptor.items.forEach { (token, descriptorItem) ->
|
|
||||||
val item = descriptorItem.defaultItem()
|
|
||||||
if (item != null) {
|
|
||||||
put(NameToken(token), item)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate a laminate representing default item set generated by this descriptor
|
|
||||||
*/
|
|
||||||
public fun NodeDescriptor.defaultMeta(): Laminate = Laminate(default, DescriptorMeta(this))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build a default [MetaItemNode] from this node descriptor
|
|
||||||
*/
|
|
||||||
internal fun NodeDescriptor.defaultItem(): MetaItemNode<*> =
|
|
||||||
MetaItemNode(defaultMeta())
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build a default [MetaItemValue] from this descriptor
|
|
||||||
*/
|
|
||||||
internal fun ValueDescriptor.defaultItem(): MetaItemValue? {
|
|
||||||
return MetaItemValue(default ?: return null)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build a default [TypedMetaItem] from descriptor.
|
|
||||||
*/
|
|
||||||
public fun ItemDescriptor.defaultItem(): MetaItem? {
|
|
||||||
return when (this) {
|
|
||||||
is ValueDescriptor -> defaultItem()
|
|
||||||
is NodeDescriptor -> defaultItem()
|
|
||||||
}
|
|
||||||
}
|
|
@ -37,6 +37,11 @@ public sealed interface ItemDescriptor: MetaRepr {
|
|||||||
*/
|
*/
|
||||||
public val indexKey: String
|
public val indexKey: String
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compute and cache the default [MetaItem] value described by this descriptor
|
||||||
|
*/
|
||||||
|
public val defaultValue: MetaItem?
|
||||||
|
|
||||||
public companion object {
|
public companion object {
|
||||||
public const val DEFAULT_INDEX_KEY: String = "@index"
|
public const val DEFAULT_INDEX_KEY: String = "@index"
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,22 @@ import space.kscience.dataforge.misc.DFBuilder
|
|||||||
import space.kscience.dataforge.names.*
|
import space.kscience.dataforge.names.*
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A [Meta] that is constructed from [NodeDescriptor]
|
||||||
|
*/
|
||||||
|
private class DescriptorMeta(val descriptor: NodeDescriptor) : Meta, MetaBase() {
|
||||||
|
override val items: Map<NameToken, MetaItem>
|
||||||
|
get() = buildMap {
|
||||||
|
descriptor.items.forEach { (token, descriptorItem) ->
|
||||||
|
val item = descriptorItem.defaultValue
|
||||||
|
if (item != null) {
|
||||||
|
put(NameToken(token), item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Descriptor for meta node. Could contain additional information for viewing
|
* Descriptor for meta node. Could contain additional information for viewing
|
||||||
* and editing.
|
* and editing.
|
||||||
@ -12,7 +28,7 @@ import space.kscience.dataforge.names.*
|
|||||||
* @author Alexander Nozik
|
* @author Alexander Nozik
|
||||||
*/
|
*/
|
||||||
@DFBuilder
|
@DFBuilder
|
||||||
public sealed interface NodeDescriptor: ItemDescriptor {
|
public sealed interface NodeDescriptor : ItemDescriptor {
|
||||||
/**
|
/**
|
||||||
* True if the node is required
|
* True if the node is required
|
||||||
*
|
*
|
||||||
@ -42,6 +58,11 @@ public sealed interface NodeDescriptor: ItemDescriptor {
|
|||||||
*/
|
*/
|
||||||
public val values: Map<String, ValueDescriptor>
|
public val values: Map<String, ValueDescriptor>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate a laminate representing default item set generated by this descriptor
|
||||||
|
*/
|
||||||
|
public fun defaultMeta(): Laminate = Laminate(default, DescriptorMeta(this))
|
||||||
|
|
||||||
public companion object {
|
public companion object {
|
||||||
|
|
||||||
internal val ITEM_KEY: Name = "item".asName()
|
internal val ITEM_KEY: Name = "item".asName()
|
||||||
@ -166,6 +187,11 @@ public class NodeDescriptorBuilder(config: Config = Config()) : ItemDescriptorBu
|
|||||||
value(name.toName(), block)
|
value(name.toName(), block)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build a default [MetaItemNode] from this node descriptor
|
||||||
|
*/
|
||||||
|
override val defaultValue: MetaItem by lazy { MetaItemNode(defaultMeta()) }
|
||||||
|
|
||||||
override fun build(): NodeDescriptor = NodeDescriptorBuilder(config.copy())
|
override fun build(): NodeDescriptor = NodeDescriptorBuilder(config.copy())
|
||||||
|
|
||||||
public companion object {
|
public companion object {
|
||||||
|
@ -131,5 +131,7 @@ public class ValueDescriptorBuilder(config: Config = Config()) : ItemDescriptorB
|
|||||||
this.allowedValues = v.map { Value.of(it) }
|
this.allowedValues = v.map { Value.of(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val defaultValue: MetaItem? get() = default?.asMetaItem()
|
||||||
|
|
||||||
override fun build(): ValueDescriptor = ValueDescriptorBuilder(config.copy())
|
override fun build(): ValueDescriptor = ValueDescriptorBuilder(config.copy())
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user