You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

24 lines
869 B
Kotlin

package me.eater.hefbrug.definition
import me.eater.hefbrug.collector.AbstractCollector
import me.eater.hefbrug.dsl.context.DefinitionContextSkeleton
import me.eater.hefbrug.dsl.context.extension_util.FactoryRegister
import me.eater.hefbrug.enforcer.AbstractEnforcer
import me.eater.hefbrug.executor.ExecutionContext
import me.eater.hefbrug.state.AbstractState
abstract class DefinitionFactory<S : AbstractState, C : DefinitionContextSkeleton<S>, D : DefinitionSkeleton<S, C>>(
val id: String,
val builder: (String) -> D
) {
fun build(id: String): D = builder(id)
open fun key(id: String): DefinitionKey = DefinitionKey(this.id, id)
abstract fun createCollector(context: ExecutionContext): AbstractCollector<S, D>
abstract fun createEnforcer(context: ExecutionContext): AbstractEnforcer<S>
init {
FactoryRegister += this
}
}