package Ġcom . t ene br as . sp ero . route Ċ Ċ import Ġcom . t ene br as . sp ero . di . D Injector Ċ import Ġorg . eclipse . jetty . server . handler . Abstract Handler Ċ import Ġorg . eclipse . jetty . server . handler . Resource Handler Ċ import Ġjava . util .* Ċ import Ġjavax . servlet . http . HttpServletRequest Ċ import Ġjavax . servlet . http . HttpServletResponse Ċ import Ġkotlin . reflect . K Type Ċ import Ġkotlin . reflect . jvm . java Type Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ class ĠHttp Handler ( val Ġroutes : ĠRoutes , Ġvar Ġinjector : ĠD Injector ) Ġ: ĠAbstract Handler () Ġ{ ĊĠĠĠ Ġval Ġresource Handlers Ġ= ĠArrayList < Resource Handler >() ĊĊĠĠĠ Ġoverride Ġfun Ġhandle ( target : ĠString ?, Ġbase Request : Ġorg . eclipse . jetty . server . Request ?, Ġrequest : ĠHttpServletRequest ?, Ġresponse : ĠHttpServletResponse ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( response Ġ!= Ġnull Ġ&& Ġrequest Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( request . queryString ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( request . request URI ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( request . request URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . contentType Ġ= Ġ" text / html ; charset = utf - 8 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . status Ġ= ĠHttpServletResponse . SC _ OK ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexecution Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Ġ= Ġroutes . find ( request . method , Ġrequest . request URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams : ĠArray < Any > Ġ= ĠArray ( route . action . parameters . size , Ġ{}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . action . parameters . forEach Indexed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidx , Ġparam Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! param . type . toString (). startsWith (" kotlin .")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams [ idx ] Ġ= Ġresolve Type ( param . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġif Ġ( route . params . containsKey ( param . name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . params [ param . name ] !!. value Ġelse Ġroute . param ById x ( idx Ġ- Ġ 1 ). value ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( param . type . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . String " Ġ-> Ġparams [ idx ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . Int " Ġ-> Ġparams [ idx ] Ġ= Ġvalue . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . Long " Ġ-> Ġparams [ idx ] Ġ= Ġvalue . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . Float " Ġ-> Ġparams [ idx ] Ġ= Ġvalue . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . Double " Ġ-> Ġparams [ idx ] Ġ= Ġvalue . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . Boolean " Ġ-> Ġparams [ idx ] Ġ= Ġvalue . to Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams [ idx ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠArray Index OutOfBoundsException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif ( param . is Optional ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . writer ?. println ( route . action . call (* params )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . writer ?. println (" Execution : Ġ$ execution ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Exception : Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( resource Handler Ġin Ġresource Handlers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Handler . handle ( target , Ġbase Request , Ġrequest , Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( base Request !!. is Handled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// println ("$ function Ġ-- Ġ${ request . request URL }${ if Ġ( query Ġ!= Ġnull ) Ġ" ?" Ġ+ Ġquery Ġelse Ġ"" } Ġ-- ĠOK Ġ@ ${ resource Handler . resource Base }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! base Request !!. is Handled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ERROR : ĠCan 't Ġhandle Ġrequest Ġ${ request . queryString }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( base Request Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Request . is Handled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Type ( type : ĠK Type ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinjector . instance ( type . java Type . typeName ) ĊĠĠĠ Ġ} Ċ }