package Ġcom . guid ove zz oni . architecture . datasource Ċ Ċ import Ġcom . guid ove zz oni . architecture . cache dd at as ource . Cached DataSource Ċ import Ġcom . guid ove zz oni . model . TimeStamp ed Data Ċ import Ġio . reactivex . Maybe ĊĊ Ċ /** Ċ Ġ* ĠProvides Ġan Ġinterface Ġused Ġto Ġsource Ġdata . ĠIt Ġcan Ġbe Ġused Ġfor Ġ" live " Ġsources Ġlike Ġnetwork Ġor Ġfor Ġcache Ċ Ġ* Ċ Ġ* Ġ@ param ĠM Ġdata Ġmodel Ġtype Ċ Ġ* Ġ@ param ĠP Ġparameters Ġtype . ĠThis Ġclass Ġshould Ġoverride Ġ[ Object . equals ] Ġand Ġ[ Object . hashCode ] Ġas Ġcaching Ġuses ĠHashMap . Ċ Ġ* ĠIf Ġmultiple Ġparameters Ġare Ġrequired , Ġthen Ġ[ Pair ] Ġor Ġ[ Triple ] Ġcan Ġbe Ġused , Ġor Ġany Ġother ĠTuple , Ġas Ġlong Ġas Ċ Ġ* Ġ[ Object . equals ] Ġand Ġ[ Object . hashCode ] Ġhave Ġbeen Ġproperly Ġoverridden . Ċ Ġ*/ Ċ interface ĠDataSource < M , ĠP > Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġreturns Ġthe Ġdata ĠĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġparams Ġparameters Ġrequired Ġfor Ġthe Ġrequest Ġand Ġfor Ġcaching Ġits Ġresponse - Ġsee Ġabove Ġfor Ġadditional Ġdetails ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġ[ Maybe ] Ġthat Ġemits Ġthe Ġrequested Ġvalue Ġif Ġpresent , Ġwrapped Ġin Ġ[ TimeStamp ed Data ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget ( params : ĠP ?): ĠMaybe < TimeStamp ed Data < M >> ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġthis Ġis Ġsupposed Ġto Ġbe Ġcalled Ġwhen Ġwe Ġneed Ġto Ġupdated Ġa Ġcache Ġafter Ġa Ġsuccessful Ġemission ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġparams Ġparameters Ġrequired Ġfor Ġthe Ġrequest Ġand Ġfor Ġcaching Ġits Ġresponse - Ġsee Ġabove Ġfor Ġadditional Ġdetails ĊĠĠĠĠ Ġ* Ġ@ param Ġanother Source Ġa Ġ[ Cached DataSource ] Ġrepresenting Ġthe Ġcache Ġthat Ġneeds Ġupdating ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġ[ Maybe ] Ġthat Ġemits Ġthe Ġrequested Ġvalue Ġif Ġpresent , Ġwrapped Ġin Ġ[ TimeStamp ed Data ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget AndUpdate ( params : ĠP ?, Ġanother Source : ĠCached DataSource < M , ĠP >): ĠMaybe < TimeStamp ed Data < M >> Ċ } Ċ