package Ġcom . just ai . ja ic f . builder Ċ Ċ import Ġcom . just ai . ja ic f . api . Bot Request Ċ import Ġcom . just ai . ja ic f . context . Action Context Ċ import Ġcom . just ai . ja ic f . context . Activator Context Ċ import Ġcom . just ai . ja ic f . generic . Activator Type Token Ċ import Ġcom . just ai . ja ic f . generic . Channel Type Token Ċ import Ġcom . just ai . ja ic f . generic . Context Type Token Ċ import Ġcom . just ai . ja ic f . helpers . logging . With Logger Ċ import Ġcom . just ai . ja ic f . hook . Bot Hook Ċ import Ġcom . just ai . ja ic f . hook . Bot Hook Listener Ċ import Ġcom . just ai . ja ic f . model . Action Adapter Ċ import Ġcom . just ai . ja ic f . model . Scenario Model Builder Ċ import Ġcom . just ai . ja ic f . model . scenario . Scenario Ċ import Ġcom . just ai . ja ic f . model . scenario . Scenario Model Ċ import Ġcom . just ai . ja ic f . model . state . State Ċ import Ġcom . just ai . ja ic f . model . state . State Path Ċ import Ġcom . just ai . ja ic f . model . transition . Transition Ċ import Ġcom . just ai . ja ic f . plugin . Path Value Ċ import Ġcom . just ai . ja ic f . plugin . State Body Ċ import Ġcom . just ai . ja ic f . plugin . State Declaration Ċ import Ġcom . just ai . ja ic f . plugin . State Name Ċ import Ġcom . just ai . ja ic f . reactions . Re actions Ċ import Ġkotlin . reflect . K Class Ċ Ċ @ Target ( Annotation Target . CLASS , ĠAnnotation Target . TYPE , ĠAnnotation Target . FUNCTION ) Ċ @ Dsl Marker Ċ annotation Ġclass ĠScenario Dsl Ċ Ċ @ Scenario Dsl Ċ sealed Ġclass ĠScenario Graph Builder < B Ġ: ĠBot Request , ĠR Ġ: ĠRe actions >( ĊĠĠĠ Ġ@ Suppress (" EXPOSE D _ PROPERTY _ TYPE _ IN _ CON STRUCTOR ") ĊĠĠĠ Ġprotected Ġval Ġscenario Model Builder : ĠScenario Model Builder , ĊĠĠĠ Ġprotected Ġval Ġchannel Token : ĠChannel Type Token < B , ĠR >, ĊĠĠĠ Ġprotected Ġval Ġpath : ĠState Path , ĊĠĠĠ Ġprotected Ġval Ġno Context : ĠBoolean , ĊĠĠĠ Ġprotected Ġval Ġmodal : ĠBoolean Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApp ends Ġan Ġinner Ġstate Ġto Ġthe Ġcurrent Ġstate . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname Ġa Ġname Ġof Ġthe Ġstate . ĠCould Ġbe Ġplain Ġtext Ġor Ġcontains Ġsl ashes Ġto Ġdefine Ġa Ġstate Ġpath ĊĠĠĠĠ Ġ* Ġ@ param Ġno Context Ġindicates Ġif Ġthis Ġstate Ġshould Ġnot Ġto Ġchange Ġthe Ġcurrent Ġdialogue 's Ġcontext ĊĠĠĠĠ Ġ* Ġ@ param Ġmodal Ġindicates Ġif Ġthis Ġstate Ġshould Ġprocess Ġthe Ġuser 's Ġrequest Ġin Ġmodal Ġmode Ġignoring Ġall Ġother Ġstates ĊĠĠĠĠ Ġ* Ġ@ param Ġbody Ġa Ġcode Ġblock Ġof Ġthe Ġstate Ġthat Ġcontains Ġactiv ators , Ġaction Ġand Ġinner Ġstates Ġdefinitions ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Scenario Dsl ĊĠĠĠ Ġ@ State Declaration ĊĠĠĠ Ġfun Ġstate ( ĊĠĠĠĠĠĠĠ Ġ@ State Name Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġno Context : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġmodal : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġ@ State Body Ġbody : ĠState Builder < B , ĠR >. () Ġ-> ĠUnit , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠState Builder ( scenario Model Builder , Ġchannel Token , Ġpath , Ġname , Ġno Context , Ġmodal ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( body ). build () ĊĠĠĠĠĠĠĠ Ġscenario Model Builder . states . add ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApp ends Ġa Ġfallback Ġstate Ġto Ġthe Ġscenario . ĊĠĠĠĠ Ġ* ĠThis Ġstate Ġwill Ġbe Ġactivated Ġfor Ġevery Ġrequest Ġthat Ġdoesn 't Ġmatch Ġto Ġany Ġother Ġstate . ĊĠĠĠĠ Ġ* ĠThe Ġcurrent Ġdialogue 's Ġcontext Ġwon 't Ġbe Ġchanged . ĊĠĠĠĠ Ġ* ĠThis Ġbuilder Ġrequires Ġa ĠCatch All Activator Ġto Ġbe Ġadded Ġto Ġthe Ġactiv ators Ġlist Ġof Ġyour ĠBot Engine Ġinstance . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġfallback Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġre actions . say (" Sorry , ĠI Ġdidn 't Ġget Ġit ...") ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname Ġan Ġoptional Ġstate Ġname Ġ(" fallback " Ġby Ġdefault ) ĊĠĠĠĠ Ġ* Ġ@ param Ġbody Ġan Ġaction Ġblock Ġthat Ġwill Ġbe Ġexecuted ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Scenario Dsl ĊĠĠĠ Ġ@ State Declaration ĊĠĠĠ Ġfun Ġfallback ( ĊĠĠĠĠĠĠĠ Ġ@ State Name Ġname : ĠString Ġ= Ġ" fallback ", ĊĠĠĠĠĠĠĠ Ġ@ State Body Ġbody : ĠAction Context < Activator Context , ĠB , ĠR >. () Ġ-> ĠUnit , ĊĠĠĠ Ġ) Ġ= Ġstate ( name , Ġno Context Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactiv ators Ġ{ Ġcatch All () Ġ} ĊĠĠĠĠĠĠĠ Ġaction ( body ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġchannel - specific Ġvariation Ġof Ġ[ fallback ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġfallback ( telegram ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġre actions . say (" Sorry , Ġ${ request . message . chat . firstName }, ĠI Ġdidn 't Ġget Ġit .") ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġchannel Token Ġa Ġtype Ġtoken Ġof Ġthe Ġchannel ĊĠĠĠĠ Ġ* Ġ@ param Ġname Ġan Ġoptional Ġstate Ġname Ġ(" fallback " Ġby Ġdefault ) ĊĠĠĠĠ Ġ* Ġ@ param Ġbody Ġan Ġaction Ġblock Ġthat Ġwill Ġbe Ġexecuted Ġonly Ġif Ġrequest Ġmatches Ġgiven Ġ[ channel Token ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Scenario Dsl ĊĠĠĠ Ġ@ State Declaration ĊĠĠĠ Ġfun Ġ< B 1 Ġ: ĠB , ĠR 1 Ġ: ĠR > Ġfallback ( ĊĠĠĠĠĠĠĠ Ġchannel Token : ĠChannel Type Token < B 1 , ĠR 1 >, ĊĠĠĠĠĠĠĠ Ġ@ State Name Ġname : ĠString Ġ= Ġ" fallback ", ĊĠĠĠĠĠĠĠ Ġ@ State Body Ġbody : ĠAction Context < Activator Context , ĠB 1 , ĠR 1 >. () Ġ-> ĠUnit , ĊĠĠĠ Ġ) Ġ= Ġfallback ( name ) Ġ{ Ġchannel Token . invoke ( body ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApp ends Ġtop - level Ġstates Ġof Ġthe Ġgiven Ġscenario Ġto Ġthe Ġcurrent Ġstate . ĊĠĠĠĠ Ġ* ĠMe ans Ġthat Ġthe Ġtop - level Ġstates Ġof Ġthe Ġ[ other ] Ġscenario Ġwill Ġbe ĊĠĠĠĠ Ġ* Ġdirectly Ġaccessible Ġfrom Ġthe Ġcurrent Ġstate . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠHooks Ġdefined Ġin Ġ[ other ] Ġwill Ġbe Ġexposed Ġto Ġthe Ġcurrent Ġscenario Ġif Ġthe Ġcurrent Ġstate Ġis Ġroot Ġor Ġignored Ġotherwise . ĊĠĠĠĠ Ġ* ĠHooks Ġavailable Ġin Ġthe Ġcurrent Ġstate Ġwill Ġbe Ġavailable Ġin Ġall Ġappended Ġstates . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġother Ġscenario Ġto Ġappend ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Scenario Dsl ĊĠĠĠ Ġfun Ġappend ( other : ĠScenario ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Root Ġ= Ġthis Ġis ĠRoot Builder ĊĠĠĠĠĠĠĠ Ġdo Append ( other , Ġignore Hooks Ġ= Ġ! is Root , Ġexpose Hooks Ġ= Ġis Root , Ġpropagate Hooks Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApp ends Ġthe Ġroot Ġof Ġthe Ġgiven Ġscenario Ġto Ġthe Ġcurrent Ġstate Ġwith Ġname Ġprovided Ġas Ġ[ context ]. ĊĠĠĠĠ Ġ* ĠMe ans Ġthat Ġthe Ġ[ other ] Ġscenario Ġwill Ġbecome Ġa Ġchild Ġof Ġthe Ġcurrent Ġstate ĊĠĠĠĠ Ġ* Ġand Ġall Ġstates Ġin Ġthe Ġ[ other ] Ġscenario Ġwill Ġbe Ġresolved Ġagainst Ġthe Ġcurrent Ġstate Ġpath . ĊĊĠĠĠĠ Ġ* ĠThe Ġroot Ġof Ġthe Ġ[ other ] Ġscenario Ġwill Ġnot Ġbe Ġdirectly Ġaccessible Ġfrom Ġthe Ġcurrent Ġstate ĊĠĠĠĠ Ġ* Ġas Ġit Ġcan 't Ġhave Ġany Ġactiv ators Ġdefined Ġin Ġits Ġroot , Ġbut Ġit Ġwill Ġbe Ġaccessible Ġby Ġ[ Re actions . go ] ĊĠĠĠĠ Ġ* Ġand Ġsimilar Ġmethods . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġ[ other ] Ġscenario Ġcan Ġbe Ġappended Ġas Ġmodal Ġscenario , Ġi . e . Ġthe Ġappended Ġroot Ġof Ġthe Ġ[ other ] Ġscenario ĊĠĠĠĠ Ġ* Ġwill Ġbecome Ġmodal . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠHooks Ġdefined Ġin Ġ[ other ] Ġwill Ġbe Ġavailable Ġinside Ġthe Ġsubtree Ġof Ġ[ other ]' s Ġscenario Ġroot . ĊĠĠĠĠ Ġ* ĠHooks Ġdefined Ġin Ġ[ other ] Ġwill Ġbe Ġexposed Ġto Ġthe Ġcurrent Ġscenario Ġif Ġthe Ġcurrent Ġstate Ġis Ġroot Ġor Ġignored Ġotherwise . ĊĠĠĠĠ Ġ* ĠHooks Ġavailable Ġin Ġthe Ġcurrent Ġstate Ġwill Ġbe Ġavailable Ġin Ġall Ġappended Ġstates Ġif Ġ[ propagate Hooks ] Ġis Ġset Ġto Ġtrue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġthe Ġname Ġof Ġthe Ġ[ other ] Ġscenario Ġroot Ġstate ĊĠĠĠĠ Ġ* Ġ@ param Ġother Ġscenario Ġto Ġappend ĊĠĠĠĠ Ġ* Ġ@ param Ġmodal Ġwhether Ġthe Ġscenario Ġshould Ġbe Ġmodal ĊĠĠĠĠ Ġ* Ġ@ param Ġpropagate Hooks Ġwhether Ġthe Ġscenario Ġshould Ġinherit Ġhooks Ġfrom Ġthe Ġcurrent Ġscenario ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Scenario Dsl ĊĠĠĠ Ġ@ State Declaration ĊĠĠĠ Ġfun Ġappend ( ĊĠĠĠĠĠĠĠ Ġ@ State Name Ġcontext : ĠString , ĊĠĠĠĠĠĠĠ Ġother : ĠScenario , ĊĠĠĠĠĠĠĠ Ġmodal : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġpropagate Hooks : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Root Ġ= Ġthis Ġis ĠRoot Builder ĊĠĠĠĠĠĠĠ Ġstate ( context , Ġno Context Ġ= Ġfalse , Ġmodal Ġ= Ġmodal ) Ġ@ State Body Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Append ( other , Ġignore Hooks Ġ= Ġfalse , Ġexpose Hooks Ġ= Ġis Root , Ġpropagate Hooks Ġ= Ġpropagate Hooks ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġdo Append ( ĊĠĠĠĠĠĠĠ Ġother : ĠScenario , ĊĠĠĠĠĠĠĠ Ġignore Hooks : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġexpose Hooks : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġpropagate Hooks : ĠBoolean ĊĠĠĠ Ġ) Ġ= Ġscenario Model Builder . append ( path , Ġother , Ġignore Hooks , Ġexpose Hooks , Ġpropagate Hooks ) ĊĊĠĠĠ Ġinternal Ġopen Ġfun Ġbuild (): ĠState Ġ= ĠState ( path , Ġno Context , Ġmodal ) Ċ } Ċ Ċ class ĠRoot Builder < B Ġ: ĠBot Request , ĠR Ġ: ĠRe actions > Ġinternal Ġconstructor ( ĊĠĠĠ Ġscenario Model Builder : ĠScenario Model Builder , ĊĠĠĠ Ġchannel Token : ĠChannel Type Token < B , ĠR > Ċ ) Ġ: ĠScenario Graph Builder < B , ĠR >( scenario Model Builder , Ġchannel Token , ĠState Path . root (), Ġfalse , Ġfalse ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġmodel : ĠScenario Model ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Scenario Dsl ĊĠĠĠ Ġfun Ġ< T Ġ: ĠBot Hook > Ġhandle ( klass : ĠK Class < T >, Ġlistener : Ġ@ Scenario Dsl ĠT . () Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠ Ġadd Handler ( klass ) Ġ{ Ġlistener . invoke ( it ) Ġ} ĊĊĠĠĠ Ġ@ Scenario Dsl ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠBot Hook > Ġhandle ( no inline Ġlistener : Ġ@ Scenario Dsl ĠT . () Ġ-> ĠUnit ) Ġ= Ġhandle ( T :: class , Ġlistener ) ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠBot Hook > Ġadd Handler ( klass : ĠK Class < T >, Ġlistener : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġscenario Model Builder . hooks Ġ+= ĠBot Hook Listener ( klass , Ġlistener ) Ġas ĠBot Hook Listener < Bot Hook > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApp ends Ġtop - level Ġstates Ġof Ġthe Ġgiven Ġscenario Ġto Ġthe Ġcurrent Ġstate . ĊĠĠĠĠ Ġ* ĠMe ans Ġthat Ġthe Ġtop - level Ġstates Ġof Ġthe Ġ[ other ] Ġscenario Ġwill Ġbe ĊĠĠĠĠ Ġ* Ġdirectly Ġaccessible Ġfrom Ġthe Ġcurrent Ġstate . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠHooks Ġdefined Ġin Ġ[ other ] Ġwill Ġeither Ġbe Ġignored Ġif Ġ[ expose Hooks ] Ġis Ġset Ġto Ġfalse ĊĠĠĠĠ Ġ* Ġor Ġexposed Ġto Ġthe Ġcurrent Ġscenario Ġotherwise . ĊĠĠĠĠ Ġ* ĠHooks Ġavailable Ġin Ġthe Ġcurrent Ġstate Ġwill Ġbe Ġavailable Ġin Ġall Ġappended Ġstates . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexpose Hooks Ġwhether Ġto Ġexpose Ġhooks Ġfrom Ġthe Ġ[ other ] Ġscenario Ġto Ġthe Ġcurrent Ġscenario ĊĠĠĠĠ Ġ* Ġ@ param Ġother Ġscenario Ġto Ġappend ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Scenario Dsl ĊĠĠĠ Ġfun Ġappend ( other : ĠScenario , Ġexpose Hooks : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Append ( other , Ġignore Hooks Ġ= Ġ! expose Hooks , Ġexpose Hooks Ġ= Ġexpose Hooks , Ġpropagate Hooks Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApp ends Ġthe Ġroot Ġof Ġthe Ġgiven Ġscenario Ġto Ġthe Ġcurrent Ġstate Ġwith Ġname Ġprovided Ġas Ġ[ context ]. ĊĠĠĠĠ Ġ* ĠMe ans Ġthat Ġthe Ġ[ other ] Ġscenario Ġwill Ġbecome Ġa Ġchild Ġof Ġthe Ġcurrent Ġstate ĊĠĠĠĠ Ġ* Ġand Ġall Ġstates Ġin Ġthe Ġ[ other ] Ġscenario Ġwill Ġbe Ġresolved Ġagainst Ġthe Ġcurrent Ġstate Ġpath . ĊĊĠĠĠĠ Ġ* ĠThe Ġroot Ġof Ġthe Ġ[ other ] Ġscenario Ġwill Ġnot Ġbe Ġdirectly Ġaccessible Ġfrom Ġthe Ġcurrent Ġstate ĊĠĠĠĠ Ġ* Ġas Ġit Ġcan 't Ġhave Ġany Ġactiv ators Ġdefined Ġin Ġits Ġroot , Ġbut Ġit Ġwill Ġbe Ġaccessible Ġby Ġ[ Re actions . go ] ĊĠĠĠĠ Ġ* Ġand Ġsimilar Ġmethods . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġ[ other ] Ġscenario Ġcan Ġbe Ġappended Ġas Ġmodal Ġscenario , Ġi . e . Ġthe Ġappended Ġroot Ġof Ġthe Ġ[ other ] Ġscenario ĊĠĠĠĠ Ġ* Ġwill Ġbecome Ġmodal . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠHooks Ġdefined Ġin Ġ[ other ] Ġwill Ġbe Ġavailable Ġinside Ġthe Ġsubtree Ġof Ġ[ other ]' s Ġscenario Ġroot . ĊĠĠĠĠ Ġ* ĠHooks Ġdefined Ġin Ġ[ other ] Ġwill Ġbe Ġexposed Ġto Ġthe Ġcurrent Ġscenario Ġif Ġthe Ġ[ expose Hooks ] Ġis Ġset Ġot Ġtrue . ĊĠĠĠĠ Ġ* ĠHooks Ġavailable Ġin Ġthe Ġcurrent Ġstate Ġwill Ġbe Ġavailable Ġin Ġall Ġappended Ġstates Ġif Ġ[ propagate Hooks ] Ġis Ġset Ġto Ġtrue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġthe Ġname Ġof Ġthe Ġ[ other ] Ġscenario Ġroot Ġstate ĊĠĠĠĠ Ġ* Ġ@ param Ġother Ġscenario Ġto Ġappend ĊĠĠĠĠ Ġ* Ġ@ param Ġmodal Ġwhether Ġthe Ġscenario Ġshould Ġbe Ġmodal ĊĠĠĠĠ Ġ* Ġ@ param Ġexpose Hooks Ġwhether Ġto Ġexpose Ġhooks Ġto Ġthe Ġcurrent Ġscenario ĊĠĠĠĠ Ġ* Ġ@ param Ġpropagate Hooks Ġwhether Ġthe Ġscenario Ġshould Ġinherit Ġhooks Ġfrom Ġthe Ġcurrent Ġscenario ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Scenario Dsl ĊĠĠĠ Ġ@ State Declaration ĊĠĠĠ Ġfun Ġappend ( ĊĠĠĠĠĠĠĠ Ġ@ State Name Ġcontext : ĠString , ĊĠĠĠĠĠĠĠ Ġother : ĠScenario , ĊĠĠĠĠĠĠĠ Ġmodal : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġexpose Hooks : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġpropagate Hooks : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate ( context , Ġno Context Ġ= Ġfalse , Ġmodal Ġ= Ġmodal ) Ġ@ State Body Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Append ( other , Ġignore Hooks Ġ= Ġfalse , Ġexpose Hooks Ġ= Ġexpose Hooks , Ġpropagate Hooks Ġ= Ġpropagate Hooks ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġbuild Scenario (): ĠScenario Model Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġbuild () ĊĠĠĠĠĠĠĠ Ġreturn Ġmodel Ġ?: Ġscenario Model Builder . apply Ġ{ Ġstates Ġ+= Ġroot Ġ}. build (). also Ġ{ Ġmodel Ġ= Ġit Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠState Builder < B Ġ: ĠBot Request , ĠR Ġ: ĠRe actions > Ġinternal Ġconstructor ( ĊĠĠĠ Ġscenario Model Builder : ĠScenario Model Builder , ĊĠĠĠ Ġchannel Token : ĠChannel Type Token < B , ĠR >, ĊĠĠĠ Ġprivate Ġval Ġparent : ĠState Path , ĊĠĠĠ Ġprivate Ġval Ġname : ĠString , ĊĠĠĠ Ġno Context : ĠBoolean , ĊĠĠĠ Ġmodal : ĠBoolean Ċ ) Ġ: ĠWith Logger , ĠScenario Graph Builder < B , ĠR >( scenario Model Builder , Ġchannel Token , Ġparent . resolve ( name ), Ġno Context , Ġmodal ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġaction : Ġ( Action Context < Activator Context , ĠBot Request , ĠRe actions >. () Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApp ends Ġactiv ators Ġto Ġthis Ġstate . ĠMe ans Ġthat Ġthis Ġstate Ġcan Ġbe Ġactivated Ġfrom Ġ[ from State ] Ġby Ġthe Ġrules Ġspecified . ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġstate Ġis Ġon Ġtop Ġof Ġthe Ġstates Ġhierarchy Ġthen Ġthese Ġactiv ators Ġbecome Ġglobal Ġfor Ġscenario . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom State Ġan Ġoptional Ġstate Ġfrom Ġwhere Ġthis Ġstate Ġcould Ġbe Ġactivated . ĠIf Ġnot Ġspecified Ġthe Ġparent 's Ġstate Ġis Ġused . ĊĠĠĠĠ Ġ* Ġ@ param Ġbody Ġa Ġcode Ġblock Ġthat Ġcontains Ġactiv ators Ġlist ĊĠĠĠĠ Ġ* Ġ@ see Ġcom . just ai . ja ic f . activ ator . Activator ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġactiv ators (@ Path Value Ġfrom State : ĠString Ġ= Ġparent . toString (), Ġbody : ĠActivation Rules Builder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġto State Ġ= Ġpath . toString () ĊĠĠĠĠĠĠĠ Ġval Ġrules Ġ= ĠActivation Rules Builder (). apply ( body ). build () ĊĠĠĠĠĠĠĠ Ġval Ġtransitions Ġ= Ġrules . map Ġ{ ĠTransition ( from State , Ġto State , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġscenario Model Builder . transitions . addAll ( transitions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApp ends Ġglobal Ġactiv ators Ġfor Ġthis Ġstate . ĠMe ans Ġthat Ġthis Ġstate Ġcan Ġbe Ġactivated Ġfrom Ġany Ġpoint Ġof Ġscenario . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbody Ġa Ġcode Ġblock Ġthat Ġcontains Ġactiv ators Ġlist ĊĠĠĠĠ Ġ* Ġ@ see Ġcom . just ai . ja ic f . activ ator . Activator ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġglobal Activ ators ( body : ĠActivation Rules Builder . () Ġ-> ĠUnit ) Ġ= Ġactiv ators ( State Path . root (). toString (), Ġbody ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn Ġaction Ġthat Ġshould Ġbe Ġexecuted Ġonce Ġthis Ġstate Ġwas Ġactivated . ĊĠĠĠĠ Ġ* Ġ@ param Ġbody Ġa Ġcode Ġblock Ġof Ġthe Ġaction ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġaction ( body : Ġ@ Scenario Dsl ĠAction Context < Activator Context , ĠB , ĠR >. () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( action Ġ== Ġnull ) Ġ{ Ġ" Multiple Ġactions Ġare Ġnot Ġavailable Ġin Ġa Ġsingle Ġstate : Ġ$ path " Ġ} ĊĠĠĠĠĠĠĠ Ġaction Ġ= Ġ{ Ġchannel Token . invoke ( body ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn Ġaction Ġthat Ġshould Ġbe Ġexecuted Ġonce Ġthis Ġstate Ġwas Ġactivated . ĊĠĠĠĠ Ġ* ĠThe Ġaction Ġwill Ġbe Ġexecuted Ġonly Ġif Ġ[ Action Context ] Ġtype Ġmatches Ġthe Ġgiven Ġ[ activ ator Token ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġactiv ator Token Ġan Ġactiv ator Ġtype Ġtoken ĊĠĠĠĠ Ġ* Ġ@ param Ġbody Ġa Ġcode Ġblock Ġof Ġthe Ġaction ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< A 1 Ġ: ĠActiv ator Context > Ġaction ( ĊĠĠĠĠĠĠĠ Ġactiv ator Token : ĠActiv ator Type Token < A 1 >, ĊĠĠĠĠĠĠĠ Ġbody : Ġ@ Scenario Dsl ĠAction Context < A 1 , ĠB , ĠR >. () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ= Ġaction Ġ{ Ġactiv ator Token . invoke ( body ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn Ġaction Ġthat Ġshould Ġbe Ġexecuted Ġonce Ġthis Ġstate Ġwas Ġactivated . ĊĠĠĠĠ Ġ* ĠThe Ġaction Ġwill Ġbe Ġexecuted Ġonly Ġif Ġ[ Action Context ] Ġtype Ġmatches Ġthe Ġgiven Ġ[ channel Token ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġchannel Token Ġa Ġchannel Ġtype Ġtoken ĊĠĠĠĠ Ġ* Ġ@ param Ġbody Ġa Ġcode Ġblock Ġof Ġthe Ġaction ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< B 1 Ġ: ĠB , ĠR 1 Ġ: ĠR > Ġaction ( ĊĠĠĠĠĠĠĠ Ġchannel Token : ĠChannel Type Token < B 1 , ĠR 1 >, ĊĠĠĠĠĠĠĠ Ġbody : Ġ@ Scenario Dsl ĠAction Context < Activator Context , ĠB 1 , ĠR 1 >. () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ= Ġaction Ġ{ Ġchannel Token . invoke ( body ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn Ġaction Ġthat Ġshould Ġbe Ġexecuted Ġonce Ġthis Ġstate Ġwas Ġactivated . ĊĠĠĠĠ Ġ* ĠThe Ġaction Ġwill Ġbe Ġexecuted Ġonly Ġif Ġ[ Action Context ] Ġtype Ġmatches Ġthe Ġgiven Ġ[ context Token ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Token Ġa Ġfull Ġcontext Ġtype Ġtoken ĊĠĠĠĠ Ġ* Ġ@ param Ġbody Ġa Ġcode Ġblock Ġof Ġthe Ġaction ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< A 1 Ġ: ĠActiv ator Context , ĠB 1 Ġ: ĠB , ĠR 1 Ġ: ĠR > Ġaction ( ĊĠĠĠĠĠĠĠ Ġcontext Token : ĠContext Type Token < A 1 , ĠB 1 , ĠR 1 >, ĊĠĠĠĠĠĠĠ Ġbody : Ġ@ Scenario Dsl ĠAction Context < A 1 , ĠB 1 , ĠR 1 >. () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ= Ġaction Ġ{ Ġcontext Token . invoke ( body ) Ġ} ĊĊĠĠĠ Ġinternal Ġoverride Ġfun Ġbuild (): ĠState Ġ= Ġverify (). run Ġ{ ĠState ( path , Ġno Context , Ġmodal , Ġaction ?. let (:: Action Adapter )) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify (): ĠState Builder < B , ĠR > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . parent . is Root Ġ&& Ġ! name . matches ( Regex ("/ ? [^ / ]* "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS las hes Ġare Ġnot Ġallowed Ġin Ġthe Ġname Ġof Ġtop - level Ġstate . ĠYour Ġstate Ġpath : Ġ"$ path " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExample Ġsolution : Ġreplace Ġ" state (" state / child ") Ġwith Ġtwo Ġseparate Ġstates . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThis Ġmay Ġcause Ġincorrect ĠJ A IC F ĠInt ellij ĠIDEA ĠPlugin Ġbehaviour . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! this . parent . is Root Ġ&& Ġ! name . matches ( Regex ("[ ^ / ]* "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS las hes Ġare Ġnot Ġallowed Ġin Ġnames Ġof Ġinner Ġstates . ĠYour Ġstate Ġpath : Ġ"$ path " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExample Ġsolution : Ġreplace Ġ" state (" state / child ") Ġwith Ġtwo Ġseparate Ġstates . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThis Ġmay Ġcause Ġincorrect ĠJ A IC F ĠInt ellij ĠIDEA ĠPlugin Ġbehaviour . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( name . matches ( Regex ("/ ? "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" State Ġname Ġmust Ġnot Ġbe Ġempty . ĠYour Ġstate Ġpath : Ġ$ path ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ