package Ġbr . com . rob son ld o . library Ċ Ċ import Ġbr . com . rob son ld o . library . annotations .* Ċ import Ġbr . com . rob son ld o . library . annotations . Collection Ċ import Ġbr . com . rob son ld o . library . exceptions . Fire Store ORM Exception Ċ import Ġbr . com . rob son ld o . library . interfaces .* Ċ import Ġcom . google . android . gms . tasks . On Failure Listener Ċ import Ġcom . google . android . gms . tasks . On Success Listener Ċ import Ġcom . google . firebase . firestore .* Ċ import Ġjava . lang . reflect . Field Ċ import Ġjava . lang . reflect . Modifier Ċ import Ġkotlin . collections . HashMap Ċ import Ġkotlin . collections . Map Ċ import Ġkotlin . collections . Mutable Collection Ċ import Ġkotlin . collections . Mutable List Ċ import Ġkotlin . collections . Mutable Map Ċ import Ġkotlin . collections . hash Map Of Ċ import Ġkotlin . collections . isEmpty Ċ import Ġkotlin . collections . mutable ListOf Ċ import Ġkotlin . collections . set Ċ import Ġkotlin . collections . to Typed Array Ċ Ċ type alias ĠGet < T > Ġ= Ġ( obj : ĠT ) Ġ-> ĠUnit Ċ type alias ĠOn Get < T > Ġ= Ġ( obj : ĠT ?) Ġ-> ĠUnit Ċ type alias ĠOn All < T > Ġ= Ġ( obj : ĠT , Ġtype : ĠDocument Change . Type ) Ġ-> ĠUnit Ċ type alias ĠOn All Init < T > Ġ= Ġ( objects : ĠMutable List < T >) Ġ-> ĠUnit Ċ type alias ĠAll < T > Ġ= Ġ( obj : ĠMutable List < T >) Ġ-> ĠUnit Ċ type alias ĠError Ġ= Ġ( e : ĠException ?) Ġ-> ĠUnit Ċ Ċ abstract Ġclass ĠFire Store ORM < T Ġ: ĠFire Store ORM < T >> Ġ{ ĊĊĠĠĠ Ġvar Ġid : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġif Ġ( field Ġ!= Ġ"") Ġfield Ġelse Ġgenerate Key () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġpath : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĊĠĠĠ Ġvar Ġmap Value : ĠMap < String , ĠAny >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĊĠĠĠ Ġvar Ġwas Found : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĊĠĠĠ Ġvar Ġparams : ĠArray < String > Ġ= ĠarrayOf () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Path () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transient Ġprivate Ġval Ġdatabase : ĠFirebase Fire store Ġ= ĠFirebase Fire store . getInstance () ĊĠĠĠ Ġ@ Transient Ġval Ġcollection : ĠCollection ? Ġ= Ġget A Collection () ĊĊĠĠĠ Ġ@ Transient Ġval Ġdocument Snapshot Save : ĠDocument Snapshot Save ? Ġ= Ġget AD ocument Snapshot Save () ĊĠĠĠ Ġ@ Transient Ġval Ġtype Source : ĠSource Ġ= Ġget A Type Source () ĊĊĠĠĠ Ġ@ Transient Ġvar Ġvalue In HashMap : ĠField ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĊĠĠĠ Ġ@ Transient Ġvar ĠfieldId : ĠField ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĊĠĠĠ Ġ@ Transient Ġval Ġattributes : ĠHashMap < String , ĠField > Ġ= Ġhash Map Of () ĊĠĠĠ Ġ@ Transient Ġval Ġattributes References : ĠHashMap < String , ĠField > Ġ= Ġhash Map Of () ĊĊĠĠĠ Ġ@ Transient Ġprivate Ġval Ġon Listener Regist rations : ĠMutable Collection < Listener Registration > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġ@ Transient Ġvar Ġdocument Snapshot : ĠDocument Snapshot ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Path () ĊĠĠĠĠĠĠĠ Ġpersisted () ĊĠĠĠĠĠĠĠ Ġmanager Fields ( this :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġopen Ġfun Ġget ( on Completion : ĠOn Completion < T >, Ġis Include All : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! validate Ġ{ Ġe Ġ-> Ġon Completion . onError ( e ) Ġ}) Ġ{ Ġreturn Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Collection Reference () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. document ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( type Source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġsnap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= ĠData Parse . document Snapshot In Object ( snap , Ġthis Ġas ĠT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Include All ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInclude . object Get Include All References ( t , Ġon Completion ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Completion . on Success ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Completion . onError ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe Ġ-> Ġon Completion . onError ( e ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Completion . onError ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġopen Ġfun Ġon Get ( on Listener Get : ĠOn Listener Get < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! validate ( true ) Ġ{ Ġe Ġ-> Ġon Listener Get . onError ( e ) Ġ}) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregistration : ĠListener Registration Ġ= Ġget Collection Reference () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. document ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Snapshot Listener Ġ{ Ġsnap , Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ!= Ġnull ) Ġ{ Ġreturn @ add Snapshot Listener Ġon Listener Get . onError ( e ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( snap Ġ!= Ġnull Ġ&& Ġsnap . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Listener Get . on Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Parse . document Snapshot In Object ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsnap , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e 1 : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Listener Get . onError ( e 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Listener Get . on Listener ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Listener Regist rations . add ( registration ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Listener Get . onError ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġall ( on Completion All : ĠOn Completion All < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindAll Query ( get Collection Reference (), Ġon Completion All ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Completion All . onError ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġopen Ġfun ĠfindAll Query ( query : ĠQuery , Ġon Completion All : ĠOn Completion All < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! validate ( false ) Ġ{ Ġe Ġ-> Ġon Completion All . onError ( e ) Ġ}) Ġ{ Ġreturn Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlist : ĠMutable List < T > Ġ= Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠ Ġquery ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( type Source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! task . is Successful Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Completion All . onError ( task . exception Ġ?: ĠException ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . result Ġ== Ġnull Ġ-> Ġ{ Ġon Completion All . on Success ( list ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( snap Ġin Ġtask . result !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Parse . document Snapshot In Object ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsnap , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis :: class . java . newInstance () Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġmanager Object By Caller ( this @ Fire Store ORM ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add On Complete Listener Ġon Completion All . onError ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Completion All . on Success ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġon All ( on Listener All : ĠOn Listener All < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Find All Query ( get Collection Reference (), Ġon Listener All ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Listener All . onError ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġopen Ġfun Ġon Find All Query ( query : ĠQuery , Ġon Listener All : ĠOn Listener All < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! validate Ġ{ Ġe Ġ-> Ġon Listener All . onError ( e ) Ġ}) Ġ{ Ġreturn Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġis Init Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġobjects : ĠMutable List < T > Ġ= Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠ Ġvar Ġregistration : ĠListener Registration ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġregistration Ġ= Ġquery ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Snapshot Listener Ġ{ Ġsnap , Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Listener All . onError ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Snapshot Listener Ġremove Listener Registration ( registration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( snap Ġ== Ġnull ) Ġ{ Ġreturn @ add Snapshot Listener Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Init ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Init Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloop @ Ġfor Ġ( dc Ġin Ġsnap . document Changes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dc . type Ġ!= ĠDocument Change . Type . AD DED ) Ġ{ Ġcontinue @ loop Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobjects . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Parse . document Snapshot In Object ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdc . document , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis :: class . java . newInstance () Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġmanager Object By Caller ( this @ Fire Store ORM ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Listener Registration ( registration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Snapshot Listener Ġon Listener All . onError ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Snapshot Listener Ġon Listener All . on Init ( objects ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloop @ Ġfor Ġ( dc Ġin Ġsnap . document Changes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġt : ĠT ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ= Ġthis :: class . java . newInstance () Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ= ĠData Parse . document Snapshot In Object ( dc . document , Ġt ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager Object By Caller ( this @ Fire Store ORM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Listener Registration ( registration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Snapshot Listener Ġon Listener All . onError ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( dc . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDocument Change . Type . AD DED Ġ-> Ġ{ Ġon Listener All . on Added ( t ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDocument Change . Type . MODI FIED Ġ-> Ġ{ Ġon Listener All . on Modified ( t ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDocument Change . Type . RE MOVED Ġ-> Ġ{ Ġon Listener All . on Removed ( t ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġon Listener Regist rations . add ( registration ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġopen Ġfun Ġsave ( merge : ĠBoolean Ġ= Ġtrue , Ġon Completion : ĠOn Completion < T >? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare To Save ( merge , Ġon Completion ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare To Save ( merge : ĠBoolean Ġ= Ġtrue , Ġon Completion : ĠOn Completion < T >? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! validate Ġ{ Ġe Ġ-> Ġon Completion ?. onError ( e ) Ġ}) Ġ{ Ġreturn Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdf Ġ= Ġget Collection Reference (). document ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave ( Data Parse . toMap ( this ), Ġdf , Ġmerge , Ġon Completion ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Completion ?. onError ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġfun Ġsave ( ĊĠĠĠĠĠĠĠ Ġmap : ĠMutable Map < String , ĠAny ? >, ĊĠĠĠĠĠĠĠ Ġdf : ĠDocument Reference , ĊĠĠĠĠĠĠĠ Ġmerge : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġon Completion : ĠOn Completion < T >? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠonSuccess Listener Ġ= ĠOn Success Listener < Void > Ġ{ Ġon Completion ?. on Success ( this Ġas ĠT ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġon Failure Listener Ġ= ĠOn Failure Listener Ġ{ Ġe Ġ-> Ġon Completion ?. onError ( e ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( merge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdf ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( map , ĠSet Options . merge ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener ( on Success Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener ( on Failure Listener ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdf ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener ( on Success Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener ( on Failure Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġupdate Increment ( ĊĠĠĠĠĠĠĠ Ġvar arg Ġfields And In crements : ĠPair < String , ĠLong >, ĊĠĠĠĠĠĠĠ Ġon Completion : ĠOn Completion < T >? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! validate Update Fields ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* fields And In crements . filter Ġ{ Ġit . second Ġ!= Ġ 0 L Ġ}. map Ġ{ Ġit . first Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġe Ġ-> Ġon Completion ?. onError ( e ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġvalue In Field Or Field Increment ( field : ĠString , Ġinc : ĠLong ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( inc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 L Ġ-> Ġ{ ĠData Parse . getValue In Field ( this , Ġfield ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĠField Value . increment ( inc ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfields And Values : ĠMutable List < Any ?> Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdf Ġ= Ġget Collection Reference (). document ( id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġfields And In crements [ 0 ]. first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġvalue In Field Or Field Increment ( field , Ġfields And In crements [ 0 ]. second ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġfields And In crements . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields And Values . add ( fields And In crements [ i ]. first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields And Values . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue In Field Or Field Increment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields And In crements [ i ]. first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields And In crements [ i ]. second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdf . update ( field , Ġvalue , Ġ* fields And Values . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġon Completion ?. on Success ( this Ġas ĠT ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe Ġ-> Ġon Completion ?. onError ( e ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Completion ?. onError ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġupdate FieldValue ( var arg Ġfields : ĠString , Ġon Completion : ĠOn Completion < T >? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! validate Update Fields (* fields ) Ġ{ Ġe Ġ-> Ġon Completion ?. onError ( e ) Ġ}) Ġ{ Ġreturn Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfields And Values : ĠMutable List < Any ?> Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdf Ġ= Ġget Collection Reference (). document ( id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġfields [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue : ĠAny ? Ġ= ĠData Parse . getValue In Field ( this , Ġfields [ 0 ]) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġfields . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields And Values . add ( fields [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields And Values . add ( Data Parse . getValue In Field ( this , Ġfields [ i ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdf . update ( field , Ġvalue , Ġ* fields And Values . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġon Completion ?. on Success ( this Ġas ĠT ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe Ġ-> Ġon Completion ?. onError ( e ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Completion ?. onError ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġopen Ġfun Ġdelete ( on Completion : ĠOn Completion < T >? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! validate Ġ{ Ġe Ġ-> Ġon Completion ?. onError ( e ) Ġ}) Ġ{ Ġreturn Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Collection Reference () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. document ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġon Completion ?. on Success ( this Ġas ĠT ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe Ġ-> Ġon Completion ?. onError ( e ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Completion ?. onError ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġopen Ġfun Ġinclude ( ĊĠĠĠĠĠĠĠ Ġreference Name : ĠString , ĊĠĠĠĠĠĠĠ Ġon Include : ĠOn Include ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvalidate Values In Annotation : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠInclude . include Reference ( this , Ġreference Name , Ġobject Ġ: ĠOn Include Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Include ?. on Success () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Include ?. onError ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġvalidate Values In Annotation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġopen Ġfun Ġinclude All ( ĊĠĠĠĠĠĠĠ Ġon Include All : ĠOn Include All ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvalidate Values In Annotation : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠInclude . include All References ( this , Ġobject Ġ: ĠOn Include All Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Include All ?. on Success () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Include All ?. onError ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġvalidate Values In Annotation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Key (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠfieldId ?. let Ġ{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . get ( this ) Ġas ĠString ? ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġget Collection Reference (). document (). id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate ( verify Id : ĠBoolean Ġ= Ġtrue , Ġexception : Ġ( e : ĠException ) Ġ-> ĠUnit ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġget A Collection () Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception ( Fire Store ORM Exception ("${ get ClassName ()} : ĠCollection Ġnot Ġdefined ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpath . trim () Ġ== Ġ"" Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception ( Fire Store ORM Exception ("${ get ClassName ()} : ĠCollection Ġname Ġis Ġnull Ġor Ġempty ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify Id Ġ&& Ġid Ġ== Ġ"" Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception ( Fire Store ORM Exception ("${ get ClassName ()} : ĠId Ġis Ġnull ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ Ġtrue Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate Update Fields ( ĊĠĠĠĠĠĠĠ Ġvar arg Ġfields : ĠString , ĊĠĠĠĠĠĠĠ Ġexception : Ġ( e : ĠException ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġ! validate ( true ) Ġ{ Ġe Ġ-> Ġexception ( e ) Ġ} Ġ-> Ġ{ Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġfields . isEmpty () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception ( Fire Store ORM Exception ("${ get ClassName ()} : ĠFields Ġis Ġempty ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ Ġtrue Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ClassName () Ġ= Ġthis :: class . java . name ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġget Collection Reference (): ĠCollection Reference Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdatabase . collection ( path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget A Collection (): ĠCollection ? Ġ= Ġthis :: class . java . getAnnotation ( Collection :: class . java ) ĊĊĠĠĠ Ġfun Ġget AD ocument Snapshot Save (): ĠDocument Snapshot Save ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis :: class . java . getAnnotation ( Document Snapshot Save :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget A Type Source (): ĠSource Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis :: class . java . getAnnotation ( Type Source :: class . java )?. value Ġ?: ĠSource . DEFAULT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpersisted () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpersisted Ġ= Ġthis :: class . java . getAnnotation ( Pers isted :: class . java ) ĊĠĠĠĠĠĠĠ Ġdatabase . firestore Settings Ġ= ĠFirebase Fire store Settings . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Persistence Enabled ( pers isted ?. value Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Path () Ġ{ ĊĠĠĠĠĠĠĠ Ġpath Ġ= Ġcollection ?. value Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( collection ?. params . equals ("") Ġ|| Ġparams . isEmpty ()) Ġ{ Ġreturn Ġ} ĊĠĠĠĠĠĠĠ Ġpath Ġ= ĠString . format ( String . format ("% s % s ", Ġpath , Ġcollection ?. params ), Ġ* params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmanager Object By Caller ( caller : ĠFire Store ORM < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġpath Ġ= Ġcaller . path ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmanager Fields ( clazz : ĠClass <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= Ġclazz . declared Fields ĊĊĠĠĠĠĠĠĠ Ġloop @ Ġfor Ġ( field Ġin Ġfields ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Not Valid ( field ) Ġ-> Ġ{ Ġcontinue @ loop Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . is Annotation Present ( Attribute :: class . java ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattribute : ĠAttribute ? Ġ= Ġfield . getAnnotation ( Attribute :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( attribute Ġ!= Ġnull ) Ġ{ Ġattributes [ attribute . value ] Ġ= Ġfield Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Annotation Id ( field ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . is Annotation Present ( Value HashMap :: class . java ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue In HashMap Ġ= Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . is Annotation Present ( Attribute Reference :: class . java ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . getAnnotation ( Attribute Reference :: class . java )?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes References [ it . reference Name ] Ġ= Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes [ field . name ] Ġ= Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Annotation Id ( field ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsuper Clazz Ġ= Ġclazz . super class ĊĠĠĠĠĠĠĠ Ġif Ġ( super Clazz Ġ!= Ġclazz ) Ġ{ Ġsuper Clazz ?. isAssignableFrom ( Fire Store ORM :: class . java ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Annotation Id ( field : ĠField ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( field . is Annotation Present ( Id :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠString :: class . java . isAssignableFrom ( field . type )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠfieldId Ġ= Ġfield ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfield Not Valid ( field : ĠField ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfield . is Annotation Present ( Ignore :: class . java ) Ġ|| ĠModifier . is Transient ( field . modifiers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠModifier . is Static ( field . modifiers ) Ġ|| ĠModifier . is Final ( field . modifiers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove All Listener Regist rations () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( registration Ġin Ġon Listener Regist rations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Listener Registration ( registration ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġon Listener Regist rations . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Listener Registration ( registration : ĠListener Registration ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġregistration ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Listener Regist rations . remove ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġsave ( merge : ĠBoolean Ġ= Ġtrue , Ġget : ĠGet < T >, Ġerror : ĠError ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsave ( merge , Ġobject Ġ: ĠOn Completion < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( obj : ĠT ) Ġ= Ġget ( obj ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠException ) Ġ= Ġerror ( e ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġget ( get : ĠGet < T >, Ġerror : ĠError ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget ( object Ġ: ĠOn Completion < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( obj : ĠT ) Ġ= Ġget ( obj ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠException ) Ġ= Ġerror ( e ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġon Get ( on Get : ĠOn Get < T >, Ġerror : ĠError ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Get ( object Ġ: ĠOn Listener Get < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Listener ( obj : ĠT ?) Ġ= Ġon Get ( obj ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠException ) Ġ= Ġerror ( e ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġall ( all : ĠAll < T >, Ġerror : ĠError ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindAll Query ( get Collection Reference (), Ġall , Ġerror ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun ĠfindAll Query ( query : ĠQuery , Ġall : ĠAll < T >, Ġerror : ĠError ) Ġ{ ĊĠĠĠĠĠĠĠ ĠfindAll Query ( query , Ġobject Ġ: ĠOn Completion All < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠException ) Ġ= Ġerror ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( objs : ĠMutable List < T >) Ġ= Ġall ( objs ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġon All ( on All Init : ĠOn All Init < T >, Ġon All : ĠOn All < T >, Ġerror : ĠError ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Find All Query ( get Collection Reference (), Ġon All Init , Ġon All , Ġerror ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġopen Ġfun Ġon Find All Query ( query : ĠQuery , Ġon All Init : ĠOn All Init < T >, Ġon All : ĠOn All < T >, Ġerror : ĠError ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Find All Query ( query , Ġobject : ĠOn Listener All < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Init ( objects : ĠMutable List < T >) Ġ= Ġon All Init ( objects ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Added ( obj : ĠT ) Ġ= Ġon All ( obj , ĠDocument Change . Type . AD DED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Modified ( obj : ĠT ) Ġ= Ġon All ( obj , ĠDocument Change . Type . MODI FIED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Removed ( obj : ĠT ) Ġ= Ġon All ( obj , ĠDocument Change . Type . RE MOVED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠException ) Ġ= Ġerror ( e ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }