package Ġedu . gate ch . cs 2 3 4 0 . space tr ader redux . domain . common Ċ Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Comp letable Observer Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ Ċ abstract Ġclass ĠComp letable Function UseCase < T , Ġin ĠSingle Params , Ġin ĠFunction Params >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsubscribe Scheduler : ĠScheduler , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpost Execution Scheduler : ĠScheduler ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdis pos ables : ĠComposite Disposable Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġabstract Ġfun Ġbuild UseCase Single ( params : ĠSingle Params ?): ĠSingle < T > ĊĊĠĠĠ Ġabstract Ġfun Ġtransform ( t : ĠT , Ġparams : ĠFunction Params ?): ĠT ĊĊĠĠĠ Ġabstract Ġfun Ġbuild On Comp letable Success ( t : ĠT ): ĠComp letable ĊĊĠĠĠ Ġfun Ġexecute ( observer : ĠComp letable Observer , Ġs params : ĠSingle Params ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf params : ĠFunction Params ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable : ĠComp letable Ġ= Ġthis . build UseCase Single ( spar ams ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( subscribe Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġt Ġ-> Ġtransform ( t , Ġf params )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Comp letable Ġ{ Ġt Ġ-> Ġbuild On Comp letable Success ( t ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( post Execution Scheduler ) ĊĊĠĠĠĠĠĠĠ Ġ( observable . subscribe With ( observer ) Ġas ? ĠDis posable )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis pos ables . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis pos ables . clear () ĊĠĠĠ Ġ} Ċ }