All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.pechorina.kairos.automat.builder.AutomatConfigurer.kt Maven / Gradle / Ivy

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()
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy