kotlin
This commit is contained in:
17
state_machines/kotlin_simple_state_machine/build.gradle.kts
Normal file
17
state_machines/kotlin_simple_state_machine/build.gradle.kts
Normal file
@@ -0,0 +1,17 @@
|
||||
plugins {
|
||||
kotlin("jvm") version "1.9.22"
|
||||
id("org.springframework.boot") version "3.2.3"
|
||||
id("io.spring.dependency-management") version "1.1.4"
|
||||
}
|
||||
|
||||
group = "click.kamil"
|
||||
version = "1.0-SNAPSHOT"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.springframework.statemachine:spring-statemachine-core:3.2.1")
|
||||
implementation("org.jetbrains.kotlin:kotlin-reflect")
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package click.kamil
|
||||
|
||||
import org.springframework.statemachine.config.EnableStateMachine
|
||||
import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter
|
||||
import org.springframework.statemachine.config.builders.StateMachineStateConfigurer
|
||||
import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer
|
||||
|
||||
enum class OrderState { NEW, PROCESSING, SHIPPED, COMPLETED }
|
||||
enum class OrderEvent { PAY, SHIP, DELIVER }
|
||||
|
||||
@EnableStateMachine
|
||||
class OrderStateMachine : EnumStateMachineConfigurerAdapter<OrderState, OrderEvent>() {
|
||||
|
||||
override fun configure(states: StateMachineStateConfigurer<OrderState, OrderEvent>) {
|
||||
states
|
||||
.withStates()
|
||||
.initial(OrderState.NEW)
|
||||
.states(setOf(OrderState.NEW, OrderState.PROCESSING, OrderState.SHIPPED, OrderState.COMPLETED))
|
||||
}
|
||||
|
||||
override fun configure(transitions: StateMachineTransitionConfigurer<OrderState, OrderEvent>) {
|
||||
transitions
|
||||
.withExternal()
|
||||
.source(OrderState.NEW).target(OrderState.PROCESSING)
|
||||
.event(OrderEvent.PAY)
|
||||
.action { println("Payment received") }
|
||||
.and()
|
||||
.withExternal()
|
||||
.source(OrderState.PROCESSING).target(OrderState.SHIPPED)
|
||||
.event(OrderEvent.SHIP)
|
||||
.guard { true }
|
||||
.and()
|
||||
.withExternal()
|
||||
.source(OrderState.SHIPPED).target(OrderState.COMPLETED)
|
||||
.event(OrderEvent.DELIVER)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user