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.

39 lines
1.4 KiB
Kotlin

package me.eater.hefbrug.definition.impl
import me.eater.hefbrug.collector.impl.ServiceCollector
import me.eater.hefbrug.definition.AbstractDefinition
import me.eater.hefbrug.definition.DefinitionFactory
import me.eater.hefbrug.definition.DefinitionKeyAction
import me.eater.hefbrug.dsl.context.impl.ServiceContext
import me.eater.hefbrug.enforcer.impl.ServiceEnforcer
import me.eater.hefbrug.executor.ExecutionContext
import me.eater.hefbrug.state.impl.ServiceState
class ServiceDefinition(id: String) :
AbstractDefinition<ServiceState, ServiceContext>(factory.key(id), ServiceState(id)) {
override fun getContext(): ServiceContext = ServiceContext(this)
class Factory : DefinitionFactory<ServiceState, ServiceContext, ServiceDefinition>("service", ::ServiceDefinition) {
override fun key(id: String) = Key(this.id, id, "default")
override fun createCollector(context: ExecutionContext): ServiceCollector =
ServiceCollector(context)
override fun createEnforcer(context: ExecutionContext): ServiceEnforcer =
ServiceEnforcer(context)
}
class Key(name: String, id: String, action: String) : DefinitionKeyAction(name, id, action) {
fun reload() = Key(group, id, "reload")
fun restart() = Key(group, id, "restart")
}
object KeyHelper {
operator fun get(id: String) = factory.key(id)
}
companion object {
val factory: Factory =
Factory()
}
}