/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠNet flix , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . netflix . spin n aker . clo udd river . saga . flow Ċ Ċ import Ġcom . google . common . annotations . Beta Ċ import Ġcom . netflix . spin n aker . clo udd river . saga . models . Saga Ċ import Ġjava . util . function . Consumer Ċ import Ġjava . util . function . Predicate Ċ Ċ /** Ċ Ġ* ĠA Ġhigh - level ĠDSL Ġto Ġhelp Ġbuild Ġand Ġvisualize Ġthe Ġworkflow Ġthat Ġa Ġ[ Saga ] Ġwill Ġtake Ġtowards Ġcompletion . Ċ Ġ* Ċ Ġ* ĠThe Ġsimplest Ġ[ Saga ] Ġis Ġone Ġthat Ġhas Ġa Ġsingle Ġ[ Saga Action ]. ĠA Ġ[ Saga Completion Handler ] Ġis Ġoptional . Ċ Ġ*/ Ċ @ Beta Ċ class ĠS aga Flow Ġ{ ĊĊĠ Ġinternal Ġval Ġsteps : ĠMutable List < Step > Ġ= Ġmutable ListOf () ĊĠ Ġinternal Ġvar Ġcompletion Handler : ĠClass < out ĠS aga Completion Handler <* >> ? Ġ= Ġnull ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAn Ġaction Ġto Ġtake Ġnext . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġthen ( action : ĠClass < out ĠS aga Action <* >> ): ĠS aga Flow Ġ{ ĊĠĠĠ Ġsteps . add ( Action Step ( action )) ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠDefine Ġa Ġconditional Ġbranch . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠThe Ġcondition Ġis Ġevaluated Ġat Ġruntime . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġcondition ĠThe Ġ[ Predicate ] Ġthat Ġwill Ġevaluate Ġwhether Ġor Ġnot Ġto Ġbranch Ġlogic ĊĠĠ Ġ* Ġ@ param Ġbuilder ĠThe Ġnested Ġ[ Saga Flow ] Ġused Ġto Ġdefine Ġthe Ġbr an ched Ġsteps , Ġwill Ġonly Ġbe Ġcalled Ġif Ġ[ condition ] Ġis Ġtrue ĊĠĠ Ġ*/ ĊĠ Ġfun Ġon ( condition : ĠClass < out ĠPredicate < Saga >>, Ġbuilder : Ġ( Saga Flow ) Ġ-> ĠUnit ): ĠS aga Flow Ġ{ ĊĠĠĠ Ġsteps . add ( Condition Step ( condition , ĠS aga Flow (). also ( builder ))) ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠJava - compatible Ġinterface . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġon ( condition : ĠClass < out ĠPredicate < Saga >>, Ġbuilder : ĠConsumer < Saga Flow >): ĠS aga Flow Ġ{ ĊĠĠĠ Ġsteps . add ( Condition Step ( condition , ĠS aga Flow (). also Ġ{ Ġbuilder . accept ( this ) Ġ})) ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAn Ġoptional Ġ[ Saga Completion Handler ]. ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġhandler ĠThe Ġ[ Saga Completion Handler ] Ġto Ġinvoke Ġon Ġcompletion ĊĠĠ Ġ*/ ĊĠ Ġfun Ġcompletion Handler ( handler : ĠClass < out ĠS aga Completion Handler <* >> ): ĠS aga Flow Ġ{ ĊĠĠĠ Ġcompletion Handler Ġ= Ġhandler ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġinterface ĠStep ĊĠ Ġinner Ġclass ĠAction Step ( val Ġaction : ĠClass < out ĠS aga Action <* >>) Ġ: ĠStep ĊĠ Ġinner Ġclass ĠCondition Step ( val Ġpredicate : ĠClass < out ĠPredicate < Saga >>, Ġval Ġnested Builder : ĠS aga Flow ) Ġ: ĠStep Ċ } Ċ