package Ġcom . vic pin . k real me xt ensions Ċ Ċ import Ġandroid . util . Log Ċ import Ġio . realm . Realm Ċ import Ġio . realm . Realm Configuration Ċ import Ġio . realm . Realm Model Ċ import Ġio . realm . Realm Object Ċ import Ġio . realm . annotations . Realm Module Ċ Ċ /** Ċ Ġ* ĠRealm Ġconfiguration Ġstore Ġper Ġclass Ċ Ġ* ĠCreated Ġby Ġmag ill us Ġon Ġ 8 / 1 4 / 2 0 1 7 . Ċ Ġ*/ Ċ class ĠRealm Config Store Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠTAG Ġ= ĠRealm Config Store :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġconfig Map : ĠMutable Map < Class < out ĠRealm Model >, ĠRealm Configuration > Ġ= ĠHashMap () ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠInitialize Ġrealm Ġconfiguration Ġfor Ġclass ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠRealm Model > Ġinit ( model Class : ĠClass < T >, Ġrealm Cfg : ĠRealm Configuration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Adding Ġclass Ġ$ model Class Ġto Ġrealm Ġ${ realm Cfg . realm FileName }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! config Map . containsKey ( model Class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Map . put ( model Class , Ġrealm Cfg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġinit Module ( cls : ĠClass < T >, Ġrealm Cfg : ĠRealm Configuration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġclass Ġof Ġthe Ġmodule ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Ġ= Ġcls . annotations . filter Ġ{ Ġit . annotation Class . java . name Ġ== ĠRealm Module :: class . java . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotation Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Realm Config Store ", Ġ" Got Ġannotation Ġin Ġmodule Ġ" Ġ+ Ġannotation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodule Annotation Ġ= Ġannotation Ġas ĠRealm Module ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Annotation . classes . filter Ġ{ Ġcls Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcls . java . interfaces . contains ( Realm Model :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ Ġcls Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( cls . java Ġas ĠClass < Realm Model >, Ġrealm Cfg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Annotation . classes . filter Ġ{ Ġcls Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcls . java . super class Ġ== ĠRealm Object :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ Ġcls Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( cls . java Ġas ĠClass < Realm Object >, Ġrealm Cfg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠF etches Ġrealm Ġconfiguration Ġfor Ġclass . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠRealm Model > Ġfetch Configuration ( model Class : ĠClass < T >): ĠRealm Configuration ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconfig Map [ model Class ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T Ġ: ĠRealm Model > ĠT . get Realm Instance (): ĠRealm Ġ{ ĊĠĠĠ Ġreturn ĠRealm Config Store . fetch Configuration ( this :: class . java )?. realm () Ġ?: ĠRealm . getDefaultInstance () Ċ } Ċ Ċ fun Ġ< T Ġ: ĠRealm Model > Ġget Realm Instance ( clazz : ĠClass < T >): ĠRealm Ġ{ ĊĠĠĠ Ġreturn ĠRealm Config Store . fetch Configuration ( clazz )?. realm () Ġ?: ĠRealm . getDefaultInstance () Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠD Ġ: ĠRealm Model , ĠT Ġ: ĠCollection < D >> ĠT . get Realm Instance (): ĠRealm Ġ{ ĊĠĠĠ Ġreturn ĠRealm Config Store . fetch Configuration ( D :: class . java )?. realm () Ġ?: ĠRealm . getDefaultInstance () Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠRealm Model > Ġget Realm Instance (): ĠRealm Ġ{ ĊĠĠĠ Ġreturn ĠRealm Config Store . fetch Configuration ( T :: class . java )?. realm () Ġ?: ĠRealm . getDefaultInstance () Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠD Ġ: ĠRealm Model > ĠArray < D >. get Realm Instance (): ĠRealm Ġ{ ĊĠĠĠ Ġreturn ĠRealm Config Store . fetch Configuration ( D :: class . java )?. realm () Ġ?: ĠRealm . getDefaultInstance () Ċ } Ċ Ċ fun ĠRealm Configuration . realm (): ĠRealm Ġ{ ĊĠĠĠ Ġreturn ĠRealm . getInstance ( this ) Ċ } Ċ