package Ġca . ll am ab age l . transp o . tools . graph Ċ Ċ import Ġca . ll am ab age l . transp o . dao . gt fs . Gt fs Source Ċ import Ġca . ll am ab age l . transp o . models . gt fs . Route Id Ċ import Ġca . ll am ab age l . transp o . models . gt fs . Stop Id Ċ import Ġorg . j gr ap ht . graph . Default Edge Ċ import Ġorg . j gr ap ht . graph . Direct ed Ac yc lic Graph Ċ import Ġorg . j gr ap ht . traverse . Top ological Order Iterator Ċ Ċ class ĠRoute Graph Builder ( val Ġroute Id : ĠRoute Id , Ġval Ġdirection Id : ĠInt , Ġprivate Ġval Ġsource : ĠG t fs Source ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġgraph : ĠDirect ed Ac yc lic Graph < Stop Id , ĠDefault Edge > Ġ= ĠDirect ed Ac yc lic Graph ( Default Edge :: class . java ) ĊĊĠĠĠ Ġfun Ġbuild Graph () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtri ps Ġ= ĠgetAll Tri ps As Stops () ĊĊĠĠĠĠĠĠĠ Ġtri ps . forEach Ġ{ Ġtrip Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrip . forEach Indexed Ġ{ Ġindex , Ġstop Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! graph . add Vertex ( stop )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph . add Edge ( trip [ index Ġ- Ġ 1 ], Ġstop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph . add Vertex ( Stop Id ("$ stop - 2 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph . add Edge ( trip [ index Ġ- Ġ 1 ], ĠStop Id ("$ stop - 2 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Could Ġnot Ġadd Ġedge Ġbetween Ġ${ trip [ index Ġ- Ġ 1 ]} Ġand Ġ$ stop ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ> Ġ 0 Ġ&& Ġ! graph . contains Edge ( trip [ index Ġ- Ġ 1 ], Ġstop )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph . add Edge ( trip [ index Ġ- Ġ 1 ], Ġstop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph . add Vertex ( Stop Id ("$ stop - 2 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph . add Edge ( trip [ index Ġ- Ġ 1 ], ĠStop Id ("$ stop - 2 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Could Ġnot Ġadd Ġedge Ġbetween Ġ${ trip [ index Ġ- Ġ 1 ]} Ġand Ġ$ stop ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġordered Ġlist Ġof Ġall Ġthe Ġstops Ġin Ġthe Ġroute . ĊĠĠĠĠ Ġ* ĠThis Ġlist Ġwill Ġbe Ġa Ġ" flatten ed " Ġversion Ġof Ġthe Ġgenerated Ġgraph . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Flat Stop Order (): ĠList < Stop Id > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= ĠTop ological Order Iterator < Stop Id , ĠDefault Edge >( graph ) ĊĠĠĠĠĠĠĠ Ġval Ġorder Ġ= Ġmutable ListOf < Stop Id >() ĊĠĠĠĠĠĠĠ Ġiterator . forEach Ġ{ Ġorder . add ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġorder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetAll Tri ps As Stops (): ĠList < List < Stop Id >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsource . tri ps . getBy Route Id ( route Id , Ġdirection Id ). map Ġ{ Ġtrip Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . stop Times . getBy Trip Id ( trip . trip Id ). sorted By Ġ{ Ġit . stop Sequence Ġ}. map Ġ{ Ġit . stop Id Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġ}. toList () ĊĠĠĠ Ġ} Ċ }