@ file : Suppress (" NOTH ING _ TO _ INLINE ") Ċ Ċ package Ġcom . db flow 5 . config Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . content . Context Ċ import Ġcom . db flow 5 . adapter . Model Adapter Ċ import Ġcom . db flow 5 . adapter . Model View Adapter Ċ import Ġcom . db flow 5 . adapter . Retrie val Adapter Ċ import Ġcom . db flow 5 . annotation . Table Ċ import Ġcom . db flow 5 . converter . Type Converter Ċ import Ġcom . db flow 5 . database . Database Wrapper Ċ import Ġcom . db flow 5 . migration . Migration Ċ import Ġcom . db flow 5 . quote Ċ import Ġcom . db flow 5 . runtime . Model Notifier Ċ import Ġcom . db flow 5 . runtime . Table Notifier Register Ċ import Ġcom . db flow 5 . structure . BaseModel Ċ import Ġcom . db flow 5 . structure . BaseModel View Ċ import Ġcom . db flow 5 . structure . Base Query Model Ċ import Ġcom . db flow 5 . structure . Invalid DB Configuration Ċ import Ġcom . db flow 5 . structure . Model Ċ import Ġorg . jetbrains . annotations . Test Only Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠDescription : ĠThe Ġmain Ġentry Ġpoint Ġinto Ġthe Ġgenerated Ġdatabase Ġcode . ĠIt Ġuses Ġreflection Ġto Ġlook Ġup Ċ Ġ* Ġand Ġconstruct Ġthe Ġgenerated Ġdatabase Ġholder Ġclass Ġused Ġin Ġdefining Ġthe Ġstructure Ġfor Ġall Ġdatabases Ċ Ġ* Ġused Ġin Ġthis Ġapplication . Ċ Ġ*/ Ċ object ĠFlow Manager Ġ{ ĊĊĠĠĠ Ġ@ Suppress Lint (" Static Field Leak ") ĊĠĠĠ Ġinternal Ġvar Ġconfig : ĠFlow Config ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġglobal Database Holder Ġ= ĠGlobal Database Holder () ĊĊĠĠĠ Ġprivate Ġval Ġloaded Modules Ġ= Ġhash Set Of < Class < out ĠDatabase Holder >>() ĊĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ DATABASE _ HOLDER _ NAME Ġ= Ġ" Generated Database Holder " ĊĊĠĠĠ Ġ@ Suppress (" RECE IVER _ NULL ABILITY _ MIS MATCH _ BASE D _ ON _ JAVA _ AN NOT ATIONS ") ĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ DATABASE _ HOLDER _ PACKAGE _ NAME Ġ= ĠFlow Manager :: class . java .` package `. name ĊĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ DATABASE _ HOLDER _ CLASS NAME Ġ= ĊĠĠĠĠĠĠĠ Ġ"$ DEFAULT _ DATABASE _ HOLDER _ PACKAGE _ NAME .$ DEFAULT _ DATABASE _ HOLDER _ NAME " ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOverride Ġfor Ġtesting ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ set : Test Only ĊĠĠĠ Ġvar Ġglobal Content Resolver : ĠContent Resolver ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWill Ġthrow Ġan Ġexception Ġif Ġthis Ġclass Ġis Ġnot Ġinitialized Ġyet Ġin Ġ[. init ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġshared Ġcontext . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġval Ġcontext : ĠContext ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġconfig ?. context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" You Ġmust Ġprovide Ġa Ġvalid ĠFlow Config Ġinstance ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠWe Ġrecommend Ġcalling Ġinit () Ġin Ġyour Ġapplication Ġclass .") ĊĊĠĠĠ Ġval Ġcontent Resolver : ĠContent Resolver ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġglobal Content Resolver Ġ?: Ġcontext . content Resolver ĊĊĊĠĠĠ Ġprivate Ġclass ĠGlobal Database Holder Ġ: ĠDatabase Holder () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġis Initialized Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd ( holder : ĠDatabase Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase Definition Map . put All ( holder . database Definition Map ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase Name Map . put All ( holder . database Name Map ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Converters . put All ( holder . type Converters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase Class Lookup Map . put All ( holder . database Class Lookup Map ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Initialized Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġtable Ġname Ġfor Ġthe Ġspecific Ġmodel Ġclass ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtable ĠThe Ġclass Ġthat Ġimplements Ġ[ Model ] ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġtable Ġname , Ġwhich Ġcan Ġbe Ġdifferent Ġthan Ġthe Ġ[ Model ] Ġclass Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget TableName ( table : ĠClass < *> ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetModel Adapter OrNull ( table )?. name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠgetModel View Adapter OrNull ( table )?. name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow Cannot Find Adapter (" Model Adapter / Model View Adapter / Virtual Adapter ", Ġtable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġdatabase Name ĠThe Ġname Ġof Ġthe Ġdatabase . ĠWill Ġthrow Ġan Ġexception Ġif Ġthe Ġdatabase For Table Ġdoesn 't Ġexist . ĊĠĠĠĠ Ġ* Ġ@ param ĠtableName ĠĠĠ ĠThe Ġname Ġof Ġthe Ġtable Ġin Ġthe ĠDB . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġassociated Ġtable Ġclass Ġfor Ġthe Ġspecified Ġname . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Table Class For Name ( database Name : ĠString , ĠtableName : ĠString ): ĠClass < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdatabase Definition Ġ= Ġget Database ( database Name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdatabase Definition . getModel Class For Name ( tableName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġdatabase Definition . getModel Class For Name ( tableName . quote ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" The Ġspecified Ġtable Ġ$ tableName Ġwas Ġnot Ġfound ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠDid Ġyou Ġforget Ġto Ġadd Ġthe Ġ@ Table Ġannotation Ġand Ġpoint Ġit Ġto Ġ$ database Name ?") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġdatabase Class ĠThe Ġclass Ġof Ġthe Ġdatabase . ĠWill Ġthrow Ġan Ġexception Ġif Ġthe Ġdatabase For Table Ġdoesn 't Ġexist . ĊĠĠĠĠ Ġ* Ġ@ param ĠtableName ĠĠĠĠ ĠThe Ġname Ġof Ġthe Ġtable Ġin Ġthe ĠDB . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġassociated Ġtable Ġclass Ġfor Ġthe Ġspecified Ġname . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Table Class For Name ( database Class : ĠClass < out ĠDB Flow Database >, ĠtableName : ĠString ): ĠClass < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdatabase Definition Ġ= Ġget Database ( database Class ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdatabase Definition . getModel Class For Name ( tableName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġdatabase Definition . getModel Class For Name ( tableName . quote ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" The Ġspecified Ġtable Ġ$ tableName Ġwas Ġnot Ġfound ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠDid Ġyou Ġforget Ġto Ġadd Ġthe Ġ@ Table Ġannotation Ġand Ġpoint Ġit Ġto Ġ$ database Class ?") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġtable ĠThe Ġtable Ġto Ġlookup Ġthe Ġdatabase Ġfor . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġcorresponding Ġ[ DB Flow Database ] Ġfor Ġthe Ġspecified Ġmodel ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Database For Table ( table : ĠClass < *> ): ĠDB Flow Database Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Database Holder () ĊĠĠĠĠĠĠĠ Ġreturn Ġglobal Database Holder . get Database For Table ( table ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠInvalid DB Configuration (" Model Ġobject : Ġ${ table . name } Ġis Ġnot Ġregistered Ġwith Ġa ĠDatabase ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠDid Ġyou Ġforget Ġan Ġannotation ?") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġ< T Ġ: ĠDB Flow Database > Ġget Database ( database Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Database Holder () ĊĠĠĠĠĠĠĠ Ġreturn Ġglobal Database Holder . get Database ( database Class ) Ġas ? ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠInvalid DB Configuration (" Database : Ġ${ database Class . name } Ġis Ġnot Ġa Ġregistered ĠDatabase . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Did Ġyou Ġforget Ġthe Ġ@ Database Ġannotation ?") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Database Name ( database : ĠClass < out ĠDB Flow Database >): ĠString Ġ= Ġget Database ( database ). database Name ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġdatabase Name ĠThe Ġname Ġof Ġthe Ġdatabase . ĠWill Ġthrow Ġan Ġexception Ġif Ġthe Ġdatabase For Table Ġdoesn 't Ġexist . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ[ DB Flow Database ] Ġfor Ġthe Ġspecified Ġdatabase ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Database ( database Name : ĠString ): ĠDB Flow Database Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Database Holder () ĊĠĠĠĠĠĠĠ Ġreturn Ġglobal Database Holder . get Database ( database Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠInvalid DB Configuration (" The Ġspecified Ġdatabase Ġ$ database Name Ġwas Ġnot Ġfound . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Did Ġyou Ġforget Ġthe Ġ@ Database Ġannotation ?") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Deprecated ( replace With Ġ= ĠReplace With (" Flow Manager . get Database For Table ( table )"), ĊĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" This Ġmethod Ġis Ġno Ġlonger Ġneeded . ĠDB Flow Database Ġnow Ġdeleg ates Ġto Ġthe ĠDatabase Wrapper .") ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Writable Database For Table ( table : ĠClass < *> ): ĠDatabase Wrapper Ġ= ĊĠĠĠĠĠĠĠ Ġget Database For Table ( table ). writable Database ĊĊĠĠĠ Ġ@ Deprecated ( replace With Ġ= ĠReplace With (" Flow Manager . get Database ( database Name )"), ĊĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" This Ġmethod Ġis Ġno Ġlonger Ġneeded . ĠDB Flow Database Ġnow Ġdeleg ates Ġto Ġthe ĠDatabase Wrapper .") ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Writable Database ( database Name : ĠString ): ĠDatabase Wrapper Ġ= ĊĠĠĠĠĠĠĠ Ġget Database ( database Name ). writable Database ĊĊĠĠĠ Ġ@ Deprecated ( replace With Ġ= ĠReplace With (" Flow Manager . get Database ( database Class )"), ĊĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" This Ġmethod Ġis Ġno Ġlonger Ġneeded . ĠDB Flow Database Ġnow Ġdeleg ates Ġto Ġthe ĠDatabase Wrapper .") ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Writable Database ( database Class : ĠClass < out ĠDB Flow Database >): ĠDatabase Wrapper Ġ= ĊĠĠĠĠĠĠĠ Ġget Database ( database Class ). writable Database ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoading Ġthe Ġmodule ĠDatabase Ġholder Ġvia Ġreflection . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIt Ġis Ġassumed ĠFlow Manager . init () Ġis Ġcalled Ġby Ġthe Ġapplication Ġthat Ġuses Ġthe ĊĠĠĠĠ Ġ* Ġmodule Ġdatabase . ĠThis Ġmethod Ġshould Ġonly Ġbe Ġcalled Ġif Ġyou Ġneed Ġto Ġload Ġdatabases ĊĠĠĠĠ Ġ* Ġthat Ġare Ġpart Ġof Ġa Ġmodule . ĠBuilding Ġonce Ġwill Ġgive Ġyou Ġthe Ġability Ġto Ġadd Ġthe Ġclass . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġinit Module ( generated ClassName : ĠClass < out ĠDatabase Holder >) Ġ{ ĊĠĠĠĠĠĠĠ Ġload Database Holder ( generated ClassName ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoading Ġthe Ġmodule ĠDatabase Ġholder Ġvia Ġreflection . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIt Ġis Ġassumed ĠFlow Manager . init () Ġis Ġcalled Ġby Ġthe Ġapplication Ġthat Ġuses Ġthe ĊĠĠĠĠ Ġ* Ġmodule Ġdatabase . ĠThis Ġmethod Ġshould Ġonly Ġbe Ġcalled Ġif Ġyou Ġneed Ġto Ġload Ġdatabases ĊĠĠĠĠ Ġ* Ġthat Ġare Ġpart Ġof Ġa Ġmodule . ĠBuilding Ġonce Ġwill Ġgive Ġyou Ġthe Ġability Ġto Ġadd Ġthe Ġclass . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinit Module ( generated ClassName : ĠK Class < out ĠDatabase Holder >) Ġ{ ĊĠĠĠĠĠĠĠ Ġload Database Holder ( generated ClassName . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠgetConfig (): ĠFlow Config Ġ= Ġconfig ĊĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Configuration Ġis Ġnot Ġinitialized . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Please Ġcall Ġinit ( Flow Config ) Ġin Ġyour Ġapplication Ġclass .") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġdatabase Ġholder , Ġcreating Ġif Ġnecessary Ġusing Ġreflection . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġload Database Holder ( holder Class : ĠClass < out ĠDatabase Holder >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( loaded Modules . contains ( holder Class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoad Ġthe Ġdatabase Ġholder , Ġand Ġadd Ġit Ġto Ġthe Ġglobal Ġcollection . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Holder : ĠDatabase Holder ? Ġ= Ġholder Class . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( db Holder Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Database Holder . add ( db Holder ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCache Ġthe Ġholder Ġfor Ġfuture Ġreference . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Modules . add ( holder Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠModule NotFoundException (" Cannot Ġload Ġ$ holder Class ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe sets Ġall Ġdatabases Ġand Ġassociated Ġfiles . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġglobal Database Holder . database Class Lookup Map . values . forEach Ġ{ Ġit . reset () Ġ} ĊĠĠĠĠĠĠĠ Ġglobal Database Holder . reset () ĊĠĠĠĠĠĠĠ Ġloaded Modules . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClose Ġall ĠDB Ġfiles Ġand Ġresets Ġ[ Flow Config ] Ġand Ġthe Ġ[ Global Database Holder ]. ĠBr ings ĊĠĠĠĠ Ġ* ĠDB Flow Ġback Ġto Ġinitial Ġapplication Ġstate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġglobal Database Holder . database Class Lookup Map . values . forEach Ġ{ Ġit . close () Ġ} ĊĠĠĠĠĠĠĠ Ġconfig Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġglobal Database Holder Ġ= ĠGlobal Database Holder () ĊĠĠĠĠĠĠĠ Ġloaded Modules . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHelper Ġmethod Ġto Ġsimplify Ġthe Ġ[. init ]. ĠUse Ġ[. init ] Ġto Ġprovide ĊĠĠĠĠ Ġ* Ġmore Ġcustomization . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġ- Ġshould Ġbe Ġapplication Ġcontext , Ġbut Ġnot Ġnecessary Ġas Ġwe Ġretrieve Ġit Ġany ways . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġinit ( context : ĠContext , Ġconfig : ĠFlow Config . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( flow Config ( context , Ġconfig )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitializes ĠDB Flow , Ġloading Ġthe Ġmain Ġapplication ĠDatabase Ġholder Ġvia Ġreflection Ġone Ġtime Ġonly . ĊĠĠĠĠ Ġ* ĠThis Ġwill Ġtrigger Ġall Ġcre ations , Ġupdates , Ġand Ġinstantiation Ġfor Ġeach Ġdatabase Ġdefined . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġflow Config ĠThe Ġconfiguration Ġinstance Ġthat Ġwill Ġhelp Ġshape Ġhow ĠDB Flow Ġgets Ġconstructed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġinit ( flow Config : ĠFlow Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig Ġ= Ġconfig ?. merge ( flow Config ) Ġ?: Ġflow Config ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Holder Class Ġ= ĠClass . forName ( DEFAULT _ DATABASE _ HOLDER _ CLASS NAME ) Ġas ĠClass < out ĠDatabase Holder > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Database Holder ( default Holder Class ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠModule NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġthis Ġexception Ġsince Ġit Ġmeans Ġthe Ġapplication Ġdoes Ġnot Ġhave Ġits ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġown Ġdatabase . ĠThe Ġinitialization Ġhappens Ġbecause Ġthe Ġapplication Ġis Ġusing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġa Ġmodule Ġthat Ġhas Ġa Ġdatabase . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFlow Log . log ( level Ġ= ĠFlow Log . Level . W , Ġmessage Ġ= Ġe . message ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwarning Ġif Ġa Ġlibrary Ġuses ĠDB Flow Ġwith Ġmodule Ġsupport Ġbut Ġthe Ġapp Ġyou 're Ġusing Ġdoesn 't Ġsupport Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFlow Log . log ( level Ġ= ĠFlow Log . Level . W , Ġmessage Ġ= Ġ" Could Ġnot Ġfind Ġthe Ġdefault ĠGenerated Database Holder ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġflow Config . database Hold ers . forEach Ġ{ Ġload Database Holder ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( flow Config . open Databases OnInit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Database Holder . database Definitions . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtriggers Ġopen , Ġcreate , Ġmigrations . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writable Database ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġobject Class ĠA Ġclass Ġwith Ġan Ġassociated Ġtype Ġconverter . ĠMay Ġreturn Ġnull Ġif Ġnot Ġfound . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġspecific Ġ[ Type Converter ] Ġfor Ġthe Ġspecified Ġclass . ĠIt Ġdefines ĊĠĠĠĠ Ġ* Ġhow Ġthe Ġcustom Ġdatatype Ġis Ġhandled Ġgoing Ġinto Ġand Ġout Ġof Ġthe ĠDB . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠgetType Converter For Class ( object Class : ĠClass < *> ): ĠType Converter < *, Ġ* >? Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Database Holder () ĊĠĠĠĠĠĠĠ Ġreturn Ġglobal Database Holder . getType Converter For Class ( object Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġregion ĠGet ters ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRelease Ġreference Ġto Ġcontext Ġand Ġ[ Flow Config ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġglobal Database Holder . database Class Lookup Map . values . forEach Ġ{ Ġit . destroy () Ġ} ĊĠĠĠĠĠĠĠ Ġconfig Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ// ĠReset Ġthe Ġglobal Ġdatabase Ġholder . ĊĠĠĠĠĠĠĠ Ġglobal Database Holder Ġ= ĠGlobal Database Holder () ĊĠĠĠĠĠĠĠ Ġloaded Modules . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġmodel Class ĠThe Ġclass Ġthat Ġimplements Ġ[ Model ] Ġto Ġfind Ġan Ġadapter Ġfor . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġadapter Ġassociated Ġwith Ġthe Ġclass . ĠIf Ġits Ġnot Ġa Ġ[ Model Adapter ], ĊĠĠĠĠ Ġ* Ġit Ġchecks Ġboth Ġthe Ġ[ Model View Adapter ] Ġand Ġ[ Retrie val Adapter ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġget Retrie val Adapter ( model Class : ĠClass < T >): ĠRetrie val Adapter < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġretrieval Adapter : ĠRetrie val Adapter < T >? Ġ= ĠgetModel Adapter OrNull ( model Class ) ĊĠĠĠĠĠĠĠ Ġif Ġ( retrie val Adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretrieval Adapter Ġ= ĠgetModel View Adapter OrNull ( model Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġget Query Model Adapter OrNull ( model Class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġretrieval Adapter Ġ?: Ġthrow Cannot Find Adapter (" Retrie val Adapter ", Ġmodel Class ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġmodel Class ĠThe Ġclass Ġof Ġthe Ġtable ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ T ] ĠĠ ĠThe Ġclass Ġthat Ġimplements Ġ[ Model ] ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġassociated Ġmodel Ġadapter Ġ( DAO ) Ġthat Ġis Ġgenerated Ġfrom Ġa Ġ[ Table ] Ġclass . ĠHandles ĊĠĠĠĠ Ġ* Ġinteractions Ġwith Ġthe Ġdatabase . ĠThis Ġmethod Ġis Ġmeant Ġfor Ġinternal Ġusage Ġonly . ĊĠĠĠĠ Ġ* ĠWe Ġstrongly Ġprefer Ġyou Ġuse Ġthe Ġbuilt - in Ġmethods Ġassociated Ġwith Ġ[ Model ] Ġand Ġ[ BaseModel ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > ĠgetModel Adapter ( model Class : ĠClass < T >): ĠModel Adapter < T > Ġ= ĊĠĠĠĠĠĠĠ ĠgetModel Adapter OrNull ( model Class ) Ġ?: Ġthrow Cannot Find Adapter (" Model Adapter ", Ġmodel Class ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġmodel Ġview Ġadapter Ġfor Ġa ĠSQLite ĠVIEW . ĠThese Ġare Ġonly Ġcreated Ġwith Ġthe Ġ[ com . db flow 5 . annotation . Model View ] Ġannotation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmodel View Class ĠThe Ġclass Ġof Ġthe ĠVIEW ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ T ] Ġ ĠThe Ġclass Ġthat Ġextends Ġ[ BaseModel View ] ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġmodel Ġview Ġadapter Ġfor Ġthe Ġspecified Ġmodel Ġview . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > ĠgetModel View Adapter ( model View Class : ĠClass < T >): ĠModel View Adapter < T > Ġ= ĊĠĠĠĠĠĠĠ ĠgetModel View Adapter OrNull ( model View Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow Cannot Find Adapter (" Model View Adapter ", Ġmodel View Class ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġquery Ġmodel Ġadapter Ġfor Ġthe Ġmodel Ġclass . ĠThese Ġare Ġonly Ġcreated Ġwith Ġthe Ġ[ T ] Ġannotation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġquery Model Class ĠThe Ġclass Ġof Ġthe Ġquery ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ T ] Ġ ĠThe Ġclass Ġthat Ġextends Ġ[ Base Query Model ] ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġquery Ġmodel Ġadapter Ġfor Ġthe Ġspecified Ġmodel Ġcursor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġget Query Model Adapter ( query Model Class : ĠClass < T >): ĠRetrie val Adapter < T > Ġ= ĊĠĠĠĠĠĠĠ Ġget Query Model Adapter OrNull ( query Model Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow Cannot Find Adapter (" Retrie val Adapter ", Ġquery Model Class ) ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠgetModel Notifier For Table ( table : ĠClass < *> ): ĠModel Notifier Ġ= ĊĠĠĠĠĠĠĠ Ġget Database For Table ( table ). getModel Notifier () ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġnew Register For Table ( table : ĠClass < *> ): ĠTable Notifier Register Ġ= ĊĠĠĠĠĠĠĠ ĠgetModel Notifier For Table ( table ). new Register () ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠAny > ĠgetModel Adapter OrNull ( model Class : ĠClass < T >): ĠModel Adapter < T >? Ġ= ĊĠĠĠĠĠĠĠ Ġget Database For Table ( model Class ). getModel Adapter For Table ( model Class ) ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠAny > ĠgetModel View Adapter OrNull ( model Class : ĠClass < T >): ĠModel View Adapter < T >? Ġ= ĊĠĠĠĠĠĠĠ Ġget Database For Table ( model Class ). getModel View Adapter For Table ( model Class ) ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠAny > Ġget Query Model Adapter OrNull ( model Class : ĠClass < T >): ĠRetrie val Adapter < T >? Ġ= ĊĠĠĠĠĠĠĠ Ġget Database For Table ( model Class ). getQuery Model Adapter For Query Class ( model Class ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġa Ġstandard Ġdatabase Ġhelper Ġfor Ġintegrity Ġusing Ġquick _ check ( 1 ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdatabase Name ĠThe Ġname Ġof Ġthe Ġdatabase Ġto Ġcheck . ĠWill Ġthrown Ġan Ġexception Ġif Ġit Ġdoes Ġnot Ġexist . ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġit 's Ġintegrity Ġis ĠOK . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġis Database Integr ity Ok ( database Name : ĠString ) Ġ= Ġget Database ( database Name ). open Helper . is Database Integr ity Ok ĊĊĠĠĠ Ġprivate Ġfun Ġthrow Cannot Find Adapter ( type : ĠString , Ġclazz : ĠClass < *> ): ĠNothing Ġ= ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Cannot Ġfind Ġ$ type Ġfor Ġ$ clazz . ĠEnsure Ġthe Ġclass Ġis Ġannotated Ġwith Ġproper Ġannotation .") ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Database Holder () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! global Database Holder . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" The Ġglobal Ġdatabase For Table Ġholder Ġis Ġnot Ġinitialized . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ensure Ġyou Ġcall ĠFlow Manager . init () Ġbefore Ġaccessing Ġthe Ġdatabase For Table .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠException Ġthrown Ġwhen Ġa Ġdatabase Ġholder Ġcannot Ġload Ġthe Ġdatabase For Table Ġholder ĊĠĠĠĠ Ġ* Ġfor Ġa Ġmodule . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠModule NotFoundException ( detail Message : ĠString , Ġthrowable : ĠThrowable ) ĊĠĠĠĠĠĠĠ Ġ: ĠRuntimeException ( detail Message , Ġthrowable ) Ċ Ċ } Ċ Ċ /** Ċ Ġ* ĠE as ily Ġget Ġaccess Ġto Ġits Ġ[ DB Flow Database ] Ġdirectly . Ċ Ġ*/ Ċ inline Ġfun Ġ< T Ġ: ĠDB Flow Database > Ġdatabase ( k Class : ĠK Class < T >, Ġf : Ġ( db : ĠT ) Ġ-> ĠUnit Ġ= Ġ{} ): ĠT Ġ= ĊĠĠĠ ĠFlow Manager . get Database ( k Class . java ). apply ( f ) Ċ Ċ /** Ċ Ġ* ĠE as ily Ġget Ġaccess Ġto Ġits Ġ[ DB Flow Database ] Ġdirectly . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠDB Flow Database > Ġdatabase ( f : Ġ( db : ĠT ) Ġ-> ĠUnit Ġ= Ġ{} ): ĠT Ġ= ĊĠĠĠ ĠFlow Manager . get Database ( T :: class . java ). apply ( f ) Ċ Ċ /** Ċ Ġ* ĠE as ily Ġget Ġaccess Ġto Ġits Ġ[ DB Flow Database ] Ġdirectly . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġdatabase For Table ( f : Ġ( db : ĠDB Flow Database ) Ġ-> ĠUnit Ġ= Ġ{} ): ĠDB Flow Database Ġ= ĊĠĠĠ ĠFlow Manager . get Database For Table ( T :: class . java ). apply ( f ) Ċ Ċ /** Ċ Ġ* ĠE as ily Ġget Ġaccess Ġto Ġits Ġ[ DB Flow Database ] Ġdirectly . Ċ Ġ*/ Ċ inline Ġfun Ġ< T Ġ: ĠAny > Ġdatabase For Table ( clazz : ĠK Class < T >, Ġf : Ġ( db : ĠDB Flow Database ) Ġ-> ĠUnit Ġ= Ġ{} ): ĠDB Flow Database Ġ= ĊĠĠĠ ĠFlow Manager . get Database For Table ( clazz . java ). apply ( f ) Ċ Ċ /** Ċ Ġ* ĠE as ily Ġget Ġits Ġtable Ġname . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠtableName (): ĠString Ġ= ĠFlow Manager . get TableName ( T :: class . java ) Ċ Ċ /** Ċ Ġ* ĠE as ily Ġget Ġits Ġ[ Model Adapter ]. Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġmodel Adapter () Ġ= ĠFlow Manager . getModel Adapter ( T :: class . java ) Ċ Ċ inline Ġval Ġ< T Ġ: ĠAny > ĠK Class < T >. model Adapter ĊĠĠĠ Ġget () Ġ= ĠFlow Manager . getModel Adapter ( this . java ) ĊĊ Ċ inline Ġval Ġ< T Ġ: ĠAny > ĠClass < T >. model Adapter ĊĠĠĠ Ġget () Ġ= ĠFlow Manager . getModel Adapter ( this ) Ċ Ċ @ Deprecated ( message Ġ= Ġ" Use Ġretrieval Adapter (). ", Ġreplace With Ġ= ĠReplace With (" retrie val Adapter ()", Ġ" com . db flow 5 . config ")) Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġquery Model Adapter () Ġ= ĠFlow Manager . getQuery Model Adapter ( T :: class . java ) Ċ Ċ @ Deprecated ( message Ġ= Ġ" Use Ġretrieval Adapter .", Ġreplace With Ġ= ĠReplace With (" retrie val Adapter ", Ġ" com . db flow 5 . config ")) Ċ inline Ġval Ġ< T Ġ: ĠAny > ĠK Class < T >. query Model Adapter ĊĠĠĠ Ġget () Ġ= ĠFlow Manager . getQuery Model Adapter ( this . java ) Ċ Ċ @ Deprecated ( message Ġ= Ġ" Use Ġretrieval Adapter (). ", Ġreplace With Ġ= ĠReplace With (" retrie val Adapter ", Ġ" com . db flow 5 . config ")) Ċ inline Ġval Ġ< T Ġ: ĠAny > ĠClass < T >. query Model Adapter ĊĠĠĠ Ġget () Ġ= ĠFlow Manager . getQuery Model Adapter ( this ) Ċ Ċ /** Ċ Ġ* ĠE as ily Ġget Ġits Ġ[ Retrie val Adapter ]. Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġretrieval Adapter () Ġ= ĠFlow Manager . getQuery Model Adapter ( T :: class . java ) Ċ Ċ inline Ġval Ġ< T Ġ: ĠAny > ĠK Class < T >. retrie val Adapter ĊĠĠĠ Ġget () Ġ= ĠFlow Manager . getQuery Model Adapter ( this . java ) Ċ Ċ inline Ġval Ġ< T Ġ: ĠAny > ĠClass < T >. retrie val Adapter ĊĠĠĠ Ġget () Ġ= ĠFlow Manager . getQuery Model Adapter ( this ) Ċ Ċ /** Ċ Ġ* ĠE as ily Ġget Ġits Ġ[ Model View Adapter ] Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġmodel View Adapter () Ġ= ĠFlow Manager . getModel View Adapter ( T :: class . java ) Ċ Ċ inline Ġval Ġ< T Ġ: ĠAny > ĠK Class < T >. model View Adapter ĊĠĠĠ Ġget () Ġ= ĠFlow Manager . getModel View Adapter ( this . java ) Ċ Ċ inline Ġval Ġ< T Ġ: ĠAny > ĠClass < T >. model View Adapter ĊĠĠĠ Ġget () Ġ= ĠFlow Manager . getModel View Adapter ( this )