package Ġio . just dev it . libs . state machine Ċ Ċ import Ġjava . util . UUID Ċ Ċ /** Ċ Ġ* ĠRepresents Ġthe ĠState ĠMachine . Ċ Ġ*/ Ċ interface ĠState Machine < S , Ġin ĠE > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠID Ġof Ġthe Ġstate Ġmachine . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġid : ĠUUID ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠActual Ġstate Ġof Ġthe ĠState ĠMachine . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġactual State : ĠS ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefines Ġif Ġthe ĠState ĠMachine Ġis Ġin Ġthe Ġfinal Ġstate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġfinished : ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarts Ġthe ĠState ĠMachine . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstate ĠState Ġto Ġbe Ġon Ġstart . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstart ( state : ĠS ? Ġ= Ġnull ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe sets Ġstate Ġof Ġthe ĠState ĠMachine Ġto Ġthe Ġinitial Ġstate Ġor Ġdefined Ġstate Ġif Ġstate Ġ. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstate ĠState Ġto Ġbe Ġon Ġreset . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalStateException ĠIn Ġcase Ġof Ġthe ĠState ĠMachine Ġis Ġnot Ġstarted . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġreset ( state : ĠS ? Ġ= Ġnull ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġthe Ġevent Ġto Ġthe ĠState ĠMachine . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġevent ĠEvent Ġfor Ġthe ĠState ĠMachine . ĠShould Ġbe Ġof Ġgeneric Ġtype . ĊĠĠĠĠ Ġ* Ġ@ param Ġparameters ĠMetadata Ġparameter Ġmap . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalStateException ĠIn Ġcase Ġof Ġthe ĠState ĠMachine Ġis Ġnot Ġstarted . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsend Event ( event : ĠE , Ġparameters : ĠMap < String , ĠAny > Ġ= Ġempty Map ()): ĠEvent Result Ċ } Ċ