diff --git a/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataFilter.kt b/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataFilter.kt index a23b550d..987d8412 100644 --- a/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataFilter.kt +++ b/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataFilter.kt @@ -5,12 +5,23 @@ import hep.dataforge.names.toName class DataFilter(override val config: Config) : Specific { + /** + * A source node for the filter + */ var from by string() + /** + * A target placement for the filtered node + */ var to by string() + /** + * A regular expression pattern for the filter + */ var pattern by string("*.") // val prefix by string() // val suffix by string() + fun isEmpty(): Boolean = config.isEmpty() + companion object : Specification { override fun wrap(config: Config): DataFilter = DataFilter(config) } diff --git a/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataNode.kt b/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataNode.kt index 108d9f97..a66cff88 100644 --- a/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataNode.kt +++ b/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataNode.kt @@ -72,6 +72,8 @@ operator fun DataNode.get(name: Name): DataItem? = when (name.le else -> get(name.first()!!.asName()).node?.get(name.cutFirst()) } +operator fun DataNode.get(name: String): DataItem? = get(name.toString()) + /** * Sequence of all children including nodes */ diff --git a/dataforge-data/src/jvmMain/kotlin/hep/dataforge/data/CastDataNode.kt b/dataforge-data/src/jvmMain/kotlin/hep/dataforge/data/CastDataNode.kt index 01938ddb..c6451518 100644 --- a/dataforge-data/src/jvmMain/kotlin/hep/dataforge/data/CastDataNode.kt +++ b/dataforge-data/src/jvmMain/kotlin/hep/dataforge/data/CastDataNode.kt @@ -8,7 +8,7 @@ import kotlin.reflect.KClass import kotlin.reflect.full.isSubclassOf @Suppress("UNCHECKED_CAST") -private fun Data.safeCast(type: KClass): Data? { +fun Data.safeCast(type: KClass): Data? { return if (this.type.isSubclassOf(type)) { return object : Data { override val meta: Meta get() = this@safeCast.meta @@ -23,6 +23,8 @@ private fun Data.safeCast(type: KClass): Data? { } } +inline fun Data<*>.safeCast(): Data? = safeCast(R::class) + class CastDataNode(val origin: DataNode, override val type: KClass) : DataNode { override val items: Map> by lazy { origin.items.mapNotNull { (key, item) -> diff --git a/dataforge-io/build.gradle.kts b/dataforge-io/build.gradle.kts index ce3a8be8..8a997017 100644 --- a/dataforge-io/build.gradle.kts +++ b/dataforge-io/build.gradle.kts @@ -15,18 +15,16 @@ kotlin { commonMain{ dependencies { api(project(":dataforge-context")) - api("org.jetbrains.kotlinx:kotlinx-io:0.1.14") } } jvmMain{ dependencies { - api("org.jetbrains.kotlinx:kotlinx-io-jvm:0.1.14") + } } jsMain{ dependencies{ - //api(npm("text-encoding")) - api("org.jetbrains.kotlinx:kotlinx-io-js:0.1.14") + api(npm("text-encoding")) } } } diff --git a/dataforge-workspace/src/commonMain/kotlin/hep/dataforge/workspace/TaskModel.kt b/dataforge-workspace/src/commonMain/kotlin/hep/dataforge/workspace/TaskModel.kt index cda164c7..e7443807 100644 --- a/dataforge-workspace/src/commonMain/kotlin/hep/dataforge/workspace/TaskModel.kt +++ b/dataforge-workspace/src/commonMain/kotlin/hep/dataforge/workspace/TaskModel.kt @@ -12,6 +12,7 @@ import hep.dataforge.data.dataSequence import hep.dataforge.meta.* import hep.dataforge.names.EmptyName import hep.dataforge.names.Name +import hep.dataforge.names.asName import hep.dataforge.names.toName import hep.dataforge.workspace.TaskModel.Companion.MODEL_TARGET_KEY @@ -43,7 +44,7 @@ data class TaskModel( } 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) = - dependsOn(name.toName(),meta,placement) + dependsOn(name.toName(), meta, placement) fun dependsOn(task: Task<*>, meta: Meta = this.meta, placement: Name = EmptyName) { dependencies.add(DirectTaskDependency(task, meta, placement))