/** Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠCar l - Phil ipp ĠH arm ant Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ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 Ġfr . c ph . ch icago . service Ċ Ċ import Ġfr . c ph . ch icago . client . Div vy Client Ċ import Ġfr . c ph . ch icago . core . model . Bi ke Station Ċ import Ġfr . c ph . ch icago . entity . Div vy Station Status Ċ import Ġfr . c ph . ch icago . redux . store Ċ import Ġfr . c ph . ch icago . rx . Rx Util . handle Map Error Ċ import Ġfr . c ph . ch icago . util . Util Ċ import Ġio . reactivex . rx java 3 . core . Single Ċ import Ġio . reactivex . rx java 3 . schedul ers . Schedulers Ċ import Ġjava . math . BigInteger Ċ import Ġorg . apache . commons . lang 3 . StringUtils . contains IgnoreCase Ċ import Ġtim ber . log . Tim ber Ċ Ċ object ĠBi ke Service Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġclient Ġ= ĠDiv vy Client ĊĠĠĠ Ġprivate Ġval Ġutil Ġ= ĠUtil ĊĠĠĠ Ġprivate Ġval Ġpreference Service Ġ= ĠPreference Service ĊĊĠĠĠ Ġfun Ġall Bi ke St ations (): ĠSingle < List < Bi ke Station >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġload All Bi ke St ations () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Bi ke Station ( id : ĠBigInteger ): ĠSingle < Bi ke Station > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġload All Bi ke St ations () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Iterable Ġ{ Ġstation Ġ-> Ġstation Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġstation Ġ-> Ġstation . id Ġ== Ġid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Or Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return Ġ{ Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( throwable , Ġ" Could Ġnot Ġload Ġbi ke Ġstations ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBi ke Station . build Default Bi ke Station WithName (" error ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch Bi ke St ations ( query : ĠString ): ĠSingle < List < Bi ke Station >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. from Callable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstore . state . bi ke St ations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġstation Ġ-> Ġcontains IgnoreCase ( station . name , Ġquery ) Ġ|| Ġcontains IgnoreCase ( station . address , Ġquery ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted With ( util . bi ke Station Comparator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . computation ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Empty Bi ke Station ( bi ke Station Id : ĠBigInteger ): ĠBi ke Station Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstation Name Ġ= Ġpreference Service . get Bi ke Route Name Mapping ( bi ke Station Id ) ĊĠĠĠĠĠĠĠ Ġreturn ĠBi ke Station . build Default Bi ke Station WithName ( station Name , Ġbi ke Station Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload All Bi ke St ations (): ĠSingle < List < Bi ke Station >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinformation Single Ġ= Ġclient . get St ations Information (). onError Return ( handle Map Error ()) ĊĠĠĠĠĠĠĠ Ġval Ġstatus Single Ġ= Ġclient . get St ations Status (). onError Return ( handle Map Error ()) ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . zip ( information Single , Ġstatus Single , Ġ{ Ġinfo , Ġstat Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġmutable ListOf < Bi ke Station >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġstation Info ) Ġin Ġinfo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstation Status Ġ= Ġstat [ key ] Ġ?: ĠDiv vy Station Status ("", Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( Bi ke Station ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġstation Info . id . to BigInteger (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġstation Info . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Dock s Ġ= Ġstation Status . available Dock s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable B ikes Ġ= Ġstation Status . available B ikes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġstation Info . latitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Ġ= Ġstation Info . longitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Ġ= Ġstation Info . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . sorted With ( compare By ( Bi ke Station :: name )) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ