package Ġcom . example . city em otions . datas ources Ċ Ċ import Ġcom . example . city em otions . data models . Em otion Ċ import Ġcom . example . city em otions . data models . Em otion Stat Ċ import Ġcom . example . city em otions . data models . Marker Model Ċ import Ġcom . google . android . gms . maps . model . LatLng Bounds Ċ import Ġcom . google . gson . Gson Ċ import Ġokhttp 3 .* Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType OrNull Ċ import Ġokhttp 3 . RequestBody . Companion . to RequestBody Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . IOException ĊĊ Ċ /** Ċ Ġ* ĠMarker ĠJSON Ġimplementation Ċ Ġ*/ Ċ data Ġclass ĠMarker Request ( ĊĠĠĠ Ġval Ġid : ĠInt , ĊĠĠĠ Ġval Ġemotion Id : ĠInt , ĊĠĠĠ Ġval Ġlatitude : ĠDouble , ĊĠĠĠ Ġval Ġlong t itude : ĠDouble , ĊĠĠĠ Ġval Ġdescription : ĠString , ĊĠĠĠ Ġval ĠuserId : ĠString Ċ ) ĊĊ Ċ /** Ċ Ġ* ĠLat Lng ĠJSON Ġimplementation Ċ Ġ*/ Ċ data Ġclass ĠLat Lng Request ( ĊĠĠĠ Ġval Ġlatitude : ĠDouble , ĊĠĠĠ Ġval Ġlong t itude : ĠDouble Ċ ) ĊĊ Ċ /** Ċ Ġ* ĠBounds ĠJSON Ġimplementation Ċ Ġ*/ Ċ data Ġclass ĠBounds Request ( ĊĠĠĠ Ġval Ġs out hw est : ĠLat Lng Request , ĊĠĠĠ Ġval Ġn ortheast : ĠLat Lng Request Ċ ) ĊĊ Ċ data Ġclass ĠUserId Request ( ĊĠĠĠ Ġval ĠuserId : ĠString Ċ ) ĊĊ Ċ /** Ċ Ġ* Ġ ĠExternal Ġdatasource Ġimplementation Ċ Ġ*/ Ċ class ĠMarker DataSource Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠMarker DataSource ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġclient Ġ= ĠOk HttpClient () ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance (): ĠMarker DataSource Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instance Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= ĠMarker DataSource () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠURL Ġ= Ġ" http :// 7 9 . 1 4 3 . 3 1 . 2 3 4 : 8 0 " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠJSON Ġ= Ġ" application / json ; Ġcharset = utf - 8 ". to MediaType OrNull () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠADD _ PATH Ġ= Ġ"/ add _ marker " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠGET _ ALL _ PATH Ġ= Ġ"/ all _ markers _ from _ coords " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠGET _ USERS _ MARK ERS Ġ= Ġ"/ users _ markers " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREMOVE _ PATH Ġ= Ġ"/ remove _ marker " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠGET _ USER _ STAT Ġ= Ġ"/ user _ stat " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Markers Ġfrom Ġstorage Ġand Ġput Ġthem Ġin Ġcallback ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpath Ġserver Ġpath ĊĠĠĠĠ Ġ* Ġ@ param Ġbody ĠJSON Ġrequest Ġbody ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠRequest Ġobjects ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmake Request ( path : ĠString , Ġbody : ĠString ?): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url ( URL Ġ+ Ġpath ) ĊĠĠĠĠĠĠĠ Ġif Ġ( body Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġbody . to RequestBody ( JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . method (" POST ", Ġrequest Body ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrequest . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMake Ġmarker Ġlist Ġfrom ĠJSON Ġresponse Ġbody ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġresponse ĠResponse Ġobject ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠMutable List Ġof ĠMarker Models ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Markers From Body ( response : ĠResponse ): ĠMutable List < Marker Model > Ġ{ ĊĠĠĠĠĠĠĠ Ġresponse . body ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarkers Ġ= Ġmutable ListOf < Marker Model >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Body Ġ= Ġit . string () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Array Ġ= ĠJSONArray ( string Body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġjson Array . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarker Json Ġ= Ġjson Array . getJSONObject ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarkers . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMarker Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Id Ġ= Ġmarker Json . getInt (" id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġmarker Json . getDouble (" latitude "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong t itude Ġ= Ġmarker Json . getDouble (" long t itude "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemotion Ġ= ĠEm otion . values ()[ marker Json . getInt (" emotion Id ") ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġmarker Json . getString (" description "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġmarker Json . getString (" userId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmarkers ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmutable ListOf () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Markers Ġfrom Ġstorage Ġand Ġput Ġthem Ġin Ġcallback ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbounds Ġbounds Ġof Ġvisible Ġpiece Ġof Ġmap ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġuser ` s Ġimplementation Ġof ĠDataSource . Load Callback Ġinterface ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Markers ( bounds : ĠLat Lng Bounds , Ġcallback : ĠLoad Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbounds Request Ġ= ĠBounds Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs out hw est Ġ= ĠLat Lng Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġbounds . sout hw est . latitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong t itude Ġ= Ġbounds . sout hw est . longitude ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn ortheast Ġ= ĠLat Lng Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġbounds . northeast . latitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong t itude Ġ= Ġbounds . northeast . longitude ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠGson (). toJson ( bounds Request ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġmake Request ( GET _ ALL _ PATH , Ġbody ) ĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . code Ġ!= Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError ( Throwable (" Internal ĠServer ĠError ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarkers Ġ= Ġget Markers From Body ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Load ( markers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġuser ` s Ġmarkers Ġfrom Ġstorage ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠuserId Ġuser Ġident ific ator Ġstring ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġuser ` s Ġimplementation Ġof ĠDataSource . Load Callback Ġinterface ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetUser Markers ( userId : ĠString , Ġcallback : ĠLoad Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserId Request Ġ= ĠUserId Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠGson (). toJson ( userId Request ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġmake Request ( GET _ USERS _ MARK ERS , Ġbody ) ĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . code Ġ!= Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError ( Throwable (" Internal ĠServer ĠError ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarkers Ġ= Ġget Markers From Body ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Load ( markers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġmarker Ġto Ġstorage ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmarker Ġmarker Model Ġto Ġadd ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġuser ` s Ġimplementation Ġof ĠDataSource . Add Callback Ġinterface ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Marker ( marker : ĠMarker Model , Ġcallback : ĠAdd Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmarker Request Ġ= ĠMarker Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġmarker . db Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemotion Id Ġ= Ġmarker . emotion . db Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġmarker . latitude , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlong t itude Ġ= Ġmarker . long t itude , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġmarker . description , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġmarker . userId ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠGson (). toJson ( marker Request ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġmake Request ( ADD _ PATH , Ġbody ) ĊĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . code Ġ!= Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError ( Throwable (" Internal ĠServer ĠError ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Body Ġ= Ġit . string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= ĠJSONObject ( string Body ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Marker Ġ= ĠMarker Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Id Ġ= ĠjsonObject . getInt (" id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= ĠjsonObject . getDouble (" latitude "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong t itude Ġ= ĠjsonObject . getDouble (" long t itude "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemotion Ġ= ĠEm otion . values ()[ jsonObject . getInt (" emotion Id ") ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= ĠjsonObject . getString (" description "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠjsonObject . getString (" userId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Add ( new Marker ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġmarker Ġfrom Ġstorage ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmarker Ġmarker Model Ġto Ġremove ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġuser ` s Ġimplementation Ġof ĠDataSource . Remove Callback Ġinterface ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Marker ( marker : ĠMarker Model , Ġcallback : ĠRemove Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmarker Request Ġ= ĠMarker Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġmarker . db Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemotion Id Ġ= Ġmarker . emotion . db Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġmarker . latitude , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlong t itude Ġ= Ġmarker . long t itude , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġmarker . description , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġmarker . userId ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠGson (). toJson ( marker Request ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġmake Request ( REMOVE _ PATH , Ġbody ) ĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . code Ġ!= Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError ( Throwable (" Internal ĠServer ĠError ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġuser Ġem otions Ġusage Ġstatistics ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠuserId Ġuser Ġident ific ator Ġstring ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġuser ` s Ġimplementation Ġof ĠDataSource . Stat Load Callback Ġinterface ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetUser Stat ( userId : ĠString , Ġcallback : ĠStat Load Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserId Request Ġ= ĠUserId Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠGson (). toJson ( userId Request ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġmake Request ( GET _ USER _ STAT , Ġbody ) ĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . code Ġ!= Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError ( Throwable (" Internal ĠServer ĠError ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstats Ġ= Ġmutable ListOf < Em otion Stat >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Body Ġ= Ġit . string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Array Ġ= ĠJSONArray ( string Body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġjson Array . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstat Json Ġ= Ġjson Array . getJSONObject ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstats . add ( Em otion Stat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemotion Ġ= ĠEm otion . values ()[ stat Json . getInt (" emotion Id ") ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ= Ġstat Json . getInt (" emotion Cnt ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Load ( stats ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠLoad Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonLoad ( markers : ĠList < Marker Model >) ĊĠĠĠĠĠĠĠ Ġfun ĠonError ( t : ĠThrowable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠAdd Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Add ( marker : ĠMarker Model ) ĊĠĠĠĠĠĠĠ Ġfun ĠonError ( t : ĠThrowable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠRemove Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Remove () ĊĠĠĠĠĠĠĠ Ġfun ĠonError ( t : ĠThrowable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠStat Load Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonLoad ( stat : ĠList < Em otion Stat >) ĊĠĠĠĠĠĠĠ Ġfun ĠonError ( t : ĠThrowable ) ĊĠĠĠ Ġ} Ċ }