/* Ċ Copyright Ġ 2 0 1 6 ĠD Ã¡n iel ĠS Ã³ ly om Ċ Ċ Licensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ you Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ You Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ċ http :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ċ Unless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ distributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ WITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ See Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ limitations Ġunder Ġthe ĠLicense . Ċ */ Ċ Ċ package Ġds . vi olin . v 1 . model . entity Ċ Ċ import Ġandroid . os . Parcelable Ċ import Ġds . vi olin . v 1 . app . vi olin . Loading Vi olin Ċ import Ġds . vi olin . v 1 . datasource . base . Background Data Loading Ċ import Ġds . vi olin . v 1 . datasource . base . Data Loading Ċ import Ġds . vi olin . v 1 . datasource . base . Interrupt able Ċ import Ġds . vi olin . v 1 . model . modeling .* Ċ import Ġjava . io . Serializable Ċ Ċ /** Ċ Ġ* Ġinterface Ġfor Ġentities Ġwho Ġcan Ġload Ġthemselves Ċ Ġ* Ċ Ġ* Ġ! note : Ġuse Ġ[ Background Data Loading ] Ġhere Ġas Ġ[ data Loader ] Ġif Ġyou Ġneed Ġbackground Ġwork Ċ Ġ* ĠĠĠĠĠĠĠ Ġ@ see Ġ[ Background Data Loading ] Ġand Ġ@ see Ġ[ Loading Vi olin ] Ġfor Ġmore Ġinformation Ċ Ġ*/ Ċ interface ĠSelf Load able Ġ: ĠInterrupt able Ġ{ ĊĊĠĠĠ Ġ/** Ġlateinit Ġ- Ġloader Ġof Ġthe Ġdata Ġ*/ ĊĠĠĠ Ġvar Ġdata Loader : ĠData Loading ĊĠĠĠ Ġ/** Ġ= Ġfalse Ġ- Ġis Ġdata Ġvalid Ġor Ġneeds Ġloading ? Ġ*/ ĊĠĠĠ Ġvar Ġvalid : ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġload ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcompletion ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġstarted Ġloading , Ġfalse Ġif Ġit Ġwas Ġnot Ġneeded , Ġeither Ġ[ Self Load able ] Ġis Ġ[ valid ] Ġor Ġalready Ġloading ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġload ( completion : Ġ( Self Load able , ĠThrowable ?) Ġ-> ĠUnit ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( valid Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( data Loader Ġis ĠBackground Data Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( data Loader Ġas ĠBackground Data Loading ). load In Background Ġ{ Ġresult , Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Data Loaded ( result , Ġerror , Ġcompletion ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Loader . load Ġ{ Ġresult , Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Data Loaded ( result , Ġerror , Ġcompletion ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ# Protected Ġ- Ġwhat Ġhappens Ġwhen Ġdata Ġis Ġloaded ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Data Loaded ( result : ĠAny ?, Ġerror : ĠThrowable ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion : Ġ( entity : ĠSelf Load able , Ġerror : ĠThrowable ?) Ġ-> ĠUnit ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġinvalid ates Ġdata Ġ- Ġtelling Ġan Ġcontroller Ġthat Ġit 's Ġdata Ġis Ġdirty Ġand Ġin Ġneed Ġof Ġre loading ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinvalidate () Ġ{ ĊĠĠĠĠĠĠĠ Ġvalid Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġdata Loader . interrupt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinterrupt () Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Loader . interrupt () ĊĠĠĠĠĠĠĠ Ġsuper . interrupt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠisLoading (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata Loader . loading ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġif Ġan Ġentity Ġimplements Ġ[ Has Serializable Data ] Ġand Ġit Ġis Ġvalid Ġit 's Ġdata Ġwill Ġbe Ġsaved Ġin Ġ[ Loading Vi olin ] s Ċ Ġ* Ġunless Ġ[ data To Serializable ] Ġreturns Ġnull Ċ Ġ*/ Ċ interface ĠHas Serializable Data Ġ{ ĊĊĠĠĠ Ġfun Ġdata To Serializable (): ĠSerializable ? ĊĠĠĠ Ġfun Ġcreate Data From ( serialized Data : ĠSerializable ) Ċ } Ċ Ċ /** Ċ Ġ* Ġif Ġan Ġentity Ġimplements Ġ[ Has Parcelable Data ] Ġand Ġit Ġis Ġvalid Ġit 's Ġdata Ġwill Ġbe Ġsaved Ġin Ġ[ Loading Vi olin ] s Ċ Ġ* Ġunless Ġ[ data To Parcelable ] Ġreturns Ġnull Ċ Ġ*/ Ċ interface ĠHas Parcelable Data Ġ{ ĊĊĠĠĠ Ġfun Ġdata To Parcelable (): ĠParcel able ? ĊĠĠĠ Ġfun Ġcreate Data From ( parcel able Data : ĠParcel able ) Ċ } Ċ Ċ interface ĠSelf Load able Model ing < T , ĠVALUE > Ġ: ĠModel ing < T , ĠVALUE >, ĠSelf Load able Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Data Loaded ( result : ĠAny ?, Ġerror : ĠThrowable ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion : Ġ( Self Load able , ĠThrowable ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalid Ġ= Ġerror Ġ== Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion ( this , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠModel ing < *, Ġ*> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues Ġ= Ġresult . values Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalues Ġ= Ġresult Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion ( this , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompletion ( this , Ġnull ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠSelf Load able ListModel ing < LIST , ĠVALUE > Ġ: ĠList Model ing < LIST , ĠVALUE >, ĠSelf Load able Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Data Loaded ( result : ĠAny ?, Ġerror : ĠThrowable ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion : Ġ( entity : ĠSelf Load able , Ġerror : ĠThrowable ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalid Ġ= Ġerror Ġ== Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion ( this , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠList Model ing < *, Ġ*> Ġ-> Ġen slave ( result Ġas ĠList Model ing < LIST , ĠVALUE >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalues Ġ= Ġresult Ġas ĠLIST ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion ( this , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompletion ( this , Ġnull ) ĊĠĠĠ Ġ} Ċ } ĊĊ