package Ġcom . android . money box . domain . m vi Ċ Ċ import Ġcom . android . money box . domain . Scheduler Provider Ċ import Ġcom . android . money box . domain . model . Money Box One Off Payment Request Ċ import Ġcom . android . money box . domain . m vi . money box actions . Money Box Action Ċ import Ġcom . android . money box . domain . m vi . money box actions . Money Box Action . Login Action Ċ import Ġcom . android . money box . domain . m vi . money box result . Money Box ActionResult Ċ import Ġcom . android . money box . domain . m vi . money box result . Money Box ActionResult . Login Result Ċ import Ġcom . android . money box . domain . repository . Mo eny Box Api Repository Ċ import Ġio . reactivex . Observable Transformer Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠMoney Box Processor Wrapper Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠMo eny Box Api Repository , ĊĠĠĠ Ġprivate Ġval Ġapp Scheduler Provider : ĠScheduler Provider Ċ ) Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġmake One Off Payment Request : ĠMoney Box One Off Payment Request ĊĊĊĠĠĠ Ġprivate Ġval Ġlogin Processor Ġ= ĊĠĠĠĠĠĠĠ ĠObservable Transformer < Login Action , ĠLogin Result > Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . login ( it . login RequestBody ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ Ġlogin Response Ġ-> ĠLogin Result . Success ( login Response ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . cast ( Login Result :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . onError Return ( Login Result :: Failure ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . subscribe On ( app Scheduler Provider . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . observe On ( app Scheduler Provider . ui ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . start With ( Login Result . Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġinvest or Product Processor Ġ= ĊĠĠĠĠĠĠĠ ĠObservable Transformer < Money Box Action . GetAll Invest or Products Action , ĠMoney Box ActionResult . Get Invest or Pro dc uts Result > Ġ{ Ġactions Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions . flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . get Invest or Products () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġinvest or Products Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMoney Box ActionResult . Get Invest or Pro dc uts Result . Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvest or Products ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. cast ( Money Box ActionResult . Get Invest or Pro dc uts Result :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return ( Money Box ActionResult . Get Invest or Pro dc uts Result :: Failure ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . subscribe On ( app Scheduler Provider . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . observe On ( app Scheduler Provider . ui ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . start With ( Money Box ActionResult . Get Invest or Pro dc uts Result . Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġval Ġone Off Payment Processor Ġ= ĊĠĠĠĠĠĠĠ ĠObservable Transformer < Money Box Action . Make One Off Payment Action , ĠMoney Box ActionResult . OneOf Payment Result > Ġ{ Ġactions Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions . flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . make One Off Payment ( make One Off Payment Request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ Ġone Off Payment Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMoney Box ActionResult . OneOf Payment Result . Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġone Off Payment Result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . cast ( Money Box ActionResult . OneOf Payment Result :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . onError Return ( Money Box ActionResult . OneOf Payment Result :: Failure ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . subscribe On ( app Scheduler Provider . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . observe On ( app Scheduler Provider . ui ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . start With ( Money Box ActionResult . OneOf Payment Result . Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġval Ġaction Processor Ġ= ĊĠĠĠĠĠĠĠ ĠObservable Transformer < Money Box Action , ĠMoney Box ActionResult > Ġ{ Ġactions Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// publish Ġto ĠConnect able Observable Ġso Ġupstream Ġis Ġsubscribed Ġonly Ġonce Ġand Ġmulticast Ġto Ġob servers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions . publish Ġ{ Ġaction Observable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠĠĠĠĠĠĠĠ Ġaction Observable . of Type ( Login Action :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( login Processor ) */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠĠĠĠĠĠĠĠ Ġaction Observable . of Type ( Money Box Action . Make One Off Payment Action :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( one Off Payment Processor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Observable . of Type ( Money Box Action . GetAll Invest or Products Action :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( invest or Product Processor ) */ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġio . reactivex . Observable . merge ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Observable . of Type ( Login Action :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( login Processor ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Observable . of Type ( Money Box Action . Make One Off Payment Action :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( one Off Payment Processor ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Observable . of Type ( Money Box Action . GetAll Invest or Products Action :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( invest or Product Processor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊ Ċ }