
net.pechorina.kairos.automat.builder.AutomatConfigurer.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kairos-automat Show documentation
Show all versions of kairos-automat Show documentation
Kairos Automat is a finite-state machine library
The newest version!
package net.pechorina.kairos.automat.builder
import net.pechorina.kairos.automat.Automat
import net.pechorina.kairos.automat.State
import net.pechorina.kairos.automat.Transition
import java.util.UUID
class AutomatConfigurer(val builder: AutomatBuilder) {
internal var logging: Boolean = false
internal var id: String = UUID.randomUUID().toString()
internal var name: String? = null
private val stateConfigurer = StateConfigurer()
private val transitionConfigurer = TransitionConfigurer()
fun enableLogging(): AutomatConfigurer {
this.logging = true
return this
}
fun withId(id: String): AutomatConfigurer {
this.id = id
return this
}
fun withName(name: String): AutomatConfigurer {
this.name = name
return this
}
fun configureStates(): StateConfigurer {
return stateConfigurer
}
fun configureTransitions(): TransitionConfigurer {
return transitionConfigurer
}
fun getStateConfigs(): Set> {
return stateConfigurer.states.toSet()
}
fun getStates(): Set> {
return getStateConfigs().map { it.asState() }.toSet()
}
fun getTransitions(stateFinder: (state: S) -> State): Set> {
return transitionConfigurer.transitionConfigs
.map { it.asTransition(stateFinder) }
.toSet()
}
fun getChildParentPairs(stateFinder: (state: S) -> State): Set, State>> {
return getStateConfigs().filter { it.hasParent() }
.map { it.getChildParentPair(stateFinder) }
.toSet()
}
fun build(): Automat {
return this.builder.build()
}
}