/* ĊĠĠ ĠCopyright Ġ 2 0 2 1 ĠAb el ĠMo ar ren sis ĊĊĠĠ Ġ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 Ġco . mo arr . ride space . impl Ċ Ċ import Ġco . mo arr . ride space . R ide Space Ċ import Ġco . mo arr . ride space . R ide Space . Companion . BASE _ URL Ċ import Ġco . mo arr . ride space . data . Search Query Ċ Ċ import Ġco . mo arr . ride space . data . Station Ċ import Ġco . mo arr . ride space . data . Stops Ċ import Ġco . mo arr . ride space . data . Tri ps Ċ import Ġco . mo arr . ride space . except . Invalid Body Exception Ċ import Ġco . mo arr . ride space . gson . Date Deserial iser Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . google . gson . reflect . Type Token Ċ Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDateTime ĊĊ Ċ class ĠR ide Space Impl ( private Ġval Ġclient : ĠOk HttpClient ) Ġ: ĠR ide Space Ġ{ ĊĠĠĠ Ġprivate Ġval Ġgson Ġ= ĠGson Builder (). register Type Adapter ( LocalDateTime :: class . java , ĠDate Deserial iser ()). create () ĊĊĠĠĠ Ġoverride Ġfun Ġnear Me ( latitude : ĠDouble , Ġlongitude : ĠDouble , Ġradius : ĠInt ): ĠList < Station > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("${ BASE _ URL }/ api / stop / near /${ latitude }, ${ longitude }, ${ radius }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġclient . new Call ( request ). execute () ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresp . body ?. string () ĊĠĠĠĠĠĠĠ Ġif ( body . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Body Exception () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgson . fromJson ( body , Ġobject Ġ: ĠType Token < List < Station ?> ?> () Ġ{} . type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch ( query : ĠString ): ĠList < Search Query > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("${ BASE _ URL }/ api / search ? query =${ query }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġclient . new Call ( request ). execute () ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresp . body ?. string () ĊĠĠĠĠĠĠĠ Ġif ( body . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Body Exception () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgson . fromJson ( body , Ġobject Ġ: ĠType Token < List < Search Query ?> ?> () Ġ{} . type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop ById ( id : ĠInt ): ĠStation Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("${ BASE _ URL }/ api / stop / Train /${ id }? dateTime Utc =${ Instant . now () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġclient . new Call ( request ). execute () ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresp . body ?. string () ĊĠĠĠĠĠĠĠ Ġif ( body . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Body Exception () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgson . fromJson ( body , ĠStation :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtri ps ById ( id : ĠInt ): ĠList < Tri ps > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("${ BASE _ URL }/ api / stop / Train /$ id / Tri ps ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġclient . new Call ( request ). execute () ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresp . body ?. string () ĊĠĠĠĠĠĠĠ Ġif ( body . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Body Exception () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgson . fromJson ( body , Ġobject Ġ: ĠType Token < List < Tri ps ?> ?> () Ġ{} . type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtrain Stops ById ( id : ĠInt ): ĠList < Stops > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("${ BASE _ URL }/ api / trip / Train /${ id }/ stops ? dateTime =${ Instant . now () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġclient . new Call ( request ). execute () ĊĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresp . body ?. string () ĊĠĠĠĠĠĠĠ Ġif ( body . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Body Exception () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgson . fromJson ( body , Ġobject Ġ: ĠType Token < List < Stops ?> ?> () Ġ{} . type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }