11package io.github.ngirchev.fsm.impl
22
3- import mu.KLogging
43import io.github.ngirchev.fsm.*
54import io.github.ngirchev.fsm.exception.FsmException
65import io.github.ngirchev.fsm.exception.FsmTransitionFailedException
6+ import org.slf4j.LoggerFactory
77import java.util.concurrent.CopyOnWriteArrayList
88
99/* *
@@ -12,20 +12,24 @@ import java.util.concurrent.CopyOnWriteArrayList
1212abstract class AbstractFsm <STATE , TRANSITION : AbstractTransition <STATE >, TRANSITION_TABLE : AbstractTransitionTable <STATE , TRANSITION >>(
1313 context : StateContext <STATE >,
1414 open val transitionTable : TRANSITION_TABLE ,
15- autoTransitionEnabled : Boolean? = null
16- ) : StateSupport<STATE>, TransitionSupport<STATE, TRANSITION>, Notifiable<STATE> {
17-
18- companion object : KLogging ()
15+ autoTransitionEnabled : Boolean? = null ,
16+ ) : StateSupport<STATE>,
17+ TransitionSupport <STATE , TRANSITION >,
18+ Notifiable <STATE > {
19+ companion object {
20+ private val logger = LoggerFactory .getLogger(AbstractFsm ::class .java)
21+ }
1922
2023 /* *
2124 * Enable auto transitions based on transition table.
2225 */
2326 val autoTransitionEnabled: Boolean
2427
2528 init {
26- val overrideAutoTransition = autoTransitionEnabled ? : run {
27- transitionTable.autoTransitionEnabled
28- }
29+ val overrideAutoTransition =
30+ autoTransitionEnabled ? : run {
31+ transitionTable.autoTransitionEnabled
32+ }
2933 this .autoTransitionEnabled = overrideAutoTransition
3034 }
3135
@@ -36,14 +40,12 @@ abstract class AbstractFsm<STATE, TRANSITION : AbstractTransition<STATE>, TRANSI
3640 ) : this (
3741 DefaultStateContext (state),
3842 transitionTable,
39- autoTransitionEnabled
43+ autoTransitionEnabled,
4044 )
4145
4246 internal val context: StateContext <STATE > = context
4347
44- override fun getState (): STATE {
45- return this .context.state
46- }
48+ override fun getState (): STATE = this .context.state
4749
4850 private val stateChangeListeners = CopyOnWriteArrayList <StateChangeListener <STATE >>()
4951
@@ -55,13 +57,17 @@ abstract class AbstractFsm<STATE, TRANSITION : AbstractTransition<STATE>, TRANSI
5557 stateChangeListeners.remove(listener)
5658 }
5759
58- override fun notify (context : StateContext <STATE >, oldState : STATE , newState : STATE ) {
59- logger.info { " Changed status $oldState -> $newState " }
60+ override fun notify (
61+ context : StateContext <STATE >,
62+ oldState : STATE ,
63+ newState : STATE ,
64+ ) {
65+ logger.info(" Changed status {} -> {}" , oldState, newState)
6066 stateChangeListeners.forEach { listener ->
6167 try {
6268 listener.onStateChanged(context, oldState, newState)
6369 } catch (e: Exception ) {
64- logger.error(e) { " Error in state change listener" }
70+ logger.error(" Error in state change listener" , e)
6571 }
6672 }
6773 }
@@ -82,10 +88,12 @@ abstract class AbstractFsm<STATE, TRANSITION : AbstractTransition<STATE>, TRANSI
8288
8389 private fun executeSingleTransition (transition : TRANSITION ) {
8490 val oldState = context.state
85- if (transition.from != oldState) throw FsmException (
86- " Current state $oldState doesn't fit " +
87- " to change, because transition from=[${transition.from} ]"
88- )
91+ if (transition.from != oldState) {
92+ throw FsmException (
93+ " Current state $oldState doesn't fit " +
94+ " to change, because transition from=[${transition.from} ]" ,
95+ )
96+ }
8997 transition.to.timeout?.value?.also {
9098 Thread .sleep(it * 1000 )
9199 }
@@ -104,7 +112,7 @@ abstract class AbstractFsm<STATE, TRANSITION : AbstractTransition<STATE>, TRANSI
104112 val newState = transition.to.state
105113
106114 context.currentTransition = transition
107- logger.info { " Try to change status $oldState -> $newState " }
115+ logger.info( " Try to change status {} -> {} " , oldState, newState)
108116
109117 transition.to.actions.forEach { it.invoke(context) }
110118 context.state = newState
@@ -114,6 +122,6 @@ abstract class AbstractFsm<STATE, TRANSITION : AbstractTransition<STATE>, TRANSI
114122
115123 private class DefaultStateContext <STATE >(
116124 override var state : STATE ,
117- override var currentTransition : Transition <STATE >? = null
125+ override var currentTransition : Transition <STATE >? = null ,
118126 ) : StateContext<STATE>
119127}
0 commit comments