/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠCo up ang ĠLtd . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ @ file : Jvm Name (" Re query Extensions ") Ċ Ċ package Ġorg . springframework . data . re query . kotlin Ċ Ċ import Ġio . re query . Blocking Entity Store Ċ import Ġio . re query . meta . Attribute Ċ import Ġio . re query . meta . Entity Model Ċ import Ġio . re query . meta . Type Ċ import Ġio . re query . sql . Entity Context Ċ import Ġio . re query . sql . Kotlin Entity DataStore Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . springframework . util . Reflection Utils Ċ import Ġkotlin . reflect . K Class Ċ Ċ private Ġval Ġlog Ġ= ĠKotlin Logging . logger Ġ{ Ġ} Ċ Ċ /** Ċ Ġ* Ġ[ Blocking Entity Store ] ìĹĲìĦľ Ġ[ Entity Context ] ë¥¼ Ġì¶Ķ ì¶ľ íķ©ëĭĪëĭ¤ . Ċ Ġ* Ġ@ param ĠE Ġentity Ġtype Ċ Ġ*/ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ @ Throws ( IllegalArgumentException :: class ) Ċ fun Ġ< E Ġ: ĠAny > ĠKotlin Entity DataStore < E >. getEntity Context (): ĠEntity Context < E > Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Store Ġ= Ġthis . data ĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= ĠReflection Utils . find Field ( data Store . java Class , Ġ" context ") !! ĊĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġreturn ĠReflection Utils . getField ( field , Ġdata Store ) Ġas ĠEntity Context < E > ĊĠĠĠ Ġ} Ġcatch ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Fail Ġto Ġretrieve ĠEntity Context .", Ġe ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Kotlin Entity DataStore ] ìĹĲìĦľ Ġê´Ģë¦¬ íķĺëĬĶ Ġ[ Entity Model ] Ġìłķë³´ ë¥¼ Ġì¶Ķ ì¶ľ íķ©ëĭĪëĭ¤ . Ċ Ġ* Ġ@ param ĠE Ġentity Ġtype Ċ Ġ*/ Ċ @ Throws ( IllegalArgumentException :: class ) Ċ fun Ġ< E Ġ: ĠAny > ĠKotlin Entity DataStore < E >. getEntity Model (): ĠEntity Model Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Store Ġ= Ġthis . data ĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= ĠReflection Utils . find Field ( data Store . java Class , Ġ" entity Model ") !! ĊĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġreturn ĠReflection Utils . getField ( field , Ġdata Store ) Ġas ĠEntity Model ĊĠĠĠ Ġ} Ġcatch ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Fail Ġto Ġretrieve ĠEntity Model ", Ġe ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Kotlin Entity DataStore ] ìĹĲìĦľ Ġê´Ģë¦¬ íķĺëĬĶ ĠEntity ìĿĺ Ġìłķë³´ ë¥¼ Ġì¶Ķ ì¶ľ íķ©ëĭĪëĭ¤ . Ċ Ġ* Ġ@ param ĠE Ġentity Ġtype Ċ Ġ*/ Ċ fun Ġ< E Ġ: ĠAny > ĠKotlin Entity DataStore < E >. getEntity Types (): ĠSet < Type <* >> Ġ{ ĊĠĠĠ Ġreturn Ġthis . getEntity Model (). types Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Kotlin Entity DataStore ] ìĹĲìĦľ Ġê´Ģë¦¬ íķĺëĬĶ ĠEntity ìĿĺ ĠìĪĺ íĺķ ìĿĦ Ġì¶Ķ ì¶ľ íķ©ëĭĪëĭ¤ . Ċ Ġ* Ġ@ param ĠE Ġentity Ġtype Ċ Ġ*/ Ċ fun Ġ< E Ġ: ĠAny > ĠKotlin Entity DataStore < E >. getEntity Classes (): ĠList < Class <* >> Ġ{ ĊĠĠĠ Ġreturn Ġget Entity Types (). map Ġ{ Ġit . class Type Ġ} Ċ } Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ fun Ġ< E Ġ: ĠAny > ĠKotlin Entity DataStore <* >. getType ( entity Class : ĠClass < E >): ĠType < E >? Ġ{ ĊĠĠĠ Ġreturn Ġget Entity Types (). first OrNull Ġ{ Ġentity Class Ġ== Ġit . class Type Ġ} Ġas ? ĠType < E > Ċ } Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ fun Ġ< E Ġ: ĠAny > ĠKotlin Entity DataStore <* >. getType ( entity Class : ĠK Class < E >): ĠType < E >? Ġ{ ĊĠĠĠ Ġreturn Ġget Entity Types (). find Ġ{ Ġentity Class Ġ== Ġit . class Type . kotlin Ġ} Ġas ? ĠType < E > Ċ } Ċ Ċ /** Ċ Ġ* Ġì§Ģìłķ íķľ ĠìĹ Ķ íĭ° íĭ° ĠìĪĺ íĺķ ìĿĺ Ġ` Key ` ĠìĨį ìĦ± ìĹĲ Ġíķ´ëĭ¹ íķĺëĬĶ ĠíķĦ ëĵľ ëĵ¤ ìĿĺ Ġìłķë³´ ë¥¼ Ġê°Ģ ìł¸ ìĺ µ ëĭĪëĭ¤ . Ċ Ġ* Ċ Ġ* Ġ@ param Ġentity Class Ġentity Ġtype Ċ Ġ*/ Ċ fun Ġ< E Ġ: ĠAny > ĠKotlin Entity DataStore <* >. getKey Attributes ( entity Class : ĠClass < E >): ĠSet < Attribute < E , Ġ* >> Ġ{ ĊĠĠĠ Ġreturn ĠgetType ( entity Class )?. key Attributes Ġ?: Ġempty Set () Ċ } Ċ Ċ /** Ċ Ġ* Ġì§Ģìłķ íķľ ĠìĹ Ķ íĭ° íĭ° ĠìĪĺ íĺķ ìĿĺ Ġ` Key ` ĠìĨį ìĦ± ìĹĲ Ġíķ´ëĭ¹ íķĺëĬĶ ĠíķĦ ëĵľ ëĵ¤ ìĿĺ Ġìłķë³´ ë¥¼ Ġê°Ģ ìł¸ ìĺ µ ëĭĪëĭ¤ . Ċ Ġ* Ċ Ġ* Ġ@ param Ġentity K Class Ġentity Ġtype Ċ Ġ*/ Ċ fun Ġ< E Ġ: ĠAny > ĠKotlin Entity DataStore <* >. getKey Attributes ( entity K Class : ĠK Class < E >): ĠSet < Attribute < E , Ġ* >> Ġ{ ĊĠĠĠ Ġreturn ĠgetType ( entity K Class )?. key Attributes Ġ?: Ġempty Set () Ċ } ĊĊ Ċ /** Ċ Ġ* Ġì§Ģìłķ íķľ ĠìĹ Ķ íĭ° íĭ° ĠìĪĺ íĺķ ìĿĺ Ġ` Key ` ĠìĨį ìĦ± ìĹĲ Ġíķ´ëĭ¹ íķĺëĬĶ Ġìľł ìĿ¼ íķľ ĠíķĦ ëĵľ ìĿĺ Ġìłķë³´ ë¥¼ Ġê°Ģ ìł¸ ìĺ µ ëĭĪëĭ¤ . Ċ Ġ* Ċ Ġ* Ġ@ param Ġentity Class Ġentity Ġtype Ċ Ġ*/ Ċ fun Ġ< E Ġ: ĠAny > ĠKotlin Entity DataStore <* >. get Single Key Attribute ( entity Class : ĠClass < E >): ĠAttribute < E , Ġ*> Ġ{ ĊĠĠĠ Ġreturn ĠgetType ( entity Class )?. single Key Attribute !! Ċ } Ċ Ċ /** Ċ Ġ* Ġì§Ģìłķ íķľ ĠìĹ Ķ íĭ° íĭ° ĠìĪĺ íĺķ ìĿĺ Ġ` Key ` ĠìĨį ìĦ± ìĹĲ Ġíķ´ëĭ¹ íķĺëĬĶ Ġìľł ìĿ¼ íķľ ĠíķĦ ëĵľ ìĿĺ Ġìłķë³´ ë¥¼ Ġê°Ģ ìł¸ ìĺ µ ëĭĪëĭ¤ . Ċ Ġ* Ċ Ġ* Ġ@ param Ġentity K Class Ġentity Ġtype Ċ Ġ*/ Ċ fun Ġ< E Ġ: ĠAny > ĠKotlin Entity DataStore <* >. get Single Key Attribute ( entity K Class : ĠK Class < E >): ĠAttribute < E , Ġ*> Ġ{ ĊĠĠĠ Ġreturn ĠgetType ( entity K Class )?. single Key Attribute !! Ċ } Ċ