package Ġbr . com . ac mat tos . hdc . scheduler . domain . model Ċ Ċ import Ġbr . com . ac mat tos . hdc . common . context . domain . Domain Log Enum . ENTITY Ċ import Ġbr . com . ac mat tos . hdc . common . context . domain . model . Audit Log Ċ import Ġbr . com . ac mat tos . hdc . common . context . domain . model . Entity Ċ import Ġbr . com . ac mat tos . hdc . common . context . domain . model . Id Ċ import Ġbr . com . ac mat tos . hdc . common . tool . assertion . Assertion Ċ import Ġbr . com . ac mat tos . hdc . common . tool . log gable . Log gable Ċ import Ġbr . com . ac mat tos . hdc . scheduler . config . Message Tracker Code Enum . FROM _ LES SER _ OR _ EQUAL _ TO _ TO Ċ import Ġbr . com . ac mat tos . hdc . scheduler . config . Message Tracker Code Enum . NO _ PER IO DS _ DEFINED Ċ import Ġbr . com . ac mat tos . hdc . scheduler . config . Message Tracker Code Enum . THER E _ IS _ A _ COLL ISION Ċ import Ġbr . com . ac mat tos . hdc . scheduler . config . Schedule Log Enum . AP POINT MENT Ċ import Ġbr . com . ac mat tos . hdc . scheduler . config . Schedule Log Enum . SCHED ULE Ċ import Ġbr . com . ac mat tos . hdc . scheduler . domain . c qs . Appointment Command Ċ import Ġbr . com . ac mat tos . hdc . scheduler . domain . c qs . Create AS chedule For The D ent ist Event Ċ import Ġbr . com . ac mat tos . hdc . scheduler . domain . c qs . Create Appointment For The Schedule Command Ċ import Ġbr . com . ac mat tos . hdc . scheduler . domain . c qs . Create App ointments For The Schedule Command Ċ import Ġbr . com . ac mat tos . hdc . scheduler . domain . c qs . Schedule Event Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Local Time Ċ Ċ /** Ċ Ġ* Ġ@ author ĠAC Mat tos Ċ Ġ* Ġ@ since Ġ 1 0 / 0 7 / 2 0 1 9 . Ċ Ġ*/ Ċ data Ġclass ĠSchedule ( // ĠTODO ĠTest ĊĠĠĠ Ġprivate Ġvar Ġschedule Id Data : ĠSchedule Id ? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġvar Ġd ent ist Data : ĠD ent ist ? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġvar Ġperiods Data : ĠList < Period >? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġvar Ġenabled Data : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġprivate Ġvar ĠcreatedAt Data : ĠLocalDateTime Ġ= ĠLocalDateTime . now (), ĊĠĠĠ Ġprivate Ġvar ĠupdatedAt Data : ĠLocalDateTime ? Ġ= Ġnull Ċ ): ĠEntity Ġ{ ĊĠĠĠ Ġval Ġschedule Id Ġget () Ġ= Ġschedule Id Data !! ĊĠĠĠ Ġval Ġd ent ist Ġget () Ġ= Ġd ent ist Data !! ĊĠĠĠ Ġval Ġperiods Ġget () Ġ= Ġperiods Data !! ĊĠĠĠ Ġval Ġenabled Ġget () Ġ= Ġenabled Data ĊĠĠĠ Ġval ĠcreatedAt Ġget () Ġ= ĠcreatedAt Data ĊĠĠĠ Ġval ĠupdatedAt Ġget () Ġ= ĠupdatedAt Data ĊĊĠĠĠ Ġfun Ġapply ( events : ĠList < Schedule Event >): ĠSchedule Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( event Ġin Ġevents ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply ( event : ĠSchedule Event ): ĠSchedule Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCreate AS chedule For The D ent ist Event Ġ-> Ġapply ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġapply ( event Ġas ĠCreate AS chedule For The D ent ist Event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġapply ( event : ĠCreate AS chedule For The D ent ist Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġschedule Id Data Ġ= Ġevent . schedule Id ĊĠĠĠĠĠĠĠ Ġd ent ist Data Ġ= Ġevent . dent ist ĊĠĠĠĠĠĠĠ Ġperiods Data Ġ= Ġevent . periods ĊĠĠĠĠĠĠĠ Ġenabled Data Ġ= Ġevent . enabled ĊĠĠĠĠĠĠĠ ĠcreatedAt Data Ġ= Ġevent . createdAt ĊĠĠĠĠĠĠĠ Ġassert Has No Periods Issues () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Has No Periods Issues () Ġ{ ĊĠĠĠĠĠĠĠ ĠAssertion . assert ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġperiods Ġwere Ġdefined !", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNO _ PER IO DS _ DEFINED . code ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperiods Data !!. isNotEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠAssertion . assert ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġis Ġa Ġcollision Ġfor Ġexisting Ġperiods Ġ[$ periods Data ]", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT HERE _ IS _ A _ COLL ISION . code ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! has Some Period Collision () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Some Period Collision (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġperiods Map : ĠMap < Week Day , ĠList < Period >> Ġ= Ġconvert ListOf Periods In Map () ĊĠĠĠĠĠĠĠ Ġfor Ġ( weekday Ġin Ġperiods Map . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( has Overlap For ( periods Map [ weekday ] !! )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert ListOf Periods In Map (): ĠMap < Week Day , ĠList < Period >> Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . trace ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {} Ġ{} ] Ġ- ĠCon verting Ġlist Ġof Ġperiods Ġin Ġa Ġmap ...", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠENT ITY . name , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsorted Periods Ġ= Ġperiods Data !!. sorted With ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompare By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġit . week Day Ġ}, Ġ{ Ġit . from Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlogger . trace ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {} Ġ{} ] ĠPeriod s Ġsorted ...", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠENT ITY . name ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġbase Period Ġ= Ġsorted Periods . first () ĊĠĠĠĠĠĠĠ Ġval Ġmap Of Periods Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Period . week Day Ġto Ġmutable ListOf < Period >() ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlogger . trace ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {}] ĠMap Ġof Ġperiods Ġcreated ... : Ġ-> Ġ{} Ġ<- ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠENT ITY . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of Periods . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfor ( period Ġin Ġsorted Periods ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( period . week Day Ġ=== Ġbase Period . week Day ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of Periods [ period . week Day ] !!. add ( period ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Period Ġ= Ġperiod ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of Periods [ base Period . week Day ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( base Period ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . trace ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {} Ġ{} ] Con verting Ġlist Ġof Ġperiods Ġin Ġa Ġmap : Ġ-> Ġ{} Ġ<- ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠENT ITY . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of Periods . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmap Of Periods ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Overlap For ( periods : ĠList < Period >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġperiods . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( periods [ i Ġ- Ġ 1 ]. to Ġ> Ġperiods [ i ]. from ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Appointment Commands ( ĊĠĠĠĠĠĠĠ Ġcommand : ĠCreate App ointments For The Schedule Command ĊĠĠĠ Ġ): ĠList < Appointment Command > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . trace ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {} Ġ{} ] Ġ- ĠCreating Ġappointment Ġcommands ...", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠENT ITY . name , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcommands : ĠMutable List < Appointment Command > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġdates : ĠMutable List < LocalDate > Ġ= Ġcreate Period Of Dates ( command ) ĊĠĠĠĠĠĠĠ Ġval Ġperiods : ĠMap < Week Day , ĠList < Period >> Ġ= Ġconvert ListOf Periods In Map () ĊĠĠĠĠĠĠĠ Ġfor ( date Ġin Ġdates ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweek day Ġ= ĠWeek Day . convert ( date . day OfWeek . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweek day Periods : ĠList < Period >? Ġ= Ġperiods [ weekday ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( weekday Periods Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( period Ġin Ġweek day Periods ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Create Appointment For The Schedule Command List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperiod , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . audit Log ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . debug ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {} Ġ{} ] Ġ- ĠCreating Ġappointment Ġcommands : Ġ-> Ġsize : Ġ{} Ġ<- ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠENT ITY . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . size . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcommands ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Period Of Dates ( ĊĠĠĠĠĠĠĠ Ġcommand : ĠCreate App ointments For The Schedule Command ĊĠĠĠ Ġ): ĠMutable List < LocalDate > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . trace ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {} Ġ{} ] Ġ- ĠCreating Ġperiod Ġof Ġdates ...", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠENT ITY . name , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġassert From Less er OrEqualTo To ( command )// ĠTODO ĠTEST Ġor Ġjust Ġvalidate Ġon ĠS CH ED ULE ???? ?? ĊĠĠĠĠĠĠĠ Ġval Ġdates Ġ= Ġmutable ListOf ( command . from ) ĊĠĠĠĠĠĠĠ Ġvar Ġdate Ġ= Ġcommand . from . plus Days ( 1 ) ĊĠĠĠĠĠĠĠ Ġwhile ( date . is Before ( command . to ) Ġ|| Ġdate . isEqual ( command . to )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdates . add ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate . plus Days ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . debug ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {} Ġ{} ] Ġ- ĠCreating Ġperiod Ġof Ġdates : Ġ-> Ġ[ {} Ġ- Ġ{} ] Ġ<- ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠENT ITY . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdates . first (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdates . last (). toString (), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdates ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert From Less er OrEqualTo To ( ĊĠĠĠĠĠĠĠ Ġcommand : ĠCreate App ointments For The Schedule Command ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġjava . time . Period . between ( command . from , Ġcommand . to ). days ĊĠĠĠĠĠĠĠ ĠAssertion . assert ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" from = [$ command . from ] Ġmust Ġbe Ġless er Ġor Ġequal Ġto Ġto = [$ command . to ] !", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAP POINT MENT . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFROM _ LES SER _ OR _ EQUAL _ TO _ TO . code ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġdays Ġ>= Ġ 0 Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Create Appointment For The Schedule Command List ( ĊĠĠĠĠĠĠĠ Ġdate : ĠLocalDate , ĊĠĠĠĠĠĠĠ Ġperiod : ĠPeriod , ĊĠĠĠĠĠĠĠ Ġaudit Log : ĠAudit Log ĊĠĠĠ Ġ): ĠList < Create Appointment For The Schedule Command > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . trace ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {} Ġ{} ] Ġ- ĠBuilding Ġlist Ġof Ġ${ Create Appointment For The Schedule Command :: class . java } ...", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠENT ITY . name , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcommands Ġ= Ġmutable ListOf < Create Appointment For The Schedule Command >() ĊĠĠĠĠĠĠĠ Ġval Ġslots Ġ= Ġcreate Appointment Slots For Period ( period ) ĊĠĠĠĠĠĠĠ Ġfor ( slot Ġin Ġslots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCreate Appointment For The Schedule Command ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule Id Ġ= Ġthis . schedule Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġac ronym Ġ= Ġthis . dent ist . get Ac ronym (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= Ġslot , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġperiod . slot , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudit Log Ġ= Ġaudit Log ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . debug ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {} Ġ{} ] Ġ- ĠBuilding Ġlist Ġof Ġ${ Create Appointment For The Schedule Command :: class . java }: Ġ-> Ġsize : Ġ{} Ġ<- ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠENT ITY . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . size . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcommands ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Appointment Slots For Period ( ĊĠĠĠĠĠĠ Ġperiod : ĠPeriod ĊĠĠĠ Ġ): Mutable List < Local Time > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . trace ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {} Ġ{} ] Ġ- ĠCreating Ġappointment Ġslots Ġfor Ġperiod ...", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠENT ITY . name , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġslots Ġ= Ġmutable ListOf ( period . from ) ĊĠĠĠĠĠĠĠ Ġvar Ġslot Ġ= Ġperiod . from . plus Minutes ( period . slot ) ĊĠĠĠĠĠĠĠ Ġwhile ( slot . is Before ( period . to )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslots . add ( slot ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslot Ġ= Ġslot . plus Minutes ( period . slot ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . debug ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {} Ġ{} ] Ġ- ĠCreating Ġ Ġappointment Ġslots Ġfor Ġperiod : Ġ-> Ġ[ {} Ġ- Ġ{} ] Ġ<- ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠENT ITY . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslots . first (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslots . last (). toString (), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġslots ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject : ĠLog gable () Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġapply ( events : ĠList < Schedule Event >): ĠSchedule Ġ= ĠSchedule (). apply ( events ) ĊĠĠĠĠĠĠĠ Ġfun Ġapply ( event : ĠSchedule Event ): ĠSchedule Ġ= ĠSchedule (). apply ( event ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ author ĠAC Mat tos Ċ Ġ* Ġ@ since Ġ 1 5 / 0 9 / 2 0 1 9 . Ċ Ġ*/ Ċ class ĠSchedule Id : ĠId Ġ{ ĊĠĠĠ Ġconstructor ( id : ĠString ): Ġsuper ( id ) ĊĠĠĠ Ġconstructor (): Ġsuper () Ċ } Ċ