package Ġcom . s iz ik su . kotlin . data . weather Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . s iz ik su . kotlin . common . model . weather . Open Weather Ċ import Ġcom . s iz ik su . kotlin . data . Data Ċ import Ġcom . s iz ik su . kotlin . data . client . weather . I Weather Client Ċ Ċ class ĠGet Weather Data ( private Ġval Ġweather Client : ĠI Weather Client ) Ġ: ĠData (), ĠI Get Weather Data < Get Weather Data > Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠKEY _ WE ATHER _ CACHE Ġ= Ġ" weather _ cache " ĊĠĠĠ Ġprivate Ġval ĠEX PI RY _ TIME : ĠLong Ġ= Ġ 3 0 0 0 0 ĊĊĠĠĠ Ġprivate Ġvar Ġcity : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġuse Cache : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġexpiry : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġcity ( city : ĠString ): ĠGet Weather Data Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . city Ġ= Ġcity ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġuse Cache (): ĠGet Weather Data Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . use Cache Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcache Expiry Time ( millis : ĠLong ): ĠGet Weather Data Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . expiry Ġ= Ġmillis ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrun (): ĠOpen Weather Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! use Cache ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Weather From Client () Ġ?: ĠOpen Weather () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġget Open Weather From Cache () Ġ?: Ġget Weather From Client () Ġ?: ĠOpen Weather () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Weather From Client (): ĠOpen Weather ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġopen Weather Ġ= Ġweather Client . get Weather ( city ) ĊĠĠĠĠĠĠĠ Ġif Ġ( use Cache ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Cache Ġ= ĠGson (). toJson ( open Weather ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Cache ( KEY _ WE ATHER _ CACHE , Ġnew Cache ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġopen Weather ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Open Weather From Cache (): ĠOpen Weather ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcache Ġ= Ġget Cache ( KEY _ WE ATHER _ CACHE ) ĊĠĠĠĠĠĠĠ Ġval Ġexpiry Time Ġ= Ġif Ġ( expiry Ġ> Ġ 0 ) Ġexpiry Ġelse ĠEX PI RY _ TIME ĊĠĠĠĠĠĠĠ Ġif Ġ( is Cache Valid ( cache , ĠKEY _ WE ATHER _ CACHE , Ġexpiry Time )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGson (). fromJson ( cache , ĠOpen Weather :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ } Ċ