/** Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 5 ĠF ern ando ĠC ej as ĠOpen ĠSource ĠProject ĊĊ Ġ* Ġ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 . d ju are z . rx kotlin . domain . using cases Ċ Ċ import Ġcom . d ju are z . rx kotlin . domain . executor . Post Execution Thread Ċ import Ġcom . d ju are z . rx kotlin . domain . executor . Thread Executor Ċ import Ġrx . Observable Ċ import Ġrx . Subscriber Ċ import Ġrx . functions . Action 0 Ċ import Ġrx . functions . Action 1 Ċ import Ġrx . schedul ers . Schedulers Ċ import Ġrx . subscriptions . Subscriptions ĊĊ Ċ /** Ċ Ġ* ĠAbstract Ġclass Ġfor Ġa ĠUse ĠCase Ġ( Interactor Ġin Ġterms Ġof ĠClean ĠArchitecture ). Ċ Ġ* ĠThis Ġinterface Ġrepresents Ġa Ġexecution Ġunit Ġfor Ġdifferent Ġuse Ġcases Ġ( this Ġmeans Ġany Ġuse Ġcase Ċ Ġ* Ġin Ġthe Ġapplication Ġshould Ġimplement Ġthis Ġcontract ). ĊĊ Ġ* ĠBy Ġconvention Ġeach ĠUse Case Ġimplementation Ġwill Ġreturn Ġthe Ġresult Ġusing Ġa Ġ[ Subscriber ] Ċ Ġ* Ġthat Ġwill Ġexecute Ġits Ġjob Ġin Ġa Ġbackground Ġthread Ġand Ġwill Ġpost Ġthe Ġresult Ġin Ġthe ĠUI Ġthread . Ċ Ġ*/ Ċ abstract Ġclass ĠUse Case < T > Ġprotected Ġconstructor ( private Ġval Ġthread Executor : ĠThread Executor , Ġprivate Ġval Ġpost Execution Thread : ĠPost Execution Thread ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġsubscription Ġ= ĠSub scriptions . empty () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuilds Ġan Ġ[ Observable ] Ġwhich Ġwill Ġbe Ġused Ġwhen Ġexecuting Ġthe Ġcurrent Ġ[ UseCase ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġbuild UseCase Observable (): ĠObservable < T > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExec utes Ġthe Ġcurrent Ġuse Ġcase . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġuse Case Subscriber ĠThe Ġgu y Ġwho Ġwill Ġbe Ġlisten Ġto Ġthe Ġobservable Ġbuild Ġwith Ġ[ Ġ][ . build UseCase Observable ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ SuppressWarnings (" unchecked ") ĊĠĠĠ Ġfun Ġexecute ( use Case Subscriber : ĠSubscriber < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . subscription Ġ= Ġthis . build UseCase Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . from ( thread Executor )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( post Execution Thread . scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( use Case Subscriber ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ SuppressWarnings (" unchecked ") ĊĠĠĠ Ġfun Ġexecute ( onNext : ĠAction 1 < T >, ĠonError : ĠAction 1 < Throwable >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . subscription Ġ= Ġthis . build UseCase Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . from ( thread Executor )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( post Execution Thread . scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( onNext , ĠonError ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ SuppressWarnings (" unchecked ") ĊĠĠĠ Ġfun Ġexecute ( onNext : ĠAction 1 < T >, ĠonError : ĠAction 1 < Throwable >, Ġon Completed : ĠAction 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . subscription Ġ= Ġthis . build UseCase Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . from ( thread Executor )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( post Execution Thread . scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( onNext , ĠonError , Ġon Completed ) ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUn sub scri bes Ġfrom Ġcurrent Ġ[ Subscription ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġunsubscribe () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! subscription . is Un subscribed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscription . unsubscribe () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }