package Ġcom . sample . android . goals . data . source . local Ċ Ċ import Ġcom . sample . android . goals . data . as Domain Model Ċ import Ġcom . sample . android . goals . network . S avings Goal Wrapper Ċ import Ġcom . sample . android . goals . network . as Database Model Ċ import Ġcom . sample . android . goals . util . No DataException Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Observable Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ /** Ċ Ġ* ĠConcrete Ġimplementation Ġof Ġa Ġdata Ġsource Ġas Ġa Ġdb . Ċ Ġ*/ Ċ @ Singleton Ċ class ĠLocal DataSource Impl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġgoals Dao : ĠGo als Dao Ċ ) Ġ: ĠLocal DataSource Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠgetS avings Go als (): ĠObservable < S avings Goal Wrapper > Ġ= ĊĠĠĠĠĠĠĠ ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoals Ġ= Ġgoals Dao . get Go als ()?. as Domain Model () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( goals Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onError ( No DataException ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( goals ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinsert ( sav ings Go als : ĠS avings Goal Wrapper ): ĠComp letable Ġ= ĊĠĠĠĠĠĠĠ Ġgoals Dao . insert ( sav ings Go als . as Database Model ()) Ċ }