// package Ġcom . notes ync . notes . bu is ness . data . cache Ċ // Ċ // import Ġcom . notes ync . notes . business . data . cache . ab straction . Note Cache DataSource Ċ // import Ġcom . notes ync . notes . business . domain . model . Note Ċ // import Ġcom . notes ync . notes . business . domain . util . Date Util Ċ // import Ġcom . notes ync . notes . framework . dataSource . cache . database . NOTE _ P AG INATION _ PAGE _ SIZE Ċ // Ċ // const Ġval ĠFOR CE _ DELETE _ NOTE _ EXCEPTION Ġ= Ġ" FORCE _ DELETE _ NOTE _ EXCEPTION " Ċ // const Ġval ĠFOR CE _ DE LET ES _ NOTE _ EXCEPTION Ġ= Ġ" FORCE _ DE LET ES _ NOTE _ EXCEPTION " Ċ // const Ġval ĠFOR CE _ UPDATE _ NOTE _ EXCEPTION Ġ= Ġ" FORCE _ UPDATE _ NOTE _ EXCEPTION " Ċ // const Ġval ĠFOR CE _ NEW _ NOTE _ EXCEPTION Ġ= Ġ" FORCE _ NEW _ NOTE _ EXCEPTION " Ċ // const Ġval ĠFOR CE _ SEARCH _ NOTES _ EXCEPTION Ġ= Ġ" FORCE _ SEARCH _ NOTES _ EXCEPTION " Ċ // const Ġval ĠFOR CE _ GENERAL _ FAILURE Ġ= Ġ" FORCE _ GENERAL _ FAILURE " Ċ // Ċ // class ĠFake Note Cache DataSource Impl Ċ // constructor ( Ċ // ĠĠĠ Ġprivate Ġval Ġnotes Data : ĠHashMap < String , ĠNote >, Ċ // ĠĠĠ Ġprivate Ġval Ġdate Util : ĠDate Util Ċ // ) Ġ: ĠNote Cache DataSource Ġ{ Ċ // Ċ // ĠĠĠ Ġoverride Ġsuspend Ġfun Ġinsert Note ( note : ĠNote ): ĠLong Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( note . id . equals ( FORCE _ NEW _ NOTE _ EXCEPTION )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Something Ġwent Ġwrong Ġinserting Ġthe Ġnote .") Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( note . id . equals ( FORCE _ GENERAL _ FAILURE )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 Ġ// Ġfail Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġnotes Data . put ( note . id , Ġnote ) Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġ 1 Ġ// Ġsuccess Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete Note ( primaryKey : ĠString ): ĠInt Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( primaryKey . equals ( FORCE _ DELETE _ NOTE _ EXCEPTION )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Something Ġwent Ġwrong Ġdeleting Ġthe Ġnote .") Ċ // ĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( primaryKey . equals ( FORCE _ DE LET ES _ NOTE _ EXCEPTION )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Something Ġwent Ġwrong Ġdeleting Ġthe Ġnote .") Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġnotes Data . remove ( primaryKey )?. let Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ// Ġreturn Ġ 1 Ġfor Ġsuccess Ċ // ĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ- 1 Ġ// Ġ- 1 Ġfor Ġfailure Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete Notes ( notes : ĠList < Note >): ĠInt Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġvar Ġfail Or Success Ġ= Ġ 1 Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( note Ġin Ġnotes ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( notes Data . remove ( note . id ) Ġ== Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail Or Success Ġ= Ġ- 1 Ġ// Ġmark Ġfor Ġfailure Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġfail Or Success Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġsuspend Ġfun Ġupdate Note ( Ċ // ĠĠĠĠĠĠĠ Ġid : ĠString , Ċ // ĠĠĠĠĠĠĠ Ġtitle : ĠString , Ċ // ĠĠĠĠĠĠĠ Ġbody : ĠString , Ġtimestamp : ĠString ? Ċ // ĠĠĠ Ġ): ĠInt Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( id . equals ( FORCE _ UPDATE _ NOTE _ EXCEPTION )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Something Ġwent Ġwrong Ġupdating Ġthe Ġnote .") Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġval Ġupdated Note Ġ= ĠNote ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġbody Ġ?: Ġ"", Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġupdated _ at Ġ= Ġtimestamp ?: Ġdate Util . getCurrent Timestamp (), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcreated _ at Ġ= Ġnotes Data [ id ]?. created _ at Ġ?: Ġdate Util . getCurrent Timestamp () Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġnotes Data [ id ]?. let Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġnotes Data [ id ] Ġ= Ġupdated Note Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ// Ġsuccess Ċ // ĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ- 1 Ġ// Ġnothing Ġto Ġupdate Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ// ĠNot Ġtesting Ġthe Ġorder / filter . ĠJust Ġbasic Ġquery Ċ // ĠĠĠ Ġ// Ġsimulate ĠSQLite Ġ" LIKE " Ġquery Ġon Ġtitle Ġand Ġbody Ċ // ĠĠĠ Ġoverride Ġsuspend Ġfun Ġsearch Notes ( Ċ // ĠĠĠĠĠĠĠ Ġquery : ĠString , Ċ // ĠĠĠĠĠĠĠ Ġfilter And Order : Ċ // ĠĠĠĠĠĠĠ ĠString , Ċ // ĠĠĠĠĠĠĠ Ġpage : ĠInt Ċ // ĠĠĠ Ġ): ĠList < Note > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( query . equals ( FORCE _ SEARCH _ NOTES _ EXCEPTION )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Something Ġwent Ġsearching Ġthe Ġcache Ġfor Ġnotes .") Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġval Ġresults : ĠArrayList < Note > Ġ= ĠArrayList () Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( note Ġin Ġnotes Data . values ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( note . title . contains ( query )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( note ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( note . body . contains ( query )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( note ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( results . size Ġ> Ġ( page Ġ* ĠNOTE _ P AG INATION _ PAGE _ SIZE )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġresults Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġsuspend Ġfun Ġsearch Note ById ( id : ĠString ): ĠNote ? Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġnotes Data [ id ] Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetNum Notes (): ĠInt Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġnotes Data . size Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġsuspend Ġfun Ġinsert Notes ( notes : ĠList < Note >): ĠLong Array Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġresults Ġ= ĠLong Array ( notes . size ) Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ(( index , Ġnote ) Ġin Ġnotes . with Index ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġresults [ index ] Ġ= Ġ 1 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġnotes Data [ note . id ] Ġ= Ġnote Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġresults Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetAll Notes (): ĠList < Note > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠArrayList ( notes Data . values ) Ċ // ĠĠĠ Ġ} Ċ //}