package Ġca . mc g ill . science . te pid . server . db Ċ Ċ import Ġca . mc g ill . science . te pid . models . data . Full Destination Ċ import Ġca . mc g ill . science . te pid . models . data . Full Session Ċ import Ġca . mc g ill . science . te pid . models . data . Full User Ċ import Ġca . mc g ill . science . te pid . models . data . Mar quee Data Ċ import Ġca . mc g ill . science . te pid . models . data . Personal Identifier Ċ import Ġca . mc g ill . science . te pid . models . data . Print Job Ċ import Ġca . mc g ill . science . te pid . models . data . Print Queue Ċ import Ġca . mc g ill . science . te pid . models . data . Put Response Ċ import Ġca . mc g ill . science . te pid . models . data . Se mester Ċ import Ġca . mc g ill . science . te pid . server . server . Config Ċ import Ġca . mc g ill . science . te pid . server . util . setDefault Props Ċ import Ġca . mc g ill . science . te pid . server . util . text Ċ import Ġca . mc g ill . science . te pid . utils . Props URL Ċ import Ġjava . io . InputStream Ċ import Ġjavax . persistence . Entity Exists Exception Ċ import Ġjavax . persistence . EntityManager Factory Ċ import Ġjavax . persistence . Entity NotFoundException Ċ import Ġjavax . ws . rs . Web ApplicationException Ċ import Ġjavax . ws . rs . core . Response Ċ Ċ fun Ġcreate Db (): ĠDb Layer Ġ{ ĊĠĠĠ ĠsetDefault Props () ĊĊĠĠĠ Ġval Ġpersistence Unit Ġ= Ġif Ġ( Props URL . TEST ING ?. to Boolean () Ġ!= Ġfalse ) Ġ" hibernate - pu - test " Ġelse Ġ" te pid - pu " ĊĠĠĠ ĠConfig . logger . debug (" creating Ġdatabase Ġfor Ġpersistence Ġunit Ġ$ persistence Unit ") ĊĠĠĠ Ġval Ġnew E mf Ġ= Ġmake EntityManager Factory ( persistence Unit ) ĊĠĠĠ Ġem f Ġ= Ġnew E mf ĊĠĠĠ ĠConfig . logger . debug (" entity Ġmanager Ġfactory Ġcreated ") ĊĠĠĠ Ġval Ġhi bernate Db Ġ= Ġmake Hibernate Db ( new E mf ) ĊĠĠĠ ĠConfig . logger . debug (" hibernate Ġdb Ġcreated ") ĊĠĠĠ Ġreturn Ġhi bernate Db Ċ } Ċ Ċ var ĠDB Ġ= Ġcreate Db () Ċ late init Ġvar Ġem f : ĠEntity ManagerFactory Ċ /** Ċ Ġ* ĠI ds Ġare Ġunique Ġstring Ġkeys Ġin Ġdb s Ċ Ġ*/ Ċ type alias ĠId Ġ= ĠString Ċ Ċ enum Ġclass ĠOrder Ġ{ ĊĠĠĠ ĠASC ENDING Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠComparable < T >> Ġsort ( iterable : ĠIterable < T >): ĠList < T > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiterable . sorted () ĊĠĠĠ Ġ}, ĊĠĠĠ ĠDESC ENDING Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠComparable < T >> Ġsort ( iterable : ĠIterable < T >): ĠList < T > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiterable . sorted Descending () ĊĠĠĠ Ġ}; ĊĊĠĠĠ Ġabstract Ġfun Ġ< T Ġ: ĠComparable < T >> Ġsort ( iterable : ĠIterable < T >): ĠList < T > Ċ } Ċ Ċ interface ĠI Crud < T , ĠP > Ġ{ ĊĠĠĠ Ġval Ġclass Parameter : ĠClass < T > ĊĊĠĠĠ Ġfun Ġcreate ( obj : ĠT ): ĠPut Response ĊĊĠĠĠ Ġfun Ġread OrNull ( id : ĠP ): ĠT ? ĊĊĠĠĠ Ġfun Ġread ( id : ĠP ): ĠT ĊĊĠĠĠ Ġfun Ġread All (): ĠList < T > ĊĊĠĠĠ Ġfun Ġupdate ( obj : ĠT ): ĠT ĊĊĠĠĠ Ġfun Ġupdate ( id : ĠP , Ġupdater : ĠT . () Ġ-> ĠUnit ): ĠT ĊĊĠĠĠ Ġfun Ġdelete ( obj : ĠT ) ĊĊĠĠĠ Ġfun Ġdelete ById ( id : ĠP ) ĊĊĠĠĠ Ġfun Ġput ( obj : ĠT ): ĠPut Response Ċ } Ċ Ċ class ĠDb Layer ( ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġdest inations : ĠDb Destination Layer , ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġprint Jobs : ĠDb Job Layer , ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġqueues : ĠDb Queue Layer , ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġmar quee : ĠDb Mar quee Layer , ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġsessions : ĠDb Session Layer , ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġusers : ĠDb User Layer , ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġquota : ĠDb Quota Layer Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠComparable < T >> ĠList < T >. sort As ( order : ĠOrder ): ĠList < T > Ġ= Ġorder . sort ( this ) Ċ } Ċ Ċ interface ĠDb Destination Layer Ġ: ĠI Crud < Full Destination , ĠId ?> Ċ Ċ interface ĠDb Job Layer Ġ: ĠI Crud < Print Job , ĠId ?> Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġjobs Ġby Ġ[ queue ] ĊĠĠĠĠ Ġ* ĠIf Ġ[ max Age ] Ġ> Ġ 0 , Ġthen Ġonly Ġjobs Ġcreated Ġbefore Ġ( now Ġ- Ġ[ max Age ]) ms Ġwill Ġbe Ġincluded ĊĠĠĠĠ Ġ* ĠIf Ġ[ limit ] Ġ> Ġ 0 , Ġthen Ġonly Ġ[ limit ] Ġjobs Ġwill Ġbe Ġprovided ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Job sBy Queue ( ĊĠĠĠĠĠĠĠ Ġqueue : ĠString , ĊĠĠĠĠĠĠĠ Ġmax Age : ĠLong Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠ Ġsort Order : ĠOrder Ġ= ĠOrder . DESC ENDING , ĊĠĠĠĠĠĠĠ Ġlimit : ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġ): ĠList < Print Job > ĊĊĠĠĠ Ġfun Ġget Job sBy User ( id : ĠId , Ġsort Order : ĠOrder Ġ= ĠOrder . DESC ENDING ): ĠList < Print Job > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġjobs Ġwhich Ġhave Ġa Ġvalue Ġfor Ġtheir Ġfile , Ġimp lying Ġthe Ġcontents Ġare Ġstill Ġstored Ġin ĠT EP ID ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Stored Jobs (): ĠList < Print Job > ĊĊĠĠĠ Ġfun Ġget Job File ( id : ĠId , Ġfile : ĠString ): ĠInputStream ? ĊĊĠĠĠ Ġfun Ġget Old Jobs ( expire Before : ĠLong ): ĠList < Print Job > Ċ } Ċ Ċ interface ĠDb Queue Layer Ġ: ĠI Crud < Print Queue , ĠId ?> Ġ{ ĊĊĠĠĠ Ġfun Ġget Eta ( destination Id : ĠId ): ĠLong Ċ } Ċ Ċ interface ĠDb Mar quee Layer Ġ: ĠI Crud < Mar quee Data , ĠId ?> Ċ Ċ interface ĠDb Session Layer Ġ: ĠI Crud < Full Session , ĠId ?> Ġ{ ĊĠĠĠ Ġfun Ġget Session Ids ForUser ( id : ĠId ): ĠList < Id > Ċ } Ċ Ċ interface ĠDb User Layer Ġ: ĠI Crud < Full User , ĠId ?> Ġ{ ĊĊĠĠĠ Ġfun Ġput Users ( users : ĠCollection < Full User >): ĠUnit ĊĊĠĠĠ Ġfun ĠgetAll If Present ( ids : ĠSet < String >): ĠSet < Full User > ĊĊĠĠĠ Ġfun Ġfind ( sam : ĠPersonal Identifier ): ĠFull User ? Ċ } Ċ Ċ interface ĠDb Quota Layer Ġ{ ĊĠĠĠ Ġfun ĠgetTotal Print ed Count ( id : ĠId ): ĠInt ĊĊĠĠĠ Ġfun Ġget Already Granted Users ( ids : ĠSet < String >, Ġse mester : ĠSe mester ): ĠSet < String > Ċ } Ċ Ċ fun Ġ< T > Ġremap Exceptions ( f : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġf () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠWeb ApplicationException ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEntity NotFoundException Ġ-> ĠResponse . Status . NOT _ FOUND . text (" Not Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIllegalArgumentException Ġ-> ĠResponse . Status . BAD _ REQUEST . text ("${ e :: class . java . simple Name } Ġoccurred ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEntity Exists Exception Ġ-> ĠResponse . Status . CONF LI CT . text (" Entity ĠEx ists ; Ġ${ e :: class . java . simple Name } Ġoccurred ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠResponse . Status . INTERNAL _ SERVER _ ERROR . text (" O uch ! Ġ${ e :: class . java . simple Name } Ġoccurred ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }