package Ġcover os R 3 z . timer ec ording . types Ċ Ċ import Ġcover os R 3 z . system . misc . utility . check Parse ToInt Ċ import Ġcover os R 3 z . persistence . types . Deserial izable Ċ import Ġcover os R 3 z . persistence . types . Index able Serializable Ċ import Ġcover os R 3 z . persistence . types . Serialization Keys Ċ import Ġcover os R 3 z . persistence . utility . Database Disk Persistence . Companion . db entry Deserialize Ċ import Ġcover os R 3 z . persistence . types . Serializable Companion Ġas ĠSerializable Companion Ċ Ċ private Ġconst Ġval Ġmax Employee Count Ġ= Ġ 1 0 0 _ 0 0 0 _ 0 0 0 Ċ const Ġval Ġmax Employee Name Size Ġ= Ġ 3 0 Ċ private Ġconst Ġval Ġmax Employee Name Size Msg Ġ= Ġ" Max Ġsize Ġof Ġemployee Ġname Ġis Ġ$ max Employee Name Size " Ċ private Ġconst Ġval Ġmax Employee Msg Ġ= Ġ" No Ġway Ġthis Ġcompany Ġhas Ġmore Ġthan Ġ 1 0 0 Ġmillion Ġemployees " Ċ const Ġval Ġmin Employee Id Msg Ġ= Ġ" Valid Ġidentifier Ġvalues Ġare Ġ 0 Ġor Ġabove , Ġwith Ġ 0 Ġreserved Ġfor Ġthe Ġsystem Ġuser " Ċ private Ġconst Ġval Ġemployee Name Cannot Be Empty Msg Ġ= Ġ" All Ġemployees Ġmust Ġhave Ġa Ġnon - empty Ġname " Ċ const Ġval Ġemployee Id NotNull Msg Ġ= Ġ" The Ġemployee Ġid Ġmust Ġnot Ġbe Ġnull " Ċ const Ġval Ġemployee Name NotNull Msg Ġ= Ġ" The Ġemployee Ġname Ġmust Ġnot Ġbe Ġnull " Ċ const Ġval Ġemployee Id Cannot Be Blank Ġ= Ġ" The Ġemployee Ġid Ġmust Ġnot Ġbe Ġblank " Ċ Ċ val ĠNO _ EMP LOY EE _ ID Ġ= ĠEmployee Id ( max Employee Count Ġ- Ġ 1 ) Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġused Ġto Ġrepresent Ġno Ġemployee Ġ- Ġjust Ġto Ġavoid Ġusing Ġnull Ġfor Ġan Ġemployee Ċ Ġ* ĠIt 's Ġa Ġtyped Ġnull , Ġessentially Ċ Ġ*/ Ċ val ĠNO _ EMP LOY EE Ġ= ĠEmployee ( NO _ EMP LOY EE _ ID , ĠEmployee Name (" THIS ĠRE PRESENT S ĠNO ĠEMP LOY EE ")) Ċ Ċ /** Ċ Ġ* ĠHold s Ġa Ġemployee 's Ġname Ġbefore Ġwe Ġhave Ġa Ġwhole Ġobject , Ġlike Ġ[ Employee ] Ċ Ġ*/ Ċ data Ġclass ĠEmployee Name ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( value . isNotBlank ()) Ġ{ Ġemployee Name Cannot Be Empty Msg Ġ} ĊĠĠĠĠĠĠĠ Ġrequire ( value . length Ġ<= Ġmax Employee Name Size ) Ġ{ Ġmax Employee Name Size Msg Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġmake ( value : ĠString ?) Ġ: ĠEmployee Name Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue NotNull Ġ= ĠcheckNotNull ( value ) Ġ{ Ġemployee Name NotNull Msg Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEmployee Name ( value NotNull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠEmployee Id ( val Ġvalue : ĠInt ) Ġ{ ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( value Ġ< Ġmax Employee Count ) Ġ{ Ġmax Employee Msg Ġ} ĊĠĠĠĠĠĠĠ Ġrequire ( value Ġ>= Ġ 0 ) Ġ{ Ġmin Employee Id Msg Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠYou Ġcan Ġpass Ġthe Ġid Ġas Ġa Ġstring Ġand Ġwe 'll Ġtry Ġto Ġparse Ġit ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġmake ( value : ĠString ?) Ġ: ĠEmployee Id Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEmployee Id ( check Parse ToInt ( value , Ġ{ Ġemployee Id NotNull Msg Ġ}, Ġ{ Ġemployee Id Cannot Be Blank Ġ}, Ġ{ Ġ""" The Ġemployee Ġid Ġwas Ġnot Ġinterpre table Ġas Ġan Ġinteger . Ġ ĠYou Ġsent Ġ"$ value ". """ Ġ})) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠEmployee ( val Ġid : ĠEmployee Id , Ġval Ġname : ĠEmployee Name ) Ġ: ĠIndex able Serializable () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Index (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġid . value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġdata Mappings : ĠMap < Serialization Keys , ĠString > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . ID Ġto Ġ"${ id . value }", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . NAME Ġto Ġname . value ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġclass ĠDeserial izer Ġ: ĠDeserial izable < Employee > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( str : ĠString ) Ġ: ĠEmployee Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdb entry Deserialize ( str , ĠComp anion ) Ġ{ Ġentries Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcheck Parse ToInt ( entries [ Keys . ID ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEmployee ( Employee Id ( id ), ĠEmployee Name . make (( entries [ Keys . NAME ]))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠSerializable Companion < Keys >( Keys . values ()) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdirectory Name : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" employees " ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠKeys ( override Ġval Ġkey String : ĠString ) Ġ: ĠSerialization Keys Ġ{ ĊĠĠĠĠĠĠĠ ĠID (" id "), ĊĠĠĠĠĠĠĠ ĠNAME (" name "); ĊĊĠĠĠ Ġ} Ċ } ĊĊĊ