Convenience methods to access DataNode elements
This commit is contained in:
parent
c44e004495
commit
b730d49e6e
@ -5,12 +5,23 @@ import hep.dataforge.names.toName
|
|||||||
|
|
||||||
|
|
||||||
class DataFilter(override val config: Config) : Specific {
|
class DataFilter(override val config: Config) : Specific {
|
||||||
|
/**
|
||||||
|
* A source node for the filter
|
||||||
|
*/
|
||||||
var from by string()
|
var from by string()
|
||||||
|
/**
|
||||||
|
* A target placement for the filtered node
|
||||||
|
*/
|
||||||
var to by string()
|
var to by string()
|
||||||
|
/**
|
||||||
|
* A regular expression pattern for the filter
|
||||||
|
*/
|
||||||
var pattern by string("*.")
|
var pattern by string("*.")
|
||||||
// val prefix by string()
|
// val prefix by string()
|
||||||
// val suffix by string()
|
// val suffix by string()
|
||||||
|
|
||||||
|
fun isEmpty(): Boolean = config.isEmpty()
|
||||||
|
|
||||||
companion object : Specification<DataFilter> {
|
companion object : Specification<DataFilter> {
|
||||||
override fun wrap(config: Config): DataFilter = DataFilter(config)
|
override fun wrap(config: Config): DataFilter = DataFilter(config)
|
||||||
}
|
}
|
||||||
|
@ -72,6 +72,8 @@ operator fun <T : Any> DataNode<T>.get(name: Name): DataItem<T>? = when (name.le
|
|||||||
else -> get(name.first()!!.asName()).node?.get(name.cutFirst())
|
else -> get(name.first()!!.asName()).node?.get(name.cutFirst())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
operator fun <T : Any> DataNode<T>.get(name: String): DataItem<T>? = get(name.toString())
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sequence of all children including nodes
|
* Sequence of all children including nodes
|
||||||
*/
|
*/
|
||||||
|
@ -8,7 +8,7 @@ import kotlin.reflect.KClass
|
|||||||
import kotlin.reflect.full.isSubclassOf
|
import kotlin.reflect.full.isSubclassOf
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
private fun <T : Any, R : Any> Data<T>.safeCast(type: KClass<out R>): Data<R>? {
|
fun <T : Any, R : Any> Data<T>.safeCast(type: KClass<out R>): Data<R>? {
|
||||||
return if (this.type.isSubclassOf(type)) {
|
return if (this.type.isSubclassOf(type)) {
|
||||||
return object : Data<R> {
|
return object : Data<R> {
|
||||||
override val meta: Meta get() = this@safeCast.meta
|
override val meta: Meta get() = this@safeCast.meta
|
||||||
@ -23,6 +23,8 @@ private fun <T : Any, R : Any> Data<T>.safeCast(type: KClass<out R>): Data<R>? {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline fun <reified R : Any> Data<*>.safeCast(): Data<R>? = safeCast(R::class)
|
||||||
|
|
||||||
class CastDataNode<out T : Any>(val origin: DataNode<Any>, override val type: KClass<out T>) : DataNode<T> {
|
class CastDataNode<out T : Any>(val origin: DataNode<Any>, override val type: KClass<out T>) : DataNode<T> {
|
||||||
override val items: Map<NameToken, DataItem<T>> by lazy {
|
override val items: Map<NameToken, DataItem<T>> by lazy {
|
||||||
origin.items.mapNotNull { (key, item) ->
|
origin.items.mapNotNull { (key, item) ->
|
||||||
|
@ -15,18 +15,16 @@ kotlin {
|
|||||||
commonMain{
|
commonMain{
|
||||||
dependencies {
|
dependencies {
|
||||||
api(project(":dataforge-context"))
|
api(project(":dataforge-context"))
|
||||||
api("org.jetbrains.kotlinx:kotlinx-io:0.1.14")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jvmMain{
|
jvmMain{
|
||||||
dependencies {
|
dependencies {
|
||||||
api("org.jetbrains.kotlinx:kotlinx-io-jvm:0.1.14")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jsMain{
|
jsMain{
|
||||||
dependencies{
|
dependencies{
|
||||||
//api(npm("text-encoding"))
|
api(npm("text-encoding"))
|
||||||
api("org.jetbrains.kotlinx:kotlinx-io-js:0.1.14")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ import hep.dataforge.data.dataSequence
|
|||||||
import hep.dataforge.meta.*
|
import hep.dataforge.meta.*
|
||||||
import hep.dataforge.names.EmptyName
|
import hep.dataforge.names.EmptyName
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
|
import hep.dataforge.names.asName
|
||||||
import hep.dataforge.names.toName
|
import hep.dataforge.names.toName
|
||||||
import hep.dataforge.workspace.TaskModel.Companion.MODEL_TARGET_KEY
|
import hep.dataforge.workspace.TaskModel.Companion.MODEL_TARGET_KEY
|
||||||
|
|
||||||
@ -43,7 +44,7 @@ data class TaskModel(
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val MODEL_TARGET_KEY = "@target"
|
val MODEL_TARGET_KEY = "@target".asName()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +84,7 @@ class TaskModelBuilder(val name: Name, meta: Meta = EmptyMeta) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun dependsOn(name: String, meta: Meta = this.meta, placement: Name = EmptyName) =
|
fun dependsOn(name: String, meta: Meta = this.meta, placement: Name = EmptyName) =
|
||||||
dependsOn(name.toName(),meta,placement)
|
dependsOn(name.toName(), meta, placement)
|
||||||
|
|
||||||
fun dependsOn(task: Task<*>, meta: Meta = this.meta, placement: Name = EmptyName) {
|
fun dependsOn(task: Task<*>, meta: Meta = this.meta, placement: Name = EmptyName) {
|
||||||
dependencies.add(DirectTaskDependency(task, meta, placement))
|
dependencies.add(DirectTaskDependency(task, meta, placement))
|
||||||
|
Loading…
Reference in New Issue
Block a user