package Ġch . luc aro . r le Ċ Ċ import Ġio . jav al in . J aval in Ċ import Ġio . jav al in . http . Handler Ċ import Ġio . jav al in . http . static files . Location Ċ import Ġorg . eclipse . jetty . server . session . Default Session Cache Ċ import Ġorg . eclipse . jetty . server . session . File Session DataStore Ċ import Ġorg . eclipse . jetty . server . session . Session Handler Ċ import Ġjava . io . File Ċ Ċ object ĠMain Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġreply Manager : ĠReply Manager ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= Ġif Ġ( args . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig . read ( File ( args [ 0 ])) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠConfig () ĊĊĊĠĠĠĠĠĠĠ Ġval Ġj aval in Ġ= ĠJ aval in . create { cfg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcfg . add Static Files ( config . video Dir , ĠLocation . EXTERNAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcfg . session Handler Ġ{ Ġfile Session Handler () Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start ( config . port ) ĊĊĠĠĠĠĠĠĠ Ġj aval in . get ("/", Ġmain page ) ĊĠĠĠĠĠĠĠ Ġj aval in . post ("/", Ġmain page ) ĊĊĠĠĠĠĠĠĠ Ġval Ġquery Manager Ġ= ĠQuery Manager ( File (" query ")) ĊĠĠĠĠĠĠĠ Ġreply Manager Ġ= ĠReply Manager ( query Manager , ĠFile (" reply ")) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmain page Ġ= ĠHandler Ġ{ Ġctx Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġctx . req . session . id ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ctx . req . method Ġ== Ġ" POST "){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Id Ġ= Ġctx . form Param Map ()[" query Id "] ?. first () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( query Id Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġctx . form Param Map (). filter Ġ{ Ġit . key Ġ!= Ġ" submit " Ġ&& Ġit . key Ġ!= Ġ" query Id " Ġ&& Ġit . value . isNotEmpty () Ġ}. map Ġ{ Ġit . key Ġto Ġit . value . first () Ġ}. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreply Manager . store Evalu ated Results ( id , Ġquery Id , Ġresults ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmodel Ġ= Ġprepare Result List ( id ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( model [" query Id "] Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel [" title "] Ġ= Ġ" Results Ġfor Ġ${ model [" query Id "] !! }" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel [" title "] Ġ= Ġ" No Ġmore Ġvideos " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmodel [" options "] Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" A " Ġto Ġ 4 , Ġ" B " Ġto Ġ" very Ġgood "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" A " Ġto Ġ 3 , Ġ" B " Ġto Ġ" good "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" A " Ġto Ġ 2 , Ġ" B " Ġto Ġ" ok "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" A " Ġto Ġ 1 , Ġ" B " Ġto Ġ" bad ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠĠĠĠĠ Ġctx . render (" main . vm ", Ġmodel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Result List ( sessionId : ĠString ): ĠMutable Map < String , ĠAny > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmutable Map Of < String , ĠAny >() ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġreply Manager . getNext List To Evaluate ( sessionId ) ĊĊĠĠĠĠĠĠĠ Ġif ( list . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [" query Id "] Ġ= Ġlist . first (). first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [" ids "] Ġ= Ġlist . map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmap ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfile Session Handler () Ġ= ĠSession Handler (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġsession Cache Ġ= ĠDefault Session Cache ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession DataStore Ġ= ĠFile Session DataStore (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Dir Ġ= ĠFile (".") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . store Dir Ġ= ĠFile ( base Dir , Ġ" session - store "). apply Ġ{ Ġmkdir () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhttp Only Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ Ċ } Ċ