/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 . Ġfan poll ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġfan poll . infra . report . data Ċ Ċ import Ġcom . fasterxml . jackson . annotation . JsonIgnore Ċ import Ġkotlinx . serialization . Transient Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Type Ċ import Ġkotlin . reflect . full . member Properties Ċ import Ġkotlin . reflect . full . primary Constructor Ċ import Ġkotlin . reflect . type Of Ċ Ċ object ĠReport Data Utils Ġ{ ĊĊĠĠĠ Ġ// ĠTODO Ġsupport Ġnested Ġobject ĊĠĠĠ Ġprivate Ġval Ġignore Property Types : ĠList < K Type > Ġ= ĠlistOf ( type Of < Iterable <* >> ()) ĊĊĠĠĠ Ġfun Ġget Column Ids ( obj Class : ĠK Class < *> ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcolumn Ids Ġ= Ġobj Class . member Properties . filter Ġ{ Ġproperty Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty . annotations . none Ġ{ Ġit . annotation Class Ġ== ĠTrans ient :: class Ġ|| Ġit . annotation Class Ġ== ĠJson Ignore :: class Ġ} Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! ignore Property Types . contains ( property . returnType ) ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġit . name Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġproperty Index Map Ġ= Ġobj Class . primary Constructor ?. parameters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Indexed Ġ{ Ġindex , Ġk Parameter Ġ-> Ġk Parameter . name !! Ġto Ġindex Ġ} ?. toMap () ĊĠĠĠĠĠĠĠ Ġif Ġ( property Index Map Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Ids Ġ= Ġcolumn Ids . sorted By Ġ{ Ġproperty Index Map [ it ] Ġ?: ĠInt . MAX _ VALUE Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcolumn Ids ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Map ( obj : ĠAny , Ġcolumn Ids : ĠList < String >): ĠMap < String , ĠAny ?> Ġ= ĊĠĠĠĠĠĠĠ Ġobj . java Class . kotlin . member Properties . filter Ġ{ Ġcolumn Ids . contains ( it . name ) Ġ}. associate Ġ{ Ġit . name Ġto Ġit . get ( obj ) Ġ} Ċ }