package Ġcom . lq min h lab . mm _ travel . src . resource . re positor ires Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . lq min h lab . mm _ travel . src . constants . App Constants Ċ import Ġcom . lq min h lab . mm _ travel . src . resource . Client Ċ import Ġcom . lq min h lab . mm _ travel . src . resource . models . Attr action Model Ċ import Ġcom . lq min h lab . mm _ travel . src . resource . models . Location Model Ċ import Ġcom . lq min h lab . mm _ travel . src . resource . models . Result Location Model Ċ import Ġcom . lq min h lab . mm _ travel . src . resource . request . Search Attr actions Request Ċ import Ġcom . lq min h lab . mm _ travel . src . resource . request . Search Location Request Ċ import Ġcom . lq min h lab . mm _ travel . src . resource . response . Response List Ċ import Ġcom . lq min h lab . mm _ travel . src . resource . services . Shared Service Ċ import Ġio . reactivex . rx java 3 . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . rx java 3 . core . Observable Ċ import Ġio . reactivex . rx java 3 . schedul ers . Schedulers Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠShared Repository Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġservice : ĠShared Service Ġ= ĠClient . instance . create ( Shared Service :: class . java ) ĊĊĠĠĠ Ġfun Ġsearch Multiple Location ( ĊĠĠĠĠĠĠĠ Ġrequests : ĠList < Search Location Request >, ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ( data : ĠList < Location Model >) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ ĠonError : Ġ( message : ĠString ?) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ ĠonComplete : Ġ() Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable s : ĠArrayList < Observable <* >> Ġ= ĠArrayList < Observable <* >>() ĊĠĠĠĠĠĠĠ Ġfor Ġ( request Ġin Ġrequests ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable s . add ( service . search Location ( request . toJSON (), ĠApp Constants . base Header )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠObservable . zip ( observable s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata : ĠList < Response List < Result Location Model < Location Model >>> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . toList () Ġas ĠList < Response List < Result Location Model < Location Model >>> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocations : ĠArrayList < Location Model > Ġ= ĠArrayList < Location Model >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġdata ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocations . add ( item . data . find Ġ{ Ġresult Model Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Model . is Top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. data Ġ?: Ġitem . data . first (). data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocations ĊĠĠĠĠĠĠĠ Ġ}. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError ( error . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch Location ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠSearch Location Request , ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ( data : ĠList < Result Location Model < Location Model >>) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ ĠonError : Ġ( message : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . search Location ( request . toJSON (), ĠApp Constants . base Header ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()). subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġresult Ġ-> ĠonSuccess ( result . data ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĠonError ( error . message ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch Multiple Attr actions ( ĊĠĠĠĠĠĠĠ Ġrequests : ĠList < Search Attr actions Request >, ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ( data : ĠList < Any >) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ ĠonError : Ġ( message : ĠString ?) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ ĠonComplete : Ġ() Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable s : ĠArrayList < Observable <* >> Ġ= ĠArrayList < Observable <* >>() ĊĠĠĠĠĠĠĠ Ġfor Ġ( request Ġin Ġrequests ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable s . add ( service . search Attr actions ( request . toJSON (), ĠApp Constants . base Header )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠObservable . zip ( observable s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġit [ 0 ]. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata : ĠList < Response List < Result Location Model < Any >>> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . toList () Ġas ĠList < Response List < Result Location Model < Any >>> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattr actions : ĠArrayList < Any > Ġ= ĠArrayList < Any >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġdata ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr actions . add ( item . data . find Ġ{ Ġresult Model Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Model . is Top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. data Ġ?: Ġitem . data . first (). data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattr actions ĊĠĠĠĠĠĠĠ Ġ}. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError ( error . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch Attr actions ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠSearch Attr actions Request , ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ( data : ĠList < Attr action Model >) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ ĠonError : Ġ( message : ĠString ?) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ ĠonComplete : Ġ() Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . search Attr actions ( request . toJSON (), ĠApp Constants . base Header ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()). subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġresult Ġ-> ĠonSuccess ( result . data ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĠonError ( error . message ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance (): ĠShared Repository Ġ= Ġinstance ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġinstance : ĠShared Repository Ġ= ĠShared Repository () ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Shared Repository :" ĊĠĠĠ Ġ} Ċ }