/* Ċ Ġ* ĠCopyright Ġ( c ) ĠIntel ĠCorporation Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ package Ġcom . od im . simulator . command line Ċ Ċ import Ġcom . od im . simulator . Request Processor Ċ import Ġcom . od im . simulator . Simulator Name Ċ import Ġcom . od im . utils . Timing . log Execution Time Ċ import Ġorg . springframework . data . util . Annotated Type Scanner Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . full . create Instance Ċ import Ġkotlin . reflect . full . find Annotation Ċ Ċ object ĠSim ulators Finder Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠRE PO _ PACKAGE _ PATH Ġ= Ġ" com . od im . simulator . repo " ĊĊĠĠĠ Ġfun ĠgetAll Names (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmutable ListOf < String >(). also Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetAll Simulator Classes From Repo (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . find Annotation < Simulator Name >() ?. run Ġ{ Ġresult . add ( name ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Simulator ByName ( name : ĠString ): ĠRequest Processor Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepo Classes Ġ= ĠgetAll Simulator Classes From Repo () ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= Ġfirst Class WithName ( repo Classes , Ġname ) ĊĊĠĠĠĠĠĠĠ Ġrequire NotNull ( clazz , Ġ{ Ġ" No Ġclass Ġwith Ġ$ name Ġfound ." Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġlog Execution Time (" Simulator Ġinit Ġtime : Ġ{} Ġms ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclazz . create Instance () Ġas ĠRequest Processor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetAll Simulator Classes From Repo (): ĠList < K Class < out ĠAny >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġannotated Type Scanner Ġ= ĠAnnot ated Type Scanner ( Simulator Name :: class . java ) ĊĠĠĠĠĠĠĠ Ġreturn Ġannotated Type Scanner . find Types ( REPO _ PACKAGE _ PATH ). map Ġ{ Ġit . kotlin Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfirst Class WithName ( repo Classes : ĠList < K Class < out ĠAny >>, Ġname : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Classes . first OrNull Ġ{ Ġis Class Annotated WithName ( it , Ġname ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Class Annotated WithName ( clazz : ĠK Class < out ĠAny >, Ġname : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Annotation Ġ= Ġclazz . find Annotation < Simulator Name >() ĊĠĠĠĠĠĠĠ Ġreturn Ġname . equals ( name Annotation ?. name , Ġignore Case Ġ= Ġtrue ) ĊĠĠĠ Ġ} Ċ } Ċ