/** Ċ Ġ* Ġ< s late _ header > Ċ Ġ* Ġurl : Ġwww . s late kit . com Ċ Ġ* Ġgit : Ġwww . github . com / code - helix / s late kit Ċ Ġ* Ġorg : Ġwww . code helix . co Ċ Ġ* Ġauthor : ĠK ish ore ĠRed dy Ċ Ġ* Ġcopyright : Ġ 2 0 1 6 ĠCode Hel ix ĠSolutions ĠInc . Ċ Ġ* Ġlicense : Ġrefer Ġto Ġwebsite Ġand / or Ġgithub Ċ Ġ* Ġabout : ĠA Ġtool - kit , Ġutility Ġlibrary Ġand Ġserver - backend Ċ Ġ* Ġman tra : ĠSimp licity Ġabove Ġall Ġelse Ċ Ġ* Ġ</ s late _ header > Ċ Ġ*/ Ċ Ċ package Ġs late kit . server . spark Ċ Ċ import Ġs late kit . apis . Api Container Ċ import Ġs late kit . apis . core . Api Ċ import Ġs late kit . apis . security . Web Protocol Ċ import Ġs late kit . apis . core . Auth Ċ import Ġs late kit . apis . core . Events Ċ import Ġs late kit . apis . doc . Doc Web Ċ import Ġs late kit . common .* Ċ import Ġs late kit . common . app . App Meta Ċ import Ġs late kit . common . app . App Meta Support Ċ import Ġs late kit . common . metrics . Metrics Ċ import Ġs late kit . common . diagnostics . Tracker Ċ import Ġs late kit . common . requests . to Response Ċ import Ġs late kit . core . common . AppContext Ċ import Ġs late kit . meta . Deserializer Ċ import Ġs late kit . server . Server Config Ċ import Ġs late kit . server . common . Diagnostics Ċ import Ġspark . Request Ċ import Ġspark . Response Ċ import Ġspark . Spark Ċ import Ġspark . Spark . static Files Ċ import Ġjava . io . File Ċ import Ġjavax . servlet . Multipart Config Element Ċ Ċ class ĠSpark Server ( ĊĠĠĠĠĠĠĠ Ġval Ġconfig : ĠServer Config , ĊĠĠĠĠĠĠĠ Ġval Ġctx : ĠContext , ĊĠĠĠĠĠĠĠ Ġval Ġauth : ĠAuth ?, ĊĠĠĠĠĠĠĠ Ġval Ġap is : ĠList < Api >, ĊĠĠĠĠĠĠĠ Ġval Ġmetrics : ĠMetrics , ĊĠĠĠĠĠĠĠ Ġval Ġevents : ĠEvents Ġ= ĠEvents () Ċ ) Ġ: ĠApp Meta Support Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġinitialize Ġwith Ġport , Ġprefix Ġfor Ġapi Ġroutes , Ġand Ġall Ġthe Ġdependent Ġitems ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx : ĠContext Ġ= ĠApp Context . simple (" s late kit - server "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġport : ĠInt Ġ= Ġ 5 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefix : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcors : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocs : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatic : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatic Dir : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdoc Key : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġap is : ĠList < Api >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth : ĠAuth ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup : Ġ(( Any ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetrics : ĠMetrics , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents : ĠEvents ĊĠĠĠ Ġ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ( Server Config ( port , Ġprefix , Ġinfo , Ġcors , Ġdocs , Ġdoc Key , Ġstatic , Ġstatic Dir , Ġsetup ), Ġctx , Ġauth , Ġap is , Ġmetrics , Ġevents ) ĊĊĠĠĠ Ġval Ġcontainer Ġ= ĠApi Container ( ctx , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeb Protocol , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġap is , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde serializer Ġ= Ġ{ Ġreq , Ġenc Ġ-> ĠDeserial izer ( req , Ġenc ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdoc Key Ġ= Ġconfig . doc Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdoc Builder Ġ= Ġ:: Doc Web ) ĊĊĠĠĠ Ġoverride Ġfun Ġapp Meta (): ĠApp Meta Ġ= Ġctx . app ĊĊĠĠĠ Ġval Ġlog Ġ= Ġctx . logs . getLogger (" s late kit . server . api ") ĊĠĠĠ Ġval Ġtracker Ġ= ĠTracker < s late kit . common . requests . Request , Ġs late kit . common . requests . Response <* >, ĠException >( Random . uuid (), Ġctx . app . about . name ) ĊĠĠĠ Ġval Ġdiagnostics Ġ= ĠDi agnostics ( metrics , Ġlog ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġexecutes Ġthe Ġapplication ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrun () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfigure ĊĠĠĠĠĠĠĠ ĠSpark . port ( config . port ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġstartup ĊĠĠĠĠĠĠĠ Ġif Ġ( config . info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . info () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠStatic Ġfiles ĊĠĠĠĠĠĠĠ Ġif Ġ( config . static ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( config . static Dir . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatic Files . location ("/ public ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatic Files . external Location ( File ( config . static Dir ). absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠPing / Check ĊĠĠĠĠĠĠĠ ĠSpark . get ( config . prefix Ġ+ Ġ"/ ping ", Ġ{ Ġreq , Ġres Ġ-> Ġping ( req , Ġres ) Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCORS ĊĠĠĠĠĠĠĠ Ġif Ġ( config . cors ) ĠSpark . options (" /* ") Ġ{ Ġreq , Ġres Ġ-> Ġcors ( req , Ġres ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠBefore ĊĠĠĠĠĠĠĠ ĠSpark . before ("* ", Ġ{ Ġreq , Ġres Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq . attribute (" org . eclipse . jetty . multipart Config ", ĠMultip art Config Element (( System . getProperty (" java . io . tmpdir ")) )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreq . attribute (" org . eclipse . multipart Config ", ĠMultip art Config Element (( System . getProperty (" java . io . tmpdir ")) )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( config . cors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . header (" Access - Control - Allow - Origin ", Ġ"* ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . header (" Access - Control - Request - Method ", Ġ"* ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . header (" Access - Control - Allow - Headers ", Ġ"* ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAllow Ġall Ġthe Ġver bs / routes Ġto Ġhit Ġexec Ġmethod ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġexec Ġmethod Ġwill Ġdispatch Ġthe Ġrequest Ġto ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġcorresponding ĠS late Kit ĠAPI . ĊĠĠĠĠĠĠĠ ĠSpark . get ( config . prefix Ġ+ Ġ" /* ", Ġ{ Ġreq , Ġres Ġ-> Ġexec ( req , Ġres ) Ġ}) ĊĠĠĠĠĠĠĠ ĠSpark . post ( config . prefix Ġ+ Ġ" /* ", Ġ{ Ġreq , Ġres Ġ-> Ġexec ( req , Ġres ) Ġ}) ĊĠĠĠĠĠĠĠ ĠSpark . put ( config . prefix Ġ+ Ġ" /* ", Ġ{ Ġreq , Ġres Ġ-> Ġexec ( req , Ġres ) Ġ}) ĊĠĠĠĠĠĠĠ ĠSpark . patch ( config . prefix Ġ+ Ġ" /* ", Ġ{ Ġreq , Ġres Ġ-> Ġexec ( req , Ġres ) Ġ}) ĊĠĠĠĠĠĠĠ ĠSpark . delete ( config . prefix Ġ+ Ġ" /* ", Ġ{ Ġreq , Ġres Ġ-> Ġexec ( req , Ġres ) Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSetup Ġscr pt ĊĠĠĠĠĠĠĠ Ġconfig . setup ?. let Ġ{ Ġc Ġ-> Ġc ("") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġstops Ġthe Ġserver Ġ( Ġthis Ġis Ġnot Ġcurrently Ġaccessible Ġon Ġthe Ġcommand Ġline Ġ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġspark . Spark . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcors ( req : ĠRequest , Ġres : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccess Control Request Headers Ġ= Ġreq . headers (" Access - Control - Request - Headers ") ĊĠĠĠĠĠĠĠ Ġif Ġ( access Control Request Headers Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . header (" Access - Control - Allow - Headers ", Ġaccess Control Request Headers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġaccess Control Request Method Ġ= Ġreq . headers (" Access - Control - Request - Method ") ĊĠĠĠĠĠĠĠ Ġif Ġ( access Control Request Method Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . header (" Access - Control - Allow - Methods ", Ġaccess Control Request Method ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġp ings Ġthe Ġserver Ġto Ġonly Ġget Ġback Ġthe Ġdatetime . ĊĠĠĠĠ Ġ* ĠUsed Ġfor Ġquickly Ġchecking Ġa Ġdeployment . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġping ( req : ĠRequest , Ġres : ĠResponse ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠDateTime . now () ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= ĠSpark Response . json ( res , ĠSuccess ( result ). to Response ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġhandles Ġthe Ġcore Ġlogic Ġof Ġexecute Ġthe Ġhttp Ġrequest . ĊĠĠĠĠ Ġ* ĠThis Ġis Ġactually Ġaccomp lished Ġby Ġthe ĠS late Kit ĠAPI ĠContainer ĊĠĠĠĠ Ġ* Ġwhich Ġhandles Ġabstract ed ĠRequests Ġand Ġdis patches Ġthem Ġto ĊĠĠĠĠ Ġ* ĠS late ĠKit Ġ" Protocol ĠIndependent ĠAPIs ". ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġexec ( req : ĠRequest , Ġres : ĠResponse ): ĠAny Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠConvert Ġthe Ġhttp Ġrequest Ġto Ġa ĠS late Kit ĠRequest ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠSpark Request . build ( ctx , Ġreq , Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠExecute Ġthe ĠAPI Ġcall ĊĠĠĠĠĠĠĠ Ġ// ĠThe ĠS late Kit ĠApi Container Ġwill Ġhandle Ġthe Ġheavy Ġwork Ġof ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . ĠChecking Ġroutes Ġto Ġarea / api / actions Ġ( Ġmethods Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . ĠValid ating Ġparameters Ġto Ġmethods ĊĠĠĠĠĠĠĠ Ġ// Ġ 3 . ĠDe coding Ġrequest Ġto Ġmethod Ġparameters ĊĠĠĠĠĠĠĠ Ġ// Ġ 4 . ĠExec uting Ġthe Ġmethod ĊĠĠĠĠĠĠĠ Ġ// Ġ 5 . ĠHandling Ġerrors ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcontainer . call ( request ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRecord Ġall Ġdiagnostics ĊĠĠĠĠĠĠĠ Ġ// Ġe . g . Ġlogs , Ġtrack , Ġmetrics , Ġevent ĊĠĠĠĠĠĠĠ Ġdiagnostics . record ( container , Ġrequest , Ġresult ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠFinally Ġconvert Ġthe Ġresult Ġback Ġto Ġa ĠHttp Result ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= ĠSpark Response . result ( res , Ġresult ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġprints Ġthe Ġsummary Ġof Ġthe Ġarguments ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinfo () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" ================================================ ============== =") ĊĠĠĠĠĠĠĠ Ġprintln (" START ING Ġ: Ġ") ĊĠĠĠĠĠĠĠ Ġthis . app Log Start ({ Ġname : ĠString , Ġvalue : ĠString Ġ-> Ġprintln ( name Ġ+ Ġ" Ġ= Ġ" Ġ+ Ġvalue ) Ġ}) ĊĠĠĠĠĠĠĠ Ġprintln (" ================================================ ============== =") ĊĠĠĠ Ġ} Ċ } Ċ