package Ġcom . ols he v ch enko . currency converter . datasource . cache Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . ols he v ch enko . currency converter . core . merge To 6 Ċ import Ġcom . ols he v ch enko . currency converter . core . split By 3 Ċ import Ġcom . ols he v ch enko . currency converter . core . data . entity . Quote To Currency Rate Mapper Ċ import Ġcom . ols he v ch enko . currency converter . core . data . entity . Rates Data Entity Ċ import Ġcom . ols he v ch enko . currency converter . datasource . local . model . Entity ToLocal Mapper Ċ import Ġcom . ols he v ch enko . currency converter . datasource . local . model . Local To Entity Mapper Ċ import Ġcom . ols he v ch enko . currency converter . datasource . local . model . Rates Local Ċ import Ġcom . ols he v ch enko . currency converter . features . converter . domain . model . Currency Codes Ċ import Ġcom . ols he v ch enko . currency converter . features . converter . domain . model . Currency Rate Ċ import Ġcom . ols he v ch enko . currency converter . features . converter . domain . model . From To Codes Ċ Ċ /** Ċ Ġ* ĠLocal Ġrates Ġmirror ing Ġto ĠRAM Ċ Ġ*/ Ċ class ĠR ates Cache DataSource Impl ( ĊĠĠĠ Ġprivate Ġval Ġlocal To Entity Mapper : ĠLocal To Entity Mapper , ĊĠĠĠ Ġprivate Ġval Ġentity ToLocal Mapper : ĠEntity ToLocal Mapper , ĊĠĠĠ Ġprivate Ġval Ġquote To Currency Rate Mapper : ĠQuote To Currency Rate Mapper , Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFor Ġquotes Ġstorage , Ġuse Ġpure Ġmap Ġinside ĊĠĠĠĠ Ġ* ĠWrap Ġquotes Ġin ĠR ates Data Entity Ġetc . Ġonly Ġfor Ġrequests Ġprocessing ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġquotes Cache Ġ= Ġmutable Map Of < String , ĠR ates Data Entity . Quote >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġtimestamp Ġof Ġrecent Ġquotes Ġin Ġcache ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġquotes Timestamp : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġfun Ġget Rates (): ĠR ates Data Entity Ġ= Ġlocal To Entity Mapper . map ( Rates Local ( quotes Cache )) ĊĊĠĠĠ Ġfun Ġget Rates Timestamp (): ĠLong Ġ= Ġquotes Timestamp ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġmerge ĠO LD Ġquotes Ġw . Ġnew Ġones Ġ( over riding Ġitems Ġif Ġexisted ) ĊĠĠĠĠ Ġ* Ġreset Ġold Ġtimestamp Ġwith Ġnew Ġnon - empty Ġone ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave Rates ( rates Entity : ĠR ates Data Entity ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrates Entity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquotes Cache . put All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( entity ToLocal Mapper . map ( it )). quotes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( it . quotes . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquotes Timestamp Ġ= Ġthis . elementAt ( 0 ). q Timestamp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Codes (): ĠCurrency Codes Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCurrency Codes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquotes Cache . keys . map NotNull Ġ{ Ġcode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode . split By 3 ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Rates Cache DataSource ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Got ĠIN CORRECT Ġcurrency Ġcode Ġpair Ġ( \" $ code \") Ġ=> Ġskip Ġit .." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Rate ( from To Codes : ĠFrom To Codes ?): ĠCurrency Rate ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfrom To Codes ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . merge To 6 ()?. let Ġ{ Ġcode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquotes Cache [ code ]?. let Ġ{ Ġquote Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġquote To Currency Rate Mapper . map ( quote , Ġfrom To Codes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠLog . w ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Rates Cache DataSource ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Rate Ġfor Ġcurrency Ġcode Ġpair Ġ( \" $ from To Codes \") ĠNOT ĠFO UND Ġ=> Ġreturn Ġnull .." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠLog . w ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Rates Cache DataSource ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Got ĠIN CORRECT Ġcurrency Ġcode Ġpair Ġ( \" $ from To Codes \") Ġ=> Ġreturn Ġnull .." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠLog . w ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Rates Cache DataSource ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Got ĠEMPTY Ġcurrency Ġcode Ġpair Ġ=> Ġreturn Ġnull .." ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ } Ċ