package Ġapp . future d . ark ite kt . rx use cases . dis pos ables Ċ Ċ import Ġapp . future d . ark ite kt . rx use cases . use cases . Flow able UseCase Ċ import Ġapp . future d . ark ite kt . rx use cases . wrap With Global OnError Logger Ċ import Ġio . reactivex . Flow able Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . rx kotlin . plus Assign Ċ Ċ /** Ċ Ġ* ĠThis Ġinterface Ġgives Ġyour Ġclass Ġability Ġto Ġexecute Ġ[ Flow able UseCase ] Ġuse Ġcases Ċ Ġ* Ġand Ġautomatically Ġadd Ġresulting Ġdis pos ables Ġto Ġone Ġcomposite Ġdis posable . ĠYou Ċ Ġ* Ġmay Ġfind Ġhandy Ġto Ġimplement Ġthis Ġinterface Ġin Ġcustom ĠPresent ers , ĠView Hold ers Ġetc . Ċ Ġ* Ċ Ġ* ĠConsider Ġusing Ġ[ Dis pos ables Owner ] Ġto Ġsupport Ġall Ġof Ġthe Ġbasic ĠRx Java Ġ 2 Ġtypes . Ċ Ġ* Ċ Ġ* ĠIt Ġis Ġyour Ġresponsibility Ġto Ġclear Ġthis Ġcomposite Ġdis posable Ġwhen Ġall Ċ Ġ* Ġrunning Ġtasks Ġshould Ġbe Ġstopped . Ċ Ġ*/ Ċ interface ĠFlow able Dis pos ables Owner Ġ{ ĊĊĠĠĠ Ġval Ġdis pos ables : ĠComposite Disposable ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExec utes Ġthe Ġuse Ġcase Ġand Ġadds Ġits Ġdis posable Ġto ĊĠĠĠĠ Ġ* Ġshared , Ġautomatically Ġdisposed , Ġcomposite Ġdis posable . ĠIn Ġcase Ġsome ĊĠĠĠĠ Ġ* Ġvariant Ġof Ġ[ Flow able UseCase . execute ] Ġmethod Ġhas Ġalready Ġbeen Ġcalled ĊĠĠĠĠ Ġ* Ġon Ġthis Ġinstance Ġof Ġ[ Flow able UseCase ], Ġprevious Ġone Ġis Ġdisposed , ĊĠĠĠĠ Ġ* Ġno Ġmatter Ġwhat Ġcurrent Ġstate Ġof Ġinternal ĠFlow able Ġis . ĠThis Ġbehavior ĊĠĠĠĠ Ġ* Ġcan Ġbe Ġdisabled Ġby Ġpassing Ġfalse Ġto Ġ[ Flow able UseCase Config . dispose Previous ] ĊĠĠĠĠ Ġ* Ġmethod . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġconfig Ġ[ Flow abler Config ] Ġused Ġto Ġprocess Ġresults Ġof Ġinternal Ġ[ Flow able ]. ĊĠĠĠĠ Ġ* Ġ@ return Ġdis posable Ġof Ġinternal Ġ[ Flow able ]. ĠThis Ġdis posable Ġis Ġdisposed ĊĠĠĠĠ Ġ* Ġautomatically . ĠIt Ġmight Ġbe Ġused Ġto Ġdispose Ġuse Ġcase Ġwhen Ġyou Ġneed ĊĠĠĠĠ Ġ* Ġto Ġdispose Ġit Ġin Ġadvance Ġon Ġyour Ġown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > ĠFlow able UseCase < Unit , ĠT >. execute ( config : ĠFlow able UseCase Config . Builder < T >. () Ġ-> ĠUnit ): ĠDis posable Ġ= ĊĠĠĠĠĠĠĠ Ġexecute ( Unit , Ġconfig ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExec utes Ġthe Ġuse Ġcase Ġand Ġadds Ġits Ġdis posable Ġto ĊĠĠĠĠ Ġ* Ġshared , Ġautomatically Ġdisposed , Ġcomposite Ġdis posable . ĠIn Ġcase Ġsome ĊĠĠĠĠ Ġ* Ġvariant Ġof Ġ[ Flow able UseCase . execute ] Ġmethod Ġhas Ġalready Ġbeen Ġcalled ĊĠĠĠĠ Ġ* Ġon Ġthis Ġinstance Ġof Ġ[ Flow able UseCase ], Ġprevious Ġone Ġis Ġdisposed , ĊĠĠĠĠ Ġ* Ġno Ġmatter Ġwhat Ġcurrent Ġstate Ġof Ġinternal ĠFlow able Ġis . ĠThis Ġbehavior ĊĠĠĠĠ Ġ* Ġcan Ġbe Ġdisabled Ġby Ġpassing Ġfalse Ġto Ġ[ Flow able UseCase Config . dispose Previous ] ĊĠĠĠĠ Ġ* Ġmethod . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġargs ĠArguments Ġused Ġfor Ġinitial Ġuse Ġcase Ġinitial isation . ĊĠĠĠĠ Ġ* Ġ@ param Ġconfig Ġ[ Flow able UseCase Config ] Ġused Ġto Ġprocess Ġresults Ġof Ġinternal Ġ[ Flow able ]. ĊĠĠĠĠ Ġ* Ġ@ return Ġdis posable Ġof Ġinternal Ġ[ Flow able ]. ĠThis Ġdis posable Ġis Ġdisposed ĊĠĠĠĠ Ġ* Ġautomatically . ĠIt Ġmight Ġbe Ġused Ġto Ġdispose Ġuse Ġcase Ġwhen Ġyou Ġneed ĊĠĠĠĠ Ġ* Ġto Ġdispose Ġit Ġin Ġadvance Ġon Ġyour Ġown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< ARGS , ĠT > ĠFlow able UseCase < ARGS , ĠT >. execute ( ĊĠĠĠĠĠĠĠ Ġargs : ĠARGS , ĊĠĠĠĠĠĠĠ Ġconfig : ĠFlow able UseCase Config . Builder < T >. () Ġ-> ĠUnit ĊĠĠĠ Ġ): ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġflow abler Config Ġ= ĠFlow able UseCase Config . Builder < T >(). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . invoke ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Ġbuild () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( flow abler Config . dispose Previous ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ execute . current Disposable ?. dispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= Ġcreate ( args ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġflow abler Config . onStart () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflow abler Config . onNext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap With Global OnError Logger ( flow abler Config . onError ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflow abler Config . onComplete ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġthis @ execute . current Disposable Ġ= Ġdis posable ĊĠĠĠĠĠĠĠ Ġdis pos ables Ġ+= Ġdis posable ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdis posable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExec utes Ġthe Ġ[ Flow able ] Ġand Ġadds Ġits Ġdis posable Ġto ĊĠĠĠĠ Ġ* Ġshared , Ġautomatically Ġdisposed , Ġcomposite Ġdis posable . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġconfig Ġ[ Flow able UseCase Config ] Ġused Ġto Ġprocess Ġresults Ġof Ġinternal ĠFlow able . ĊĠĠĠĠ Ġ* Ġ@ return Ġdis posable Ġof Ġinternal Ġ[ Flow able ]. ĠIt Ġmight Ġbe Ġused Ġto ĊĠĠĠĠ Ġ* Ġdispose Ġuse Ġcase Ġwhen Ġyou Ġneed Ġto Ġdispose Ġit Ġin Ġadvance Ġon Ġyour Ġown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > ĠFlow able < T >. execute Stream ( ĊĠĠĠĠĠĠĠ Ġconfig : ĠFlow able UseCase Config . Builder < T >. () Ġ-> ĠUnit ĊĠĠĠ Ġ): ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġflow abler Config Ġ= ĠFlow able UseCase Config . Builder < T >(). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . invoke ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Ġbuild () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdo On Subscribe Ġ{ Ġflow abler Config . onStart () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflow abler Config . onNext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap With Global OnError Logger ( flow abler Config . onError ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflow abler Config . onComplete ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis pos ables Ġ+= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠHold s Ġreferences Ġto Ġlamb das Ġand Ġsome Ġbasic Ġconfiguration Ċ Ġ* Ġused Ġto Ġprocess Ġresults Ġof ĠFlow abler Ġuse Ġcase . Ċ Ġ* ĠUse Ġ[ Flow able UseCase Config . Builder ] Ġto Ġconstruct Ġthis Ġobject . Ċ Ġ*/ Ċ class ĠFlow able UseCase Config < T > Ġprivate Ġconstructor ( ĊĠĠĠ Ġval ĠonStart : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġval Ġon Next : Ġ( T ) Ġ-> ĠUnit , ĊĠĠĠ Ġval ĠonComplete : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġval ĠonError : Ġ( Throwable ) Ġ-> ĠUnit , ĊĠĠĠ Ġval Ġdispose Previous : ĠBoolean Ċ ) Ġ{ ĊĠĠĠ Ġclass ĠBuilder < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠonStart : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġon Next : Ġ(( T ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠonComplete : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠonError : Ġ(( Throwable ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġdispose Previous Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġlambda Ġwhich Ġis Ġcalled Ġright Ġbefore ĊĠĠĠĠĠĠĠĠ Ġ* Ġinternal ĠFlow able Ġis Ġsubscribed ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠonStart ĠLambda Ġcalled Ġright Ġbefore ĠFlow able Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġsubscribed . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠonStart ( onStart : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . onStart Ġ= ĠonStart ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġlambda Ġwhich Ġis Ġcalled Ġwhen Ġon Next Ġon ĊĠĠĠĠĠĠĠĠ Ġ* Ġinternal ĠFlow able Ġis Ġcalled ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġon Next ĠLambda Ġcalled Ġwhen Ġon Next Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġemitted . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Next ( onNext : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . onNext Ġ= Ġon Next ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġlambda Ġwhich Ġis Ġcalled Ġwhen ĠonComplete Ġon ĊĠĠĠĠĠĠĠĠ Ġ* Ġinternal ĠFlow able Ġis Ġcalled ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠonComplete ĠLambda Ġcalled Ġwhen ĠonComplete Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġemitted . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠonComplete ( onComplete : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . onComplete Ġ= ĠonComplete ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġlambda Ġwhich Ġis Ġcalled Ġwhen ĠonError Ġon ĊĠĠĠĠĠĠĠĠ Ġ* Ġinternal ĠFlow able Ġis Ġcalled ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠonError ĠLambda Ġcalled Ġwhen ĠonError Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġemitted . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠonError ( onError : Ġ( Throwable ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . onError Ġ= ĠonError ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġwhether Ġcurrently Ġrunning Ġinternal ĠFlow able ĊĠĠĠĠĠĠĠĠ Ġ* Ġshould Ġbe Ġdisposed Ġwhen Ġexecute Ġis Ġcalled Ġrepeatedly . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdispose Previous ĠTrue Ġif Ġcurrently Ġrunning ĊĠĠĠĠĠĠĠĠ Ġ* Ġinternal ĠFlow able Ġshould Ġbe Ġdisposed ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġdispose Previous ( dispose Previous : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dispose Previous Ġ= Ġdispose Previous ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠFlow able UseCase Config < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFlow able UseCase Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonStart Ġ?: Ġ{ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Next Ġ?: Ġ{ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete Ġ?: Ġ{ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ?: Ġ{ Ġthrow Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispose Previous ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ