/* Ċ Ġ* ĠCopyright Ġ@ Ġ 2 0 1 8 Ġ- Ġpresent Ġ 8 x 8 , Ġ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 Ġorg . j its i . j ibri . util Ċ Ċ import Ġorg . j its i . j ibri . status . Component State Ċ Ċ /** Ċ Ġ* ĠThese Ġhelpers Ġmake Ġit Ġeasy Ġto Ġdo Ġwork Ġbased Ġon Ġa Ġcomponent Ġtransition ing Ġto Ġa Ġparticular Ġstate . Ċ Ġ* ĠFor Ġexample , Ġif Ġwe Ġhave Ġsub components ĠFoo Ġand ĠBar , Ġand ĠBar Ġshouldn 't Ġstart Ġuntil ĠFoo Ġhas Ġreached Ċ Ġ* Ġ[ Component State . Running ], Ġyou Ġcan Ġdo : Ċ Ġ* Ċ Ġ* Ġwhenever ( bar ). transitions To ( Component State . Running ) Ġ{ Ċ Ġ* ĠĠĠĠ Ġfoo . start () Ċ Ġ* Ġ} Ċ Ġ*/ Ċ class ĠComponent State Transition er ( private Ġval Ġstatus Publisher : ĠStatus Publisher < Component State >) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtransitions To ( desired State : ĠComponent State , Ġblock : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstatus Publisher . add Temporary Handler Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== Ġdesired State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Temporary Handler Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWe Ġneed Ġa Ġspecial Ġmethod Ġfor Ġthe Ġerror Ġstate , Ġsince Ġthe Ġerror Ġstate Ġis Ġstate ful Ġand Ġwe Ġdon 't Ġuse Ġa Ġsingle ĊĠĠĠĠ Ġ* Ġinstance Ġto Ġmodel Ġthe Ġstate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtransitions To Error ( block : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstatus Publisher . add Temporary Handler Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Ġis ĠComponent State . Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Temporary Handler Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġwhenever ( status Publisher : ĠStatus Publisher < Component State >): ĠComponent State Transition er Ġ= ĊĠĠĠĠĠĠĠ ĠComponent State Transition er ( status Publisher )