package Ġorg . step ik . android . data . wishlist . repository Ċ Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Single Ċ import Ġorg . step ik . android . data . wishlist . source . Wish list Cache DataSource Ċ import Ġorg . step ik . android . data . wishlist . source . Wish list Remote DataSource Ċ import Ġorg . step ik . android . domain . base . DataSource Type Ċ import Ġorg . step ik . android . domain . wishlist . model . Wish list Entry Ċ import Ġorg . step ik . android . domain . wishlist . repository . Wish list Repository Ċ import Ġru . nob ird . android . domain . rx . do Comp letable On Success Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠW ish list Repository Impl Ċ @ Inject Ċ constructor ( ĊĠĠĠ Ġprivate Ġval Ġwish list Remote DataSource : ĠW ish list Remote DataSource , ĊĠĠĠ Ġprivate Ġval Ġwish list Cache DataSource : ĠW ish list Cache DataSource Ċ ) Ġ: ĠW ish list Repository Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Wish list Entries ( source Type : ĠDataSource Type ): ĠSingle < List < Wish list Entry >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġremote Ġ= Ġwish list Remote DataSource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Wish list Entries () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do Comp letable On Success ( wishlist Cache DataSource :: save Wish list Entries ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcache Ġ= Ġwish list Cache DataSource . get Wish list Entries () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( source Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataSource Type . REMOTE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote . onError Resume Next ( cache ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataSource Type . CACHE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unsupported Ġsource Type Ġ= Ġ$ source Type ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Course To Wish list ( course Id : ĠLong ): ĠComp letable Ġ= ĊĠĠĠĠĠĠĠ Ġwish list Remote DataSource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Wish list Entry ( course Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do Comp letable On Success ( wishlist Cache DataSource :: save Wish list Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ignore Element () ĊĊĠĠĠ Ġoverride Ġfun Ġremove Course From Wish list ( course Id : ĠLong , Ġsource Type : ĠDataSource Type ): ĠComp letable Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( source Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataSource Type . REMOTE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwish list Cache DataSource ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Wish list Entry ( course Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch If Empty ( wishlist Remote DataSource . get Wish list Entry ( course Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Comp letable Ġ{ Ġwish list Entry Ġ-> Ġwish list Remote DataSource . remove Wish list Entry ( wishlist Entry . id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Then ( wishlist Cache DataSource . remove Wish list Entry ( course Id )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataSource Type . CACHE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwish list Cache DataSource . remove Wish list Entry ( course Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unsupported Ġsource Type Ġ= Ġ$ source Type ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Wish list Entries (): ĠComp letable Ġ= ĊĠĠĠĠĠĠĠ Ġwish list Cache DataSource . remove Wish list Entries () Ċ }