package Ġpw . aru . db . base . metadata Ċ Ċ import Ġpw . aru . db . base . annotations . R Ċ import Ġjava . util .* Ċ Ċ class ĠRedis Object Metadata Ġprivate Ġconstructor ( c : ĠClass <* >) Ġ{ ĊĠĠĠ Ġval Ġidentifier : ĠString ĊĠĠĠ Ġval Ġjava ClassName : ĠString ĊĠĠĠ Ġval Ġjava Class Simple Name : ĠString ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfixed Java Class : ĠClass < *> Ġ= Ġif Ġ( c . is Anonymous Class Ġ|| Ġc . is Local Class ) Ġc . super class Ġelse Ġc ĊĠĠĠĠĠĠĠ Ġidentifier Ġ= Ġfixed Java Class . getAnnotation ( R :: class . java )?. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException ("$ fixed Java Class Ġlack s Ġ@ R Ġannotation ") ĊĠĠĠĠĠĠĠ Ġjava ClassName Ġ= Ġfixed Java Class . name ĊĠĠĠĠĠĠĠ Ġjava Class Simple Name Ġ= Ġfixed Java Class . simple Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremote Id ( id : ĠLong ) Ġ= Ġ"$ identifier :$ id " ĊĠĠĠ Ġfun Ġremote Id ( id : ĠLong , Ġchild : ĠString ) Ġ= Ġ"$ identifier .$ child :$ id " ĊĠĠĠ Ġfun ĠtoString ( id : ĠLong ) Ġ= Ġ"$ java Class Simple Name [ id =$ id ]" ĊĊĠĠĠ Ġfun Ġparse Remote ID ( remote ID : ĠString ): ĠRemote ID Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! remote ID . startsWith ( identifier )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Wrong ĠMetadata ; Ġid Ġ$ remote ID Ġdoes Ġnot Ġmatch Ġ$ identifier Ġpattern ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġremote ID . substring ( identifier . length ) ĊĠĠĠĠĠĠĠ Ġval Ġid Div Ġ= Ġbase . lastIndexOf (': ') ĊĊĠĠĠĠĠĠĠ Ġif Ġ( id Div Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Wrong ĠMetadata ; Ġid Ġ$ remote ID Ġdoes Ġnot Ġmatch Ġ$ identifier :[ id ] Ġpattern ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġbase . substring ( id Div ). to Long OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Wrong ĠMetadata ; Ġid Ġ$ remote ID Ġdoes Ġnot Ġmatch Ġ$ identifier :[ id ] Ġpattern ") ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġif Ġ( base . startsWith ('. ')) Ġbase . substring ( 1 , Ġid Div ) Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRemote ID ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontainer Ġ= ĠWeak HashMap < Class <* >, ĠRedis Object Metadata >() ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" get OrCreate ") ĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġinvoke ( c : ĠClass < *> ): ĠRedis Object Metadata Ġ= Ġcontainer . compute If Absent ( c , Ġ:: Redis Object Metadata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠRemote ID ( ĊĠĠĠĠĠĠĠ Ġval Ġidentifier : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġchild : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠLong ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhas Child : ĠBoolean Ġ= Ġchild Ġ!= Ġnull ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ identifier .$ child :$ id " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ identifier :$ id " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }