diff --git a/dataforge-workspace/src/commonMain/kotlin/hep/dataforge/workspace/WorkspacePlugin.kt b/dataforge-workspace/src/commonMain/kotlin/hep/dataforge/workspace/WorkspacePlugin.kt new file mode 100644 index 00000000..7f808166 --- /dev/null +++ b/dataforge-workspace/src/commonMain/kotlin/hep/dataforge/workspace/WorkspacePlugin.kt @@ -0,0 +1,28 @@ +package hep.dataforge.workspace + +import hep.dataforge.context.AbstractPlugin +import hep.dataforge.names.Name +import hep.dataforge.names.toName + +/** + * An abstract plugin with some additional boilerplate to effectively work with workspace context + */ +abstract class WorkspacePlugin : AbstractPlugin() { + abstract val tasks: Collection> + + override fun provideTop(target: String, name: Name): Any? { + return if (target == Task.TYPE) { + tasks.find { it.name == name.toString() } + } else { + super.provideTop(target, name) + } + } + + override fun listNames(target: String): Sequence { + return if (target == Task.TYPE) { + tasks.asSequence().map { it.name.toName() } + } else { + return super.listNames(target) + } + } +} \ No newline at end of file diff --git a/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/SimpleWorkspaceTest.kt b/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/SimpleWorkspaceTest.kt index ff57c53b..962dab53 100644 --- a/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/SimpleWorkspaceTest.kt +++ b/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/SimpleWorkspaceTest.kt @@ -1,20 +1,17 @@ package hep.dataforge.workspace -import hep.dataforge.context.AbstractPlugin import hep.dataforge.context.PluginTag import hep.dataforge.data.first import hep.dataforge.data.get import hep.dataforge.meta.boolean import hep.dataforge.meta.get -import hep.dataforge.names.Name -import hep.dataforge.names.toName import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertTrue class SimpleWorkspaceTest { - val testPlugin = object : AbstractPlugin() { + val testPlugin = object : WorkspacePlugin() { override val tag: PluginTag = PluginTag("test") val contextTask = Workspace.task("test") { @@ -22,28 +19,12 @@ class SimpleWorkspaceTest { context.logger.info { "Test: $it" } } } - - override fun provideTop(target: String, name: Name): Any? { - return if (target == Task.TYPE && name == "test".toName()) { - contextTask - } else { - null - } - } - - override fun listNames(target: String): Sequence { - return if(target== Task.TYPE){ - sequenceOf(contextTask.name.toName()) - } else{ - emptySequence() - } - } - + override val tasks: Collection> = listOf(contextTask) } val workspace = SimpleWorkspace.build { - context{ + context { plugin(testPlugin) }