package Ġorg . kom apper . core . query Ċ Ċ import Ġorg . kom apper . core . Km Entity Ċ import Ġorg . kom apper . core . Km Id Ċ import Ġorg . kom apper . core . Km Version Ċ import Ġorg . kom apper . core . met amodel . Assignment Ċ import Ġorg . kom apper . core . met amodel . Entity Met amodel Ċ import Ġorg . kom apper . core . met amodel . Property Descriptor Ċ import Ġorg . kom apper . core . met amodel . Property Met amodel Ċ import Ġorg . kom apper . core . met amodel . Property Met amodel Impl Ċ import Ġjava . time . Clock Ċ Ċ @ Km Entity Ċ data Ġclass ĠAddress ( ĊĠĠĠ Ġ@ Km Id Ġval Ġid : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġval Ġstreet : ĠString , ĊĠĠĠ Ġ@ Km Version Ġval Ġversion : ĠInt Ġ= Ġ 0 Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ċ } Ċ Ċ @ Suppress (" ClassName ") Ċ class ĠAddress _ Ġ: ĠEntity Met amodel < Address > Ġ{ ĊĠĠĠ Ġprivate Ġobject ĠEntity Descriptor Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠProperty Descriptor < Address , ĠInt >( Int :: class , Ġ" ID ", Ġ{ Ġit . id Ġ}) Ġ{ Ġ( e , Ġv ) Ġ-> Ġe . copy ( id Ġ= Ġv ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstreet Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProperty Descriptor < Address , ĠString >( String :: class , Ġ" STRE ET ", Ġ{ Ġit . street Ġ}) Ġ{ Ġ( e , Ġv ) Ġ-> Ġe . copy ( street Ġ= Ġv ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġversion Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProperty Descriptor < Address , ĠInt >( Int :: class , Ġ" VERSION ", Ġ{ Ġit . version Ġ}) Ġ{ Ġ( e , Ġv ) Ġ-> Ġe . copy ( version Ġ= Ġv ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġid Ġby Ġlazy Ġ{ ĠProperty Met amodel Impl ( this , ĠEntity Descriptor . id ) Ġ} ĊĠĠĠ Ġval Ġstreet Ġby Ġlazy Ġ{ ĠProperty Met amodel Impl ( this , ĠEntity Descriptor . street ) Ġ} ĊĠĠĠ Ġval Ġversion Ġby Ġlazy Ġ{ ĠProperty Met amodel Impl ( this , ĠEntity Descriptor . version ) Ġ} ĊĠĠĠ Ġoverride Ġfun ĠtableName () Ġ= Ġ" ADDRESS " ĊĠĠĠ Ġoverride Ġfun Ġid Assignment (): ĠAssignment < Address >? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun Ġid Properties (): ĠList < Property Met amodel < Address , Ġ* >> Ġ= ĠlistOf ( id ) ĊĠĠĠ Ġoverride Ġfun Ġversion Property (): ĠProperty Met amodel < Address , Ġ*> Ġ= Ġversion ĊĠĠĠ Ġoverride Ġfun Ġproperties (): ĠList < Property Met amodel < Address , Ġ* >> Ġ= ĠlistOf ( id , Ġstreet , Ġversion ) ĊĠĠĠ Ġoverride Ġfun Ġinstantiate ( m : ĠMap < Property Met amodel < *, Ġ* >, ĠAny ?> ) Ġ= ĊĠĠĠĠĠĠĠ ĠAddress ( m [ id ] Ġas ĠInt , Ġm [ street ] Ġas ĠString , Ġm [ version ] Ġas ĠInt ) ĊĊĠĠĠ Ġoverride Ġfun Ġincrement Version ( e : ĠAddress ): ĠAddress Ġ= Ġversion . set ( e Ġto Ġversion . get ( e ) !!. inc ()) ĊĠĠĠ Ġoverride Ġfun Ġupdate CreatedAt ( e : ĠAddress , Ġc : ĠClock ): ĠAddress Ġ= Ġe ĊĠĠĠ Ġoverride Ġfun Ġupdate UpdatedAt ( e : ĠAddress , Ġc : ĠClock ): ĠAddress Ġ= Ġe Ċ } Ċ Ċ fun ĠAddress . Companion . met amodel () Ġ= ĠAddress _() Ċ