package Ġhello Ċ Ċ import Ġcom . fasterxml . jackson . core . util . Default Ind enter Ċ import Ġcom . fasterxml . jackson . core . util . Default PrettyPrinter Ċ import Ġcom . fasterxml . jackson . databind . Serialization Feature Ċ import Ġio . ktor . application . Application Ċ import Ġio . ktor . application . call Ċ import Ġio . ktor . application . install Ċ import Ġio . ktor . client . request . get Ċ import Ġio . ktor . features . Content Neg otiation Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . jackson . jackson Ċ import Ġio . ktor . request . uri Ċ import Ġio . ktor . response . respond Ċ import Ġio . ktor . routing . get Ċ import Ġio . ktor . routing . routing Ċ import Ġio . ktor . server . engine . embedded Server Ċ import Ġio . ktor . server . netty . Net ty Ċ Ċ fun ĠApplication . run () Ġ{ ĊĠĠĠ Ġval Ġyear Milli : ĠLong Ġ= Ġ 3 1 5 4 0 0 0 0 0 0 0 ĊĠĠĠ Ġval Ġmonth Milli : ĠLong Ġ= Ġ 2 6 2 8 0 0 0 0 0 0 ĊĠĠĠ Ġval Ġday Milli : ĠLong Ġ= Ġ 8 6 4 0 0 0 0 0 ĊĠĠĠ Ġval Ġhour Milli : ĠLong Ġ= Ġ 3 6 0 0 0 0 0 ĊĊĠĠĠ Ġinstall ( Content Neg otiation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġj ack son Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure ( Serialization Feature . IND ENT _ OUTPUT , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetDefault PrettyPrinter ( Default PrettyPrinter (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindent Array sWith ( Default PrettyPrinter . Fixed Space Ind enter . instance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindent Objects With ( Default Ind enter (" Ġ Ġ", Ġ"\ n ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrouting Ġ{ ĊĠĠĠĠĠĠĠ Ġget ("/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġxml : ĠString ? Ġ= Ġupdate Cache ( call . request . uri , Ġyear Milli ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( xml Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( xml . from Xml < Calendar Years >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . NotFound ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget ("/ courses ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( get Se mester Courses (" 2 0 2 0 ", Ġ" fall ") !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget ("{ year }/{ term }/ courses ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( get Se mester Courses ( call . parameters [" year "] !! , Ġcall . parameters [" term "] !! ) !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget ("/ { year }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġxml : ĠString ? Ġ= Ġupdate Cache ( call . request . uri , Ġmonth Milli ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( xml Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( xml . from Xml < Schedule Year >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . NotFound ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget ("/ { year }/{ term }/ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġxml : ĠString ? Ġ= Ġupdate Cache ( call . request . uri , Ġday Milli ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( xml Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( xml . from Xml < Term >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . NotFound ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget ("/ { year }/{ term }/{ course }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġxml : ĠString ? Ġ= Ġupdate Cache ( call . request . uri , Ġhour Milli ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( xml Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( xml . from Xml < Department >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . NotFound ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget ("/ { year }/{ term }/{ course }/{ code }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġxml : ĠString ? Ġ= Ġupdate Cache ( call . request . uri , Ġhour Milli ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( xml Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( xml . from Xml < Subject Course >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . NotFound ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget ("/ { year }/{ term }/{ course }/{ code }/{ section }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġxml : ĠString ? Ġ= Ġupdate Cache ( call . request . uri , Ġhour Milli ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( xml Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( xml . from Xml < Section >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . NotFound ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ suspend Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġload Se mester Courses (" 2 0 2 0 ", Ġ" fall ") ĊĠĠĠ Ġembedded Server ( Net ty , Ġport Ġ= Ġ 8 0 8 0 , Ġmodule Ġ= ĠApplication :: run ). start ( wait Ġ= Ġtrue ) Ċ } Ċ