package Ġcom . alex styl . special dates . up coming Ċ Ċ import Ġcom . alex styl . special dates . date . Contact Event Ċ import Ġcom . alex styl . special dates . date . Date Ċ import Ġcom . alex styl . special dates . date . Date Comparator Ċ import Ġcom . alex styl . special dates . date . Time Period Ċ import Ġcom . alex styl . special dates . events . bank h olidays . Bank H oliday Ċ import Ġcom . alex styl . special dates . events . name days . Names In AD ate Ċ import Ġcom . alex styl . special dates . util . HashMap List Ċ Ċ class ĠUp coming Row ViewModels Builder ( private Ġval Ġduration : ĠTime Period , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠviewModel Factory : ĠUp coming Event Row ViewModel Factory ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdate Comparator Ġ= ĠDate Comparator . INSTANCE ĊĠĠĠ Ġprivate Ġval Ġcontact Events Ġ= ĠHashMap List < Annual Date , ĠContact Event >() ĊĠĠĠ Ġprivate Ġval Ġname days Ġ= ĠHashMap < Annual Date , ĠNames In AD ate >() ĊĠĠĠ Ġprivate Ġval Ġbank H olidays Ġ= ĠHashMap < Annual Date , ĠBank H oliday >() ĊĊĠĠĠ Ġfun Ġwith Contact Events ( contact Events : ĠList < Contact Event >): ĠUp coming Row ViewModels Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . contact Events . clear () ĊĠĠĠĠĠĠĠ Ġfor Ġ( contact Event Ġin Ġcontact Events ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannual Date Ġ= Ġcontact Event . date . to Annual Date () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . contact Events . add Value ( ann ual Date , Ġcontact Event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Name days ( name days : ĠList < Names In AD ate >): ĠUp coming Row ViewModels Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . name days . clear () ĊĠĠĠĠĠĠĠ Ġfor Ġ( name day Ġin Ġname days ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= Ġname day . date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name days . put ( date . to Annual Date (), Ġname day ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Bank H olidays ( bank H olidays : ĠList < Bank H oliday >): ĠUp coming Row ViewModels Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . bank H olidays . clear () ĊĠĠĠĠĠĠĠ Ġfor Ġ( bank H oliday Ġin Ġbank H olidays ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= Ġbank H oliday . date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . bank H olidays . put ( date . to Annual Date (), Ġbank H oliday ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild (): ĠList < Up coming Row ViewModel > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( no Events Are Present ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNO _ CE LE BR ATIONS ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrows ViewModels Ġ= ĠArrayList < Up coming Row ViewModel >() ĊĠĠĠĠĠĠĠ Ġvar Ġindex Date Ġ= Ġduration . starting Date ĊĠĠĠĠĠĠĠ Ġval Ġlast Date Ġ= Ġduration . ending Date ĊĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( date Comparator . compare ( index Date , Ġlast Date ) Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannual Date Ġ= Ġindex Date . to Annual Date () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contains Any Events On ( ann ual Date )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows ViewModels . add ( viewModel Factory . create Date Header ( index Date )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bank H olidays [ ann ual Date ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows ViewModels . add ( viewModel Factory . create ViewModel For ( bank H olidays [ ann ual Date ] !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name days [ ann ual Date ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows ViewModels . add ( viewModel Factory . create ViewModel For ( name days [ ann ual Date ] !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget People Events On ( ann ual Date ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows ViewModels . add ( viewModel Factory . create ViewModel For ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Date Ġ= Ġindex Date . add Day ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġrows ViewModels ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget People Events On ( index Date : ĠAnn ual Date ): ĠList < Contact Event > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontact Event Ġ= Ġcontact Events . get ( index Date ) ĊĠĠĠĠĠĠĠ Ġif Ġ( contact Event Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNO _ CONTACT _ EVENTS ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontact Event ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġno Events Are Present (): ĠBoolean Ġ= Ġcontact Events . isEmpty Ġ&& Ġname days . isEmpty () Ġ&& Ġbank H olidays . isEmpty () ĊĊĠĠĠ Ġprivate Ġfun Ġcontains Any Events On ( date : ĠAnn ual Date ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget People Events On ( date ). isNotEmpty () Ġ|| Ġname days . containsKey ( date ) Ġ|| Ġbank H olidays . containsKey ( date ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠNO _ CE LE BR ATIONS Ġ= Ġempty List < Up coming Row ViewModel >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠNO _ CONTACT _ EVENTS Ġ= Ġempty List < Contact Event >() ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠDate . to Annual Date (): ĠAnn ual Date Ġ= ĠAnn ual Date ( this . day OfMonth , Ġthis . month ) ĊĊĊ