package Ġcom . on eli ang . k tx . frame . bean Ċ Ċ import Ġcom . on eli ang . k tx . Constants Ċ import Ġcom . on eli ang . k tx . util . common . Object Util Ċ import Ġcom . on eli ang . k tx . util . logging . Logger Manager Ċ import Ġjava . util . concurrent . Copy On Write ArrayList Ċ Ċ open Ġclass ĠForest < T Ġ: ĠAny > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLogger Manager . getLogger ( Forest :: class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġtree List Ġ= ĠCopy On Write ArrayList < Tree < T >>() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcreate Ġtree Ġroot Ġlist , like Ġforest , many Ġroots Ġin Ġthe Ġthe Ġlist , but Ġthe Ġroot ĊĠĠĠĠ Ġ* Ġhas Ġno Ġchild ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlist ĊĠĠĠĠ Ġ* Ġ@ param Ġfar ther FieldName ĊĠĠĠĠ Ġ* Ġ@ param Ġfar ther Value Set ĊĠĠĠĠ Ġ* Ġ@ return ĠList < TreeNode ></ TreeNode >< T >> ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġcreate Tree Root List ( list : ĠList < T >, Ġfar ther FieldName : ĠString , Ġfar ther Value Set : ĠArray < Any ?> ): ĠList < TreeNode < T >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtree Root List Ġ= Ġmutable ListOf < TreeNode < T >>() ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( instance Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( far ther FieldName . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfar ther MethodName Ġ= ĠObject Util . fieldName To MethodName ( Constants . Method . PREFIX _ GET , Ġfar ther FieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfar ther Method Ġ= Ġinstance . java Class . getMethod ( far ther MethodName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġfar ther Method . invoke ( instance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Tree . check Value ( value , Ġfar ther Value Set )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠTreeNode ( instance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtree Root List . add ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( Constants . Base . EXCEPTION , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtree Root List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcreate Ġthe Ġforest ĊĠĠĠĠ Ġ* Ġ@ param Ġlist ĊĠĠĠĠ Ġ* Ġ@ param Ġfar ther FieldName ĊĠĠĠĠ Ġ* Ġ@ param Ġfar ther Value Set ĊĠĠĠĠ Ġ* Ġ@ param Ġchild FieldName ĊĠĠĠĠ Ġ* Ġ@ return ĠList < Tree ></ Tree >< T >> ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġcreate Forest ( list : ĠList < T >, Ġfar ther FieldName : ĠString , Ġfar ther Value Set : ĠArray < Any ? >, Ġchild FieldName : ĠString ): ĠList < Tree < T >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot List Ġ= Ġthis . create Tree Root List ( list , Ġfar ther FieldName , Ġfar ther Value Set ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( root Ġin Ġroot List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtree Ġ= ĠTree < T >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtree . create Tree ( root , Ġlist , Ġfar ther FieldName , Ġfar ther Value Set , Ġchild FieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tree List . add ( tree ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . tree List ĊĠĠĠ Ġ} Ċ } Ċ