package Ġru . s ui . su ise curity . utils Ċ Ċ import Ġru . s ui . su ient ity . entity . su ime ta . Column Info Ċ import Ġru . s ui . su ient ity . entity . su ime ta . Table Info Ċ import Ġru . s ui . su ient ity . entity . su ise curity . Role Ċ import Ġru . s ui . su ise curity . exception . Recursive Render Exception Ċ import Ġjava . util .* Ċ import Ġjava . util . stream . Collectors Ċ Ċ class ĠMeta Schema Utils Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget Full Table Info Name ( table Info : ĠTable Info ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString . format ("% s .% s ", Ġtable Info . schema Name , Ġtable Info . tableName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget Full Column Info Name ( column Info : ĠColumn Info ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString . format ("% s .% s ", Ġget Full Table Info Name ( column Info . table Info ), Ġcolumn Info . columnName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget Referenced Table Info ( column Info : ĠColumn Info ): ĠTable Info ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Referenced Column Info ( column Info )?. table Info ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget Referenced Column Info ( column Info : ĠColumn Info ): ĠColumn Info ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcolumn Info . references ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . foreign Column Info ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget Column Info ByName Map ( column Infos : ĠCollection < Column Info >): ĠMap < String , ĠColumn Info > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcolumn Infos . stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toMap ({ Ġit . columnName Ġ}, Ġ{ Ġit Ġ})) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget Referenced Foreign Link Column Info ( column Info : ĠColumn Info ?): ĠColumn Info ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcolumn Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġget Referenced Table Info ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . foreign Link Column Info ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget Reference Render Column Info ( column Info : ĠColumn Info , Ġroles : ĠSet < Role >): ĠColumn Info ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Reference Render Column Info ( column Info , Ġroles , ĠHashSet ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Reference Render Column Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Info : ĠColumn Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroles : ĠSet < Role >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisited Table Infos : ĠMutable Set < Table Info > ĊĠĠĠĠĠĠĠ Ġ): ĠColumn Info ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreferenced Foreign Link Column Info Ġ= Ġget Referenced Foreign Link Column Info ( column Info ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( referenced Foreign Link Column Info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġforeign Link Table Info Ġ= Ġreferenced Foreign Link Column Info . table Info ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! visited Table Infos . contains ( foreign Link Table Info )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisited Table Infos . add ( foreign Link Table Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRecursive Render Exception ( foreign Link Table Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġforward Referenced Foreign Link Column Info Ġ= Ġget Reference Render Column Info ( referenced Foreign Link Column Info , Ġroles , Ġvisited Table Infos ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( forward Referenced Foreign Link Column Info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġforward Referenced Foreign Link Column Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠÐ¾ÑĤ Ð´ ÐµÐ»ÑĮ Ð½ÑĭÐ¹ Ġif ĠÐ´Ð»Ñı ĠÐº ÑĢ Ð°Ñģ Ð¾ÑĤ Ñĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Allowed Column Info ( referenced Foreign Link Column Info , Ġroles ) Ġ&& Ġreferenced Foreign Link Column Info Ġ!= ĠMeta Schema Utils . getId Column Info ( referenced Foreign Link Column Info . table Info )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreferenced Foreign Link Column Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetId Column Info ( table Info : ĠTable Info ): ĠColumn Info ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtable Info . column Infos . first OrNull Ġ{ Ġit . columnName Ġ== Ġ" id " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget Allowed Column Infos ( table Info : ĠTable Info , Ġuser Roles : ĠSet < Role >): ĠCollection < Column Info > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtable Info . column Infos . filter Ġ{ Ġis Allowed Column Info ( it , Ġuser Roles ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġis Allowed Column Info ( column Info : ĠColumn Info , Ġuser Roles : ĠSet < Role >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ(" s ui _ meta ". equals ( column Info . table Info . schema Name , Ġignore Case Ġ= Ġtrue ) Ġ// ĠTODO : ĠÐº Ð¾ÑģÑĤ Ñĭ Ð»ÑĮ ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġcolumn Info . visible !! Ġ&& Ġcolumn Info . roles . any Ġ{ Ġuser Roles . contains ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġfind Column By Camel Case Name ( table Info : ĠTable Info , Ġcamel Case Name : ĠString ): ĠColumn Info ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtable Info . column Infos . first OrNull Ġ{ ĠText Utils . to Camel Case ( it . columnName ) Ġ== Ġcamel Case Name Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ