package Ġno . nav . f amil ie . ba . sak . kj er ne . ved tak . ved tak sp eri ode Ċ Ċ import Ġno . nav . f amil ie . ba . sak . common . Fe il Ċ import Ġno . nav . f amil ie . ba . sak . common . f Ã¸ r ste Dag I In ne v Ã¦ ren de M Ã¥ ned Ċ import Ġno . nav . f amil ie . ba . sak . common . in ne v Ã¦ ren de M Ã¥ ned Ċ import Ġno . nav . f amil ie . ba . sak . common . s iste Dag I In ne v Ã¦ ren de M Ã¥ ned Ċ import Ġno . nav . f amil ie . ba . sak . common . to Year Month Ċ import Ġno . nav . f amil ie . ba . sak . kj er ne . ber eg ning . dom ene . An del Til kj ent Yt else Ċ import Ġno . nav . f amil ie . ba . sak . kj er ne . gr un nl ag . person op pl ys ning er . Person op pl ys ning G run nl ag Ċ import Ġno . nav . f amil ie . ba . sak . kj er ne . ved tak . be gr unnel ser . V ed tak Be gr un n else S pes ifik as jon Ċ import Ġno . nav . f amil ie . ba . sak . kj er ne . ved tak . be gr unnel ser . V ed tak Be gr un n else Type Ċ import Ġno . nav . f amil ie . ba . sak . kj er ne . ved tak . dom ene . V ed tak sp eri ode Med Be gr unnel ser Ċ import Ġno . nav . f amil ie . ba . sak . kj er ne . ved tak . dom ene . til Rest V ed t aks be gr un n else Ċ import Ġno . nav . fps ak . tid ss er ie . LocalDate Interval Ċ import Ġno . nav . fps ak . tid ss er ie . LocalDate Segment Ċ import Ġjava . time . LocalDate Ċ Ċ data Ġclass ĠUt vide t V ed tak sp eri ode Med Be gr unnel ser ( ĊĠĠĠ Ġval Ġid : ĠLong , ĊĠĠĠ Ġval Ġf om : ĠLocalDate ?, ĊĠĠĠ Ġval Ġtom : ĠLocalDate ?, ĊĠĠĠ Ġval Ġtype : ĠV ed tak sp eri ode type , ĊĠĠĠ Ġval Ġbe gr unnel ser : ĠList < Rest V ed t aks be gr un n else >, ĊĠĠĠ Ġval Ġf rite k ster : ĠList < String > Ġ= Ġempty List (), ĊĠĠĠ Ġval Ġg yl di ge Be gr unnel ser : ĠList < V ed tak Be gr un n else S pes ifik as jon > Ġ= Ġempty List (), ĊĠĠĠ Ġval Ġut bet aling sp eri ode Det al jer : ĠList < U tb et aling sp eri ode Det al j > Ġ= Ġempty List (), Ċ ) Ċ Ċ data Ġclass ĠRest V ed t aks be gr un n else ( ĊĠĠĠ Ġval Ġved tak Be gr un n else S pes ifik as jon : ĠV ed tak Be gr un n else S pes ifik as jon , ĊĠĠĠ Ġval Ġved tak Be gr un n else Type : ĠV ed tak Be gr un n else Type , ĊĠĠĠ Ġval Ġperson Id enter : ĠList < String > Ġ= Ġempty List (), Ċ ) Ċ Ċ fun ĠList < Ut vide t V ed tak sp eri ode Med Be gr unnel ser >. sorter (): ĠList < Ut vide t V ed tak sp eri ode Med Be gr unnel ser > Ġ{ ĊĠĠĠ Ġval Ġ( period er Med F om , Ġperiod er U ten F om ) Ġ= Ġthis . partition Ġ{ Ġit . f om Ġ!= Ġnull Ġ} ĊĠĠĠ Ġreturn Ġperiod er Med F om . sorted With ( compare By Ġ{ Ġit . f om Ġ}) Ġ+ Ġperiod er U ten F om Ċ } Ċ Ċ fun ĠV ed tak sp eri ode Med Be gr unnel ser . til Ut vide t V ed tak sp eri ode Med Be gr unnel ser ( ĊĠĠĠ Ġperson op pl ys ning G run nl ag : ĠPerson op pl ys ning G run nl ag , ĊĠĠĠ Ġan de ler Til kj ent Yt else : ĠList < An del Til kj ent Yt else > Ċ ): ĠUt vide t V ed tak sp eri ode Med Be gr unnel ser Ġ{ ĊĊĠĠĠ Ġval Ġut bet aling sp eri ode Det al jer Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( this . type Ġ== ĠV ed tak sp eri ode type . UT B ET AL ING Ġ|| Ġthis . type Ġ== ĠV ed tak sp eri ode type . END RET _ UT B ET AL ING Ġ|| Ġthis . type Ġ== ĠV ed tak sp eri ode type . F ORT S ATT _ IN NV IL GET ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan de ler For V ed tak sp eri ode type Ġ= Ġan de ler Til kj ent Yt else . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . type Ġ== ĠV ed tak sp eri ode type . END RET _ UT B ET AL ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend ret U tb et aling An del Sk al V Ã¦ re Med ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . end ret U tb et aling An de ler . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvert ik alt Segment For V ed tak sp eri ode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . type Ġ== ĠV ed tak sp eri ode type . F ORT S ATT _ IN NV IL GET ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh ent L Ã¸ pen de An del For V ed tak sp eri ode ( ande ler For V ed tak sp eri ode type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh ent Vert ik alt Segment For V ed tak sp eri ode ( ande ler For V ed tak sp eri ode type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan de ler For Segment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh ent An de ler For Segment ( ande ler For V ed tak sp eri ode type , Ġvert ik alt Segment For V ed tak sp eri ode ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġan de ler For Segment . lag U tb et aling sp eri ode Det al jer ( person op pl ys ning G run nl ag ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠUt vide t V ed tak sp eri ode Med Be gr unnel ser ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġthis . id , ĊĠĠĠĠĠĠĠ Ġf om Ġ= Ġthis . f om , ĊĠĠĠĠĠĠĠ Ġtom Ġ= Ġthis . tom , ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġthis . type , ĊĠĠĠĠĠĠĠ Ġbe gr unnel ser Ġ= Ġthis . be gr unnel ser . map Ġ{ Ġit . til Rest V ed t aks be gr un n else () Ġ}, ĊĠĠĠĠĠĠĠ Ġf rite k ster Ġ= Ġthis . f rite k ster . sorted By Ġ{ Ġit . id Ġ}. map Ġ{ Ġit . f rite k st Ġ}, ĊĠĠĠĠĠĠĠ Ġut bet aling sp eri ode Det al jer Ġ= Ġut bet aling sp eri ode Det al jer ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġfun ĠV ed tak sp eri ode Med Be gr unnel ser . end ret U tb et aling An del Sk al V Ã¦ re Med ( an del Til kj ent Yt else : ĠAn del Til kj ent Yt else ) Ġ= ĊĠĠĠ Ġan del Til kj ent Yt else . end ret U tb et aling An de ler . isNotEmpty () Ġ&& Ġan del Til kj ent Yt else . end ret U tb et aling An de ler . all Ġ{ Ġend ret U tb et aling An del Ġ-> ĊĠĠĠĠĠĠĠ Ġthis . be gr unnel ser . any Ġ{ Ġved t aks be gr un n else Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġved t aks be gr un n else . person Id enter . contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend ret U tb et aling An del . person !!. person Ident . ident ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ private Ġfun ĠV ed tak sp eri ode Med Be gr unnel ser . h ent L Ã¸ pen de An del For V ed tak sp eri ode ( ande ler Til kj ent Yt else : ĠList < An del Til kj ent Yt else >): ĠLocalDate Segment < Int > Ġ{ ĊĠĠĠ Ġval Ġsort erte Segment er Ġ= Ġan de ler Til kj ent Yt else . ut led Segment er (). sorted By Ġ{ Ġit . f om Ġ} ĊĠĠĠ Ġreturn Ġsort erte Segment er . last OrNull Ġ{ Ġit . f om . to Year Month () Ġ<= Ġin ne v Ã¦ ren de M Ã¥ ned () Ġ} ĊĠĠĠĠĠĠĠ Ġ?: Ġsort erte Segment er . first OrNull () ĊĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠFe il (" F inner Ġik ke Ġg jel den de Ġsegment Ġved Ġfort s att Ġin nv il get ") Ċ } Ċ Ċ private Ġfun ĠV ed tak sp eri ode Med Be gr unnel ser . h ent Vert ik alt Segment For V ed tak sp eri ode ( ĊĠĠĠ Ġan de ler Til kj ent Yt else : ĠList < An del Til kj ent Yt else > Ċ ) Ġ= Ġan de ler Til kj ent Yt else ĊĠĠĠ Ġ. ut led Segment er () ĊĠĠĠ Ġ. find Ġ{ Ġlocal Date Segment Ġ-> ĊĠĠĠĠĠĠĠ Ġlocal Date Segment . f om Ġ== Ġthis . f om Ġ|| Ġlocal Date Segment . tom Ġ== Ġthis . tom ĊĠĠĠ Ġ} Ġ?: Ġthrow ĠFe il (" F inner Ġik ke Ġsegment Ġfor Ġved tak sp eri ode Ġ(${ this . f om }, Ġ${ this . tom }) ") Ċ Ċ private Ġfun Ġh ent An de ler For Segment ( ĊĠĠĠ Ġan de ler Til kj ent Yt else : ĠList < An del Til kj ent Yt else >, ĊĠĠĠ Ġvert ik alt Segment For V ed tak sp eri ode : ĠLocalDate Segment < Int > Ċ ) Ġ= Ġan de ler Til kj ent Yt else . filter Ġ{ ĊĠĠĠ Ġvert ik alt Segment For V ed tak sp eri ode . local Date Interval . overlap s ( ĊĠĠĠĠĠĠĠ ĠLocalDate Interval ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . st Ã¸ nad F om . f Ã¸ r ste Dag I In ne v Ã¦ ren de M Ã¥ ned (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . st Ã¸ nad Tom . s iste Dag I In ne v Ã¦ ren de M Ã¥ ned () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ċ } Ċ