package Ġio . openc ubes . db . values Ċ Ċ import Ġio . openc ubes . db .* Ċ import Ġio . openc ubes . db . interfaces . ID atabase List Ċ import Ġio . openc ubes . db . interfaces . I ReadOnly Delegate Ċ import Ġio . openc ubes . db . sql . select . from Ċ import Ġio . openc ubes . db . sql . table .* Ċ import Ġjava . lang . reflect . Field Ċ import Ġjava . sql . SQLException Ċ import Ġjava . util .* Ċ Ċ class ĠReference ManyToMany < T Ġ: ĠModel , ĠM Ġ: ĠModel >( val Ġthis Model : ĠT , Ġval Ġother Model Class : ĠClass < M >, Ġval Ġcustom TableName : Ġ() Ġ-> ĠString ?, Ġval Ġcustom From PropertyName : Ġ() Ġ-> ĠString ?, Ġval Ġcustom To PropertyName : Ġ() Ġ-> ĠString ?) Ġ: ĠIReadOnly Delegate < T , ĠID atabase List < M >> Ġ{ ĊĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠ Ġval Ġlist : ĠID atabase List < M > Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠ Ġval Ġthis Field Ġ= Ġthis Model :: class . java . declared Fields . first OrNull Ġ{ ĊĠĠĠĠĠ Ġit . accessible Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġref Ġ= Ġit . get ( this Model ) ĊĠĠĠĠĠĠĠ Ġref Ġ== Ġthis @ Reference ManyToMany ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ ĠcheckNotNull ( this Field ) ĊĊĠĠĠ ĠDatabase List ( this Model , ĠModel . obtain Empty ( other Model Class ) Ġas ĠM , Ġthis Field , Ġcustom TableName (), Ġcustom From PropertyName (), Ġcustom To PropertyName ()) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget (): ĠID atabase List < M > Ġ= Ġlist ĊĊĠ Ġclass ĠDatabase List < T Ġ: ĠModel >( private Ġval Ġfrom Table : ĠModel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġto Table : ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġlist Field : ĠField , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcustom TableName : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcustom From PropertyName : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcustom To PropertyName : ĠString ?) Ġ: ĠID atabase List < T > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcache Ġ= ĠLinkedList < T >() ĊĠĠĠ Ġprivate Ġvar Ġcreated Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġval Ġlive Mode Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġfirst Time Access Ġ= Ġtrue ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġname Ġof Ġthe Ġlink Ġtable Ġthe Ġlinks Ġare Ġstored . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtable Ġby Ġlazy Ġ{ Ġget Link TableName ( custom TableName , ĠModel Field ( list Field ), Ġfrom Table , Ġto Table ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġto TableName Ġby Ġlazy Ġ{ ĊĠĠĠĠĠ Ġval Ġto Table Id Ġ= ĠModel . obtain Id ( to Table :: class . java ) ĊĊĠĠĠĠĠ Ġcustom To PropertyName Ġ?: Ġ"${ ĊĠĠĠĠĠ Ġif Ġ( to Table . table Ġ== Ġfrom Table . table ) Ġtable ĊĠĠĠĠĠ Ġelse Ġto Table . java Class . simple Name . to Snake Case () ĊĠĠĠĠĠ Ġ} _${ to Table Id . name }" ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġval Ġsql Table Ġby Ġlazy Ġ{ ĊĠĠĠĠĠ Ġvar Ġproperties Ġ= Ġmutable ListOf < SQL Table Property >() ĊĊĠĠĠĠĠ Ġval Ġfrom Table Id Ġ= ĠModel . obtain Id ( from Table :: class . java ) ĊĠĠĠĠĠ Ġval Ġfrom Table Id Value Ġ= Ġfrom Table Id . value ( Model . obtain Empty ( from Table :: class . java )) ĊĠĠĠĠĠ Ġval Ġ( from Table Type , Ġfrom Table Type Params ) Ġ= Ġfrom Table . driver . get SQL Type From Class ( from Table Id Value . type , Ġfrom Table Id Value . preferences ) ĊĊĠĠĠĠĠ Ġproperties . add ( SQL Table Property ( ĊĠĠĠĠĠĠĠ Ġcustom From PropertyName Ġ?: Ġ"${ from Table . java Class . simple Name . to Snake Case ()} _${ from Table Id . name }", ĊĠĠĠĠĠĠĠ Ġfrom Table Type , Ġfrom Table Type Params , Ġfalse , Ġnull , Ġfalse ĊĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠ Ġval Ġto Table Id Ġ= ĠModel . obtain Id ( to Table :: class . java ) ĊĠĠĠĠĠ Ġval Ġto Table Id Value Ġ= Ġto Table Id . value ( Model . obtain Empty ( to Table :: class . java )) ĊĠĠĠĠĠ Ġval Ġ( to Table Type , Ġto Table Type Params ) Ġ= Ġfrom Table . driver . get SQL Type From Class ( to Table Id Value . type , Ġto Table Id Value . preferences ) ĊĊĠĠĠĠĠ Ġproperties . add ( ĊĠĠĠĠĠĠĠ ĠSQL Table Property ( to TableName , Ġto Table Type , Ġto Table Type Params , Ġfalse , Ġnull , Ġfalse ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġproperties Ġ= Ġproperties . sorted By ( SQL Table Property :: name ). to Mutable List () ĊĊĠĠĠĠĠ Ġval Ġadds Ġ= Ġif Ġ( properties [ 0 ]. name Ġ== Ġto TableName ) ĊĠĠĠĠĠĠĠ ĠlistOf ( to Table Id Ġto Ġto Table , Ġfrom Table Id Ġto Ġfrom Table ) ĊĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ ĠlistOf ( from Table Id Ġto Ġfrom Table , Ġto Table Id Ġto Ġto Table ) ĊĊĠĠĠĠĠ ĠSQL Table ( ĊĠĠĠĠĠĠĠ Ġtable , ĊĠĠĠĠĠĠĠ Ġproperties , ĊĠĠĠĠĠĠĠ ĠSQL Index ("${ table }_ pk ", Ġproperties . map ( SQL Table Property :: name )), ĊĠĠĠĠĠĠĠ Ġproperties . map Indexed Ġ{ Ġ_, Ġprop Ġ-> ĊĠĠĠĠĠĠĠĠĠ ĠSQL Index ("${ table }_ ix _${ prop . name }", ĠlistOf ( prop . name )) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ ĠlistOf (), ĊĠĠĠĠĠĠĠ Ġproperties . map Indexed Ġ{ Ġi , Ġprop Ġ-> ĊĠĠĠĠĠĠĠĠĠ ĠSQL ForeignKey ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ table }_ fk _${ prop . name }", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( prop . name ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSQL Table Reference ( adds [ i ]. second . table , ĠlistOf ( adds [ i ]. first . name )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠForeign Key Action . CASCADE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠForeign Key Action . NO _ ACTION ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġsorted Id Properties Ġby Ġlazy Ġ{ ĊĠĠĠĠĠ Ġif Ġ( sql Table . properties [ 0 ]. name Ġ== Ġto TableName ) ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠTrip le ( sql Table . properties [ 1 ], ĠModel . obtain Id ( from Table :: class . java ), Ġfrom Table ), ĊĠĠĠĠĠĠĠ ĠTrip le ( sql Table . properties [ 0 ], ĠModel . obtain Id ( to Table :: class . java ), Ġto Table ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġelse ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠTrip le ( sql Table . properties [ 0 ], ĠModel . obtain Id ( from Table :: class . java ), Ġfrom Table ), ĊĠĠĠĠĠĠĠ ĠTrip le ( sql Table . properties [ 1 ], ĠModel . obtain Id ( to Table :: class . java ), Ġto Table ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġprimary Property Ġby Ġlazy Ġ{ Ġsorted Id Properties [ 0 ]. first Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġcolumns Ġthe Ġlink Ġtable Ġhas . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġcolumns Ġby Ġlazy Ġ{ ĊĠĠĠĠĠ Ġsorted Id Properties . map ( Triple < SQL Table Property , ĠModel Field , ĠModel >:: first ). map ( SQL Table Property :: name ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġsql Ġlink Ġtable Ġcreation Ġdefinition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġselect Ġby Ġlazy Ġ{ ĊĠĠĠĠĠ Ġval Ġother Ġ= Ġsorted Id Properties [ 0 ]. first . name ĊĊĠĠĠĠĠ Ġfrom Table . driver ĊĠĠĠĠĠĠĠ Ġ. select ( Model . obtain Fields ( to Table :: class . java ). map Ġ{ Ġit . name Ġfrom Ġ" t 1 " Ġ}) ĊĠĠĠĠĠĠĠ Ġ. from ( to Table . table , Ġ" t 1 ") ĊĠĠĠĠĠĠĠ Ġ. join ( ĊĠĠĠĠĠĠĠĠĠ Ġtable Ġ= Ġtable , ĊĠĠĠĠĠĠĠĠĠ Ġalias Ġ= Ġ" t 2 ", ĊĠĠĠĠĠĠĠĠĠ Ġtable Column Ġ= Ġto TableName , ĊĠĠĠĠĠĠĠĠĠ Ġother Ġ= ĠModel . obtain Id ( to Table :: class . java ). name Ġfrom Ġ" t 1 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ. where ( other Ġfrom Ġ" t 2 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠ Ġfirst Time Access Ġ= Ġfalse ĊĠĠĠĠĠ Ġif Ġ(! created ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreated Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġfrom Table . driver . execute ( from Table . driver . to SQL ( sql Table ). replace First (" CREATE ĠTABLE ", Ġ" CREATE ĠTABLE ĠIF ĠNOT ĠEXISTS ")) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ(! Model . obtain Id ( from Table :: class . java ). hasValue ( from Table )) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġcache . clear () ĊĠĠĠĠĠ Ġcache . addAll ( select ĊĠĠĠĠĠĠĠ Ġ. execute ( Model . obtain Id ( from Table :: class . java ). get ( from Table )) ĊĠĠĠĠĠĠĠ Ġ. fetch All Into ( to Table :: class . java )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . size Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġsize : ĠInt Ġget () Ġ= Ġcache . size ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . contains Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcontains ( element : ĠT ): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġif Ġ( first Time Access ) Ġrefresh () ĊĠĠĠĠĠ Ġreturn Ġcache . contains ( element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . contains All Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcontains All ( elements : ĠCollection < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġif Ġ( first Time Access ) Ġrefresh () ĊĠĠĠĠĠ Ġreturn Ġcache . contains All ( elements ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . isEmpty Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġif Ġ( first Time Access ) Ġrefresh () ĊĠĠĠĠĠ Ġreturn Ġcache . isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . add Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġadd ( element : ĠT ): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġif Ġ( first Time Access ) Ġrefresh () ĊĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġfrom Table . driver . insert ( table , Ġcolumns , Ġget Values ( element )) ĊĠĠĠĠĠĠĠ Ġcache . add ( element ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ(_ : ĠSQLException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Values ( element : ĠT ): ĠList < Any ?> Ġ{ ĊĠĠĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġsorted Id Properties [ 0 ]. second . get Actual ( sorted Id Properties [ 0 ]. third ), ĊĠĠĠĠĠĠĠ Ġsorted Id Properties [ 1 ]. second . get Actual ( element ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . addAll Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġadd All ( elements : ĠCollection < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġif Ġ( first Time Access ) Ġrefresh () ĊĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġfrom Table . driver . transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġelements ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Table . driver . insert ( table , Ġcolumns , Ġget Values ( element )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcache . addAll ( elements ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ(_ : ĠSQLException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . clear Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠ Ġval Ġother Ġ= Ġsorted Id Properties [ 0 ] ĊĠĠĠĠĠ Ġfrom Table . driver . delete From ( table , ĠlistOf ( other . first . name ), ĠlistOf ( other . second . get Actual ( other . third ))) ĊĠĠĠĠĠ Ġcache . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . iterator Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġiterator () Ġ= Ġcache . iterator () ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . remove Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġremove ( element : ĠT ): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġif Ġ( first Time Access ) Ġrefresh () ĊĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġfrom Table . driver . delete From ( table , Ġcolumns , Ġget Values ( element )) ĊĠĠĠĠĠĠĠ Ġcache . remove ( element ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ(_ : ĠSQLException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . removeAll Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġremove All ( elements : ĠCollection < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġif Ġ( first Time Access ) Ġrefresh () ĊĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġfrom Table . driver . transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġelements ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Table . driver . delete From ( table , Ġcolumns , Ġget Values ( element )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcache . removeAll ( elements ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ(_ : ĠSQLException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . retain All Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġretain All ( elements : ĠCollection < T >) Ġ= Ġremove All ( cache . filter Ġ{ Ġit Ġ! in Ġelements Ġ}) ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . add Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġadd ( index : ĠInt , Ġelement : ĠT ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( first Time Access ) Ġrefresh () ĊĠĠĠĠĠ Ġadd ( element ) ĊĠĠĠĠĠ Ġcache . add ( index , Ġelement ) ĊĠĠĠĠĠ Ġcache . remove Last () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . addAll Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġadd All ( index : ĠInt , Ġelements : ĠCollection < T >): ĠBoolean Ġ= Ġadd All ( elements ) ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . get Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget ( index : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠ Ġif Ġ( first Time Access ) Ġrefresh () ĊĠĠĠĠĠ Ġreturn Ġcache [ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . indexOf Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠindexOf ( element : ĠT ): ĠInt Ġ{ ĊĠĠĠĠĠ Ġif Ġ( first Time Access ) Ġrefresh () ĊĠĠĠĠĠ Ġreturn Ġcache . indexOf ( element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . lastIndexOf Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġlast IndexOf ( element : ĠT ): ĠInt Ġ{ ĊĠĠĠĠĠ Ġif Ġ( first Time Access ) Ġrefresh () ĊĠĠĠĠĠ Ġreturn Ġcache . lastIndexOf ( element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . list Iterator Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġlist Iterator (): ĠMutable List Iterator < T > Ġ{ ĊĠĠĠĠĠ Ġif Ġ( first Time Access ) Ġrefresh () ĊĠĠĠĠĠ Ġreturn Ġcache . list Iterator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . list Iterator Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġlist Iterator ( index : ĠInt ): ĠMutable List Iterator < T > Ġ{ ĊĠĠĠĠĠ Ġif Ġ( first Time Access ) Ġrefresh () ĊĠĠĠĠĠ Ġreturn Ġcache . list Iterator ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . remove At Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġremove At ( index : ĠInt ): ĠT Ġ= Ġcache . remove At ( index ). also ( Model :: delete ) ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . set Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġset ( index : ĠInt , Ġelement : ĠT ): ĠT Ġ{ ĊĠĠĠĠĠ Ġif Ġ( first Time Access ) Ġrefresh () ĊĠĠĠĠĠ Ġval Ġitem Ġ= Ġcache . set ( index , Ġelement ) ĊĠĠĠĠĠ Ġitem . driver . transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġitem . delete () ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠModel . obtain Id ( item :: class . java ). get ( item ) ĊĠĠĠĠĠĠĠ ĠModel . obtain Id ( element :: class . java ). set ( element , Ġid ) ĊĠĠĠĠĠĠĠ Ġelement . save () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . sub List Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġsub List ( from Index : ĠInt , Ġto Index : ĠInt ): ĠMutable List < T > Ġ= Ġthrow ĠException (" Not Ġsupported ") ĊĊĠĠĠ Ġ/** Ġ@ see ĠMutable List . toString Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġcache . toString () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠ Ġ* ĠGet Ġa Ġname Ġof Ġa Ġlink Ġtable Ġbased Ġon Ġa Ġmight Ġbe Ġspecified Ġ[ table ] Ġname Ġvariable , ĊĠĠĠĠĠĠ Ġ* Ġthe Ġ[ property ] Ġrequiring Ġthe Ġtable , Ġand Ġthe Ġlinking Ġtables . ĊĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠ Ġ* Ġ@ param Ġtable ĠThe Ġpossibly Ġspecified Ġtable Ġname . ĊĠĠĠĠĠĠ Ġ* Ġ@ param Ġproperty ĠThe Ġproperty Ġthat Ġrequires Ġthe Ġtable . ĊĠĠĠĠĠĠ Ġ* Ġ@ param Ġfirst ĠThe Ġfirst Ġtable Ġto Ġconnect . ĊĠĠĠĠĠĠ Ġ* Ġ@ param Ġsecond ĠThe Ġsecond Ġtable Ġto Ġconnect . ĊĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠ Ġfun Ġget Link TableName ( table : ĠString ?, Ġproperty : ĠModel Field , Ġfirst : ĠModel , Ġsecond : ĠModel ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtable Ġ!= Ġnull Ġ-> Ġtable ĊĠĠĠĠĠĠĠĠĠ Ġfirst . table Ġ== Ġproperty . name Ġ|| Ġsecond . table Ġ== Ġproperty . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( f , Ġl ) Ġ= ĠlistOf ( first , Ġsecond ). sorted By ( Model :: table ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ f :: class . java . simple Name . to Snake Case ()} _${ l . table }" ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġproperty . name . to Snake Case () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ