package Ġuk . ac . n cl . open lab . iris msg . repo Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġuk . ac . n cl . open lab . iris msg . api . Api Callback Ċ import Ġuk . ac . n cl . open lab . iris msg . api . I ris Msg Service Ċ import Ġuk . ac . n cl . open lab . iris msg . model . Organ isation Entity Ċ import Ġuk . ac . n cl . open lab . iris msg . model . Organ isation Member Entity Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ type alias ĠOrg List Ġ= ĠList < Organ isation Entity > Ċ type alias ĠOrg Member List Ġ= ĠList < Organ isation Member Entity > Ċ Ċ /** Ċ Ġ* ĠA Ġrepository Ġresponsible Ġfor Ġorganisation Ġentities Ċ Ġ*/ Ċ @ Singleton Ċ class ĠOrgan isation Repository Ġ@ Inject Ġconstructor ( val Ġir is Service : ĠI ris Msg Service , Ġval Ġapplication : ĠApplication ) Ġ{ ĊĠĠĠĠĊĠĠĠ Ġprivate Ġvar Ġorg s Cache : ĠMutable List < Organ isation Entity > Ġ= Ġmutable ListOf () ĊĠĠĠĠĊĠĠĠĠĊĠĠĠ Ġ/** ĠLoad Ġa Ġlist Ġof ĠOrgan isations Ġinto Ġa ĠLive Data Ġusing Ġthe Ġapi Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġload Org s Into Ġ( target : ĠMutable LiveData < Org List >) Ġ: ĠMutable LiveData < Org List > Ġ{ ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ// ĠFetch Ġorgan isations , Ġput Ġit Ġinto Ġthe Ġlive Ġdata Ġ& Ġcache Ġthem ĊĠĠĠĠĠĠĠ Ġir is Service . list Organ isations (). enqueue ( Api Callback Ġ{ Ġres Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . value Ġ= Ġres . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorg s Cache Ġ= Ġres . data ?. to Mutable List () Ġ?: Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġreturn Ġtarget ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/** ĠLoad Ġa Ġsingle ĠOrgan isations Ġinto Ġa ĠLive Data Ġusing Ġthe Ġapi Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġload Single Org Into Ġ( target : ĠMutable LiveData < Organ isation Entity >, Ġid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ// ĠFetch Ġthe Ġorganisation , Ġput Ġit Ġinto Ġthe Ġlive Ġdata Ġand Ġcache Ġit ĊĠĠĠĠĠĠĠ Ġir is Service . show Organ isation ( id ). enqueue ( Api Callback Ġ{ Ġres Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . value Ġ= Ġres . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res . data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorg s Cache . removeAll Ġ{ Ġit . id Ġ== Ġid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorg s Cache . add ( res . data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/** ĠLoad Ġan ĠOrgan isation 's Ġmembers Ġinto Ġa ĠLive Data Ġusing Ġthe Ġapi Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġload Members Into Ġ( target : ĠMutable LiveData < Org Member List >, Ġid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġir is Service . list Organ isation Members ( id ). enqueue ( Api Callback Ġ{ Ġres Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . value Ġ= Ġres . data ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/** ĠFetch Ġall Ġorgan isations Ġthe Ġuser Ġhas Ġaccess Ġto Ġand Ġplace Ġinto Ġa ĠLive Data Ġ*/ ĊĠĠĠ Ġfun Ġget Organ isations Ġ() Ġ: ĠMutable LiveData < Org List > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠMutable LiveData < Org List >() ĊĠĠĠĠĠĠĠ Ġif Ġ( orgs Cache . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġorg s Cache ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġload Org s Into ( data ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/** ĠRe - fetch Ġorgan isations Ġinto Ġa ĠLive Data Ġ*/ ĊĠĠĠ Ġfun Ġreload Organ isations Ġ( data : ĠMutable LiveData < Org List >) Ġ{ ĊĠĠĠĠĠĠĠ Ġload Org s Into ( data ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/** ĠRe - fetch Ġorgan isations Ġfrom Ġthe Ġcache Ġ*/ ĊĠĠĠ Ġfun Ġreload Organ isations From Cache Ġ( data : ĠMutable LiveData < Org List >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġorg s Cache ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/** ĠRe - fetch Ġmembers Ġ*/ ĊĠĠĠ Ġfun Ġreload Members Ġ( data : ĠMutable LiveData < Org Member List >, Ġid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġload Members Into ( data , Ġid ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/** ĠNotify Ġthe Ġin - memory Ġcache Ġthat Ġan ĠOrgan isation Ġwas Ġcreated Ġ*/ ĊĠĠĠ Ġfun Ġorganisation Created Ġ( org : ĠOrgan isation Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġorg s Cache . add ( org ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/** ĠNotify Ġthe Ġin - memory Ġcache Ġthat Ġan ĠOrgan isation Ġwas Ġdeleted Ġ*/ ĊĠĠĠ Ġfun Ġorganisation Destroyed Ġ( id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġorg s Cache . removeAll Ġ{ Ġit . id Ġ== Ġid Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/** ĠGet Ġa Ġspecific Ġorganisation Ġ*/ ĊĠĠĠ Ġfun Ġget Organ isation Ġ( id : ĠString ) Ġ: ĠMutable LiveData < Organ isation Entity > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠMutable LiveData < Organ isation Entity >() ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthe Ġcache Ġfor Ġthe Ġorganisation , Ġor Ġmanually Ġfetch Ġit ĊĠĠĠĠĠĠĠ Ġval Ġcached Ġ= Ġorg s Cache . find Ġ{ Ġorg Ġ-> Ġorg . id Ġ== Ġid Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( cached Ġ!= Ġnull ) Ġdata . value Ġ= Ġcached ĊĠĠĠĠĠĠĠ Ġelse Ġload Single Org Into ( data , Ġid ) ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/** ĠGet Ġthe Ġmembers Ġof Ġan ĠOrgan isation Ġ*/ ĊĠĠĠ Ġfun Ġget Members Ġ( id : ĠString ) Ġ: ĠMutable LiveData < Org Member List Ġ> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠMutable LiveData < Org Member List >() ĊĠĠĠĠĠĠĠ Ġload Members Into ( data , Ġid ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠ Ġ} Ċ }