/** Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠCar l - Phil ipp ĠH arm ant Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġfr . c ph . ch icago . core . model Ċ Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġfr . c ph . ch icago . core . model . enumeration . Train Line Ċ import Ġjava . math . BigInteger Ċ import Ġjava . util . TreeMap Ċ import Ġjava . util . Tree Set Ċ import Ġorg . apache . commons . lang 3 . StringUtils Ċ Ċ /** Ċ Ġ* ĠTrain Ġstation Ġentity Ċ Ġ* Ċ Ġ* Ġ@ author ĠCar l - Phil ipp ĠH arm ant Ċ Ġ* Ġ@ version Ġ 1 Ċ Ġ*/ Ċ class ĠTrain Station ( ĊĠĠĠ Ġid : ĠBigInteger , ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġvar Ġstops : ĠList < Stop >) Ġ: ĠComparable < Train Station >, ĠParcel able , ĠStation ( id , Ġname ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbuild Empty Station (): ĠTrain Station Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTrain Station ( BigInteger . ZERO , ĠStringUtils . EMPTY , Ġmutable ListOf ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠCRE ATOR : ĠParcel able . Creator < Train Station > Ġ= Ġobject Ġ: ĠParcel able . Creator < Train Station > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( source : ĠParcel ): ĠTrain Station Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTrain Station ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Train Station ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf Null s ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġconstructor ( source : ĠParcel ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġid Ġ= ĠBigInteger ( source . readString () !! ), ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġsource . readString () Ġ?: ĠStringUtils . EMPTY , ĊĠĠĠĠĠĠĠ Ġstops Ġ= Ġsource . create Typed ArrayList ( Stop . CRE ATOR ) Ġ?: ĠlistOf ()) ĊĊĠĠĠ Ġval Ġlines : ĠSet < Train Line > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstops ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . lines Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ( Tree Set ()) Ġ{ Ġaccumulator , Ġitem Ġ-> Ġaccumulator . addAll ( item ); Ġaccumulator Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġstop By Lines : ĠMap < Train Line , ĠList < Stop >> ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠTreeMap < Train Line , ĠMutable List < Stop >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( stop Ġin Ġstops ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( train Line Ġin Ġstop . lines ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . contains ( train Line )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . getValue ( train Line ). add ( stop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ train Line ] Ġ= Ġmutable ListOf ( stop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠTrain Station ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . name . compareTo ( other . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġstops Position : ĠList < Position > Ġget () Ġ= Ġstops . map Ġ{ Ġit . position Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdescribe Contents (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( dest : ĠParcel , Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdest . writeString ( id . toString ()) ĊĠĠĠĠĠĠĠ Ġdest . writeString ( name ) ĊĠĠĠĠĠĠĠ Ġdest . write Typed List ( stops ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Train Station ( stops =$ stops )" ĊĠĠĠ Ġ} Ċ } Ċ