package Ġcom . o hel she m . app . controller . storage . implementation Ċ Ċ import Ġcom . o hel she m . app . controller . serialization .* Ċ import Ġcom . o hel she m . app . model . Override Data Ċ import Ġjava . io . File Ċ Ċ object ĠOverrides Ġ{ ĊĠĠĠ Ġval ĠVersions Ġ= Ġint ArrayOf ( 6 , Ġ 5 , Ġ 4 , Ġ 3 ) ĊĊĠĠĠ Ġfun Ġread ( version : ĠInt , Ġfile : ĠFile ): ĠList < Override Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 , Ġ 2 , Ġ 3 Ġ-> Ġread V 3 ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġread V 4 ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> Ġread V 5 ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġread V 6 ( file ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwrite ( file : ĠFile , Ġoverrides : ĠList < Override Data >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( overrides . isEmpty ()) Ġfile . delete () ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . simple Writer (). use Ġ{ Ġwriter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . writeInt ( 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverrides Serialization . serialize ( writer , Ġoverrides ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread V 3 ( file : ĠFile ): ĠList < Override Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġfile . read Lines () ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList ( data . size ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ i ]. split (',' ). let Ġ{ ĠOverride Data ( it [ 0 ]. toInt (), Ġit [ 1 ]. toInt (), Ġit [ 2 ], Ġ"", Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread V 4 ( file : ĠFile ): ĠList < Override Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġfile . read Lines () ĊĠĠĠĠĠĠĠ Ġreturn ĠList ( data . size ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ i ]. split (' ^ '). let Ġ{ ĠOverride Data ( it [ 0 ]. toInt (), Ġit [ 1 ]. toInt (), Ġit [ 2 ], Ġit [ 3 ], Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠV 5 overrides Serialization Ġ= Ġobject Ġ: ĠSerialization < Override Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( writer : ĠSimple Writer , Ġdata : ĠOverride Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . writeInt ( data . day ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . writeInt ( data . hour ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . writeString ( data . new Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . writeString ( data . new Teacher ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( reader : ĠSimple Reader ): ĠOverride Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Ġ= Ġreader . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhour Ġ= Ġreader . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewName Ġ= Ġreader . readString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Teacher Ġ= Ġreader . readString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠOverride Data ( day , Ġhour , ĠnewName , Ġnew Teacher , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. of List () ĊĊĠĠĠ Ġprivate Ġfun Ġread V 5 ( file : ĠFile ): ĠList < Override Data > Ġ= Ġfile . simple Reader (). use Ġ{ Ġreader Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġreader . readInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( version Ġ!= Ġ 5 ) Ġthrow ĠIllegalArgumentException () ĊĠĠĠĠĠĠĠ ĠV 5 overrides Serialization . deserialize ( reader ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġoverrides Serialization Ġ= ĠOverride Serialization . of List () ĊĠĠĠ Ġprivate Ġfun Ġread V 6 ( file : ĠFile ): ĠList < Override Data > Ġ= Ġfile . simple Reader (). use Ġ{ Ġreader Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġreader . readInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( version Ġ!= Ġ 6 ) Ġthrow ĠIllegalArgumentException () ĊĠĠĠĠĠĠĠ Ġoverrides Serialization . deserialize ( reader ) ĊĠĠĠ Ġ} Ċ }