package Ġno . nav . hel se . person Ċ Ċ import Ġcom . fasterxml . jackson . databind . Serialization Feature Ċ import Ġcom . fasterxml . jackson . datatype . js r 3 1 0 . Java Time Module Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġno . nav . hel se . hen del ser . inn tek ts meld ing . In n tek ts meld ing H en del se Ċ import Ġno . nav . hel se . hen del ser . s aks be handling . Man ue ll S aks be handling H en del se Ċ import Ġno . nav . hel se . hen del ser . sy ke pen ge h istor ikk . Sy ke pen ge h istor ikk H en del se Ċ import Ġno . nav . hel se . hen del ser . s Ã¸ kn ad . Ny S Ã¸ kn ad H en del se Ċ import Ġno . nav . hel se . hen del ser . s Ã¸ kn ad . Send t S Ã¸ kn ad H en del se Ċ import Ġjava . util .* Ċ Ċ private Ġconst Ġval ĠCURRENT _ SK JE MA _ VER SJ ON = 2 Ċ Ċ class ĠPerson ( val Ġakt Ã¸ r Id : ĠString ) Ġ: ĠS ak sk omp le ks Observer Ġ{ ĊĠĠĠ Ġprivate Ġval Ġar be id sg iv ere Ġ= Ġmutable Map Of < String , ĠAr be id sg iver >() ĊĠĠĠ Ġprivate Ġvar Ġsk j ema Vers jon Ġ= ĠCURRENT _ SK JE MA _ VER SJ ON ĊĊĠĠĠ Ġprivate Ġval Ġperson Observer s Ġ= Ġmutable ListOf < Person Observer >() ĊĠĠĠ Ġfun Ġh Ã¥ nd ter Ny S Ã¸ kn ad ( ny S Ã¸ kn ad H en del se : ĠN y S Ã¸ kn ad H en del se ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! ny S Ã¸ kn ad H en del se . kan Be handles ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠU ten for O mf ang Exception (" kan Ġik ke Ġbe handle Ġny Ġs Ã¸ kn ad ", Ġny S Ã¸ kn ad H en del se ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfin n E ller Opp rett Ar be id sg iver ( ny S Ã¸ kn ad H en del se ). h Ã¥ nd ter Ny S Ã¸ kn ad ( ny S Ã¸ kn ad H en del se ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġh Ã¥ nd ter Send t S Ã¸ kn ad ( send t S Ã¸ kn ad H en del se : ĠSend t S Ã¸ kn ad H en del se ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! send t S Ã¸ kn ad H en del se . kan Be handles ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠU ten for O mf ang Exception (" kan Ġik ke Ġbe handle Ġsend t Ġs Ã¸ kn ad ", Ġsend t S Ã¸ kn ad H en del se ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfin n E ller Opp rett Ar be id sg iver ( send t S Ã¸ kn ad H en del se ). h Ã¥ nd ter Send t S Ã¸ kn ad ( send t S Ã¸ kn ad H en del se ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġh Ã¥ nd ter In n tek ts meld ing ( inn tek ts meld ing H en del se : ĠIn n tek ts meld ing H en del se ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! inn tek ts meld ing H en del se . kan Be handles ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalid er Alle S aker ( inn tek ts meld ing H en del se ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠU ten for O mf ang Exception (" kan Ġik ke Ġbe handle Ġinn tek ts meld ing ", Ġinn tek ts meld ing H en del se ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfin n E ller Opp rett Ar be id sg iver ( inn tek ts meld ing H en del se ). h Ã¥ nd ter In n tek ts meld ing ( inn tek ts meld ing H en del se ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġh Ã¥ nd ter Sy ke pen ge h istor ikk ( sy ke pen ge h istor ikk H en del se : ĠSy ke pen ge h istor ikk H en del se ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfin n Ar be id sg iver ( sy ke pen ge h istor ikk H en del se )?. h Ã¥ nd ter Sy ke pen ge h istor ikk ( sy ke pen ge h istor ikk H en del se ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġh Ã¥ nd ter Man ue ll S aks be handling ( man ue ll S aks be handling H en del se : ĠMan ue ll S aks be handling H en del se ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfin n Ar be id sg iver ( man ue ll S aks be handling H en del se )?. h Ã¥ nd ter Man ue ll S aks be handling ( man ue ll S aks be handling H en del se ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġs ak sk omp le ks End ret ( event : ĠS ak sk omp le ks Observer . State ChangeEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġperson Observer s . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . person End ret ( Person Observer . Person End ret Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġakt Ã¸ r Id Ġ= Ġakt Ã¸ r Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy k dom sh en del se Ġ= Ġevent . sy k dom sh en del se , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġme ment o Ġ= Ġme ment o () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Observer ( observer : ĠPerson Observer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġperson Observer s . add ( observer ) ĊĠĠĠĠĠĠĠ Ġar be id sg iv ere . values . forEach Ġ{ Ġit . add Observer ( observer ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinvalid er Alle S aker ( inn tek ts meld ing H en del se : ĠIn n tek ts meld ing H en del se ) Ġ{ ĊĠĠĠĠĠĠĠ Ġar be id sg iv ere . forEach Ġ{ Ġ(_, Ġar be id sg iver ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar be id sg iver . invalid er S aker ( inn tek ts meld ing H en del se ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfin n Ar be id sg iver ( hen del se : ĠAr be id st aker H en del se ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġh en del se . organ is as j ons nummer (). let Ġ{ Ġar be id sg iv ere [ it ] Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfin n E ller Opp rett Ar be id sg iver ( hen del se : ĠAr be id st aker H en del se ) Ġ= ĊĠĠĠĠĠĠĠ Ġh en del se . organ is as j ons nummer (). let Ġ{ Ġorg nr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar be id sg iv ere . get Or Put ( org nr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġar be id sg iver ( org nr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġar be id sg iver ( organ is as j ons nummer : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ ĠAr be id sg iver ( organ is as j ons nummer , ĠUUID . randomUUID ()). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson Observer s . forEach Ġ{ Ġperson Observer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Observer ( person Observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġinner Ġclass ĠAr be id sg iver ( val Ġorgan is as j ons nummer : ĠString , Ġval Ġid : ĠUUID ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinternal Ġconstructor ( ar be id sg iver Json : ĠAr be id sg iver Json ): Ġthis ( ar be id sg iver Json . organ is as j ons nummer , Ġar be id sg iver Json . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs aker . addAll ( ar be id sg iver Json . s aker . map Ġ{ ĠS ak sk omp le ks . fromJson ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġs aker Ġ= Ġmutable ListOf < S ak sk omp le ks >() ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġs ak sk omp le ks Observer s Ġ= Ġmutable ListOf < S ak sk omp le ks Observer >() ĊĊĠĠĠĠĠĠĠ Ġfun Ġh Ã¥ nd ter Ny S Ã¸ kn ad ( ny S Ã¸ kn ad H en del se : ĠN y S Ã¸ kn ad H en del se ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s aker . none Ġ{ Ġit . h Ã¥ nd ter Ny S Ã¸ kn ad ( ny S Ã¸ kn ad H en del se ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġny tt S ak sk omp le ks (). h Ã¥ nd ter Ny S Ã¸ kn ad ( ny S Ã¸ kn ad H en del se ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġh Ã¥ nd ter Send t S Ã¸ kn ad ( send t S Ã¸ kn ad H en del se : ĠSend t S Ã¸ kn ad H en del se ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s aker . none Ġ{ Ġit . h Ã¥ nd ter Send t S Ã¸ kn ad ( send t S Ã¸ kn ad H en del se ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġny tt S ak sk omp le ks (). h Ã¥ nd ter Send t S Ã¸ kn ad ( send t S Ã¸ kn ad H en del se ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġh Ã¥ nd ter In n tek ts meld ing ( inn tek ts meld ing H en del se : ĠIn n tek ts meld ing H en del se ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s aker . none Ġ{ Ġit . h Ã¥ nd ter In n tek ts meld ing ( inn tek ts meld ing H en del se ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġny tt S ak sk omp le ks (). h Ã¥ nd ter In n tek ts meld ing ( inn tek ts meld ing H en del se ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġh Ã¥ nd ter Sy ke pen ge h istor ikk ( sy ke pen ge h istor ikk H en del se : ĠSy ke pen ge h istor ikk H en del se ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs aker . forEach Ġ{ Ġit . h Ã¥ nd ter Sy ke pen ge h istor ikk ( sy ke pen ge h istor ikk H en del se ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġh Ã¥ nd ter Man ue ll S aks be handling ( man ue ll S aks be handling H en del se : ĠMan ue ll S aks be handling H en del se ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs aker . forEach Ġ{ Ġit . h Ã¥ nd ter Man ue ll S aks be handling ( man ue ll S aks be handling H en del se ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġinvalid er S aker ( hen del se : ĠAr be id st aker H en del se ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs aker . forEach Ġ{ Ġit . invalid er S ak ( hen del se ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Observer ( observer : ĠS ak sk omp le ks Observer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs ak sk omp le ks Observer s . add ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs aker . forEach Ġ{ Ġit . add S ak sk omp le ks Observer ( observer ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġny tt S ak sk omp le ks (): ĠS ak sk omp le ks Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠS ak sk omp le ks ( UUID . randomUUID (), Ġakt Ã¸ r Id , Ġorgan is as j ons nummer ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ak sk omp le ks Observer s . forEach ( it :: add S ak sk omp le ks Observer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs aker . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġjson Representation (): ĠAr be id sg iver Json Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAr be id sg iver Json ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorgan is as j ons nummer Ġ= Ġorgan is as j ons nummer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs aker Ġ= Ġs aker . map Ġ{ Ġit . json Representation () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġme ment o () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM ement o ( object Mapper . writeValue AsString ( json Representation ())) ĊĊĠĠĠ Ġprivate Ġfun Ġjson Representation (): ĠPerson Json Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPerson Json ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġakt Ã¸ r Id Ġ= Ġakt Ã¸ r Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsk j ema Vers jon Ġ= Ġsk j ema Vers jon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġar be id sg iv ere Ġ= Ġar be id sg iv ere . map Ġ{ Ġit . value . json Representation () Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠM ement o ( private Ġval Ġjson : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġjson ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġme ment o (). toString () ĊĊĠĠĠ Ġinternal Ġdata Ġclass ĠAr be id sg iver Json ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorgan is as j ons nummer : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs aker : ĠList < S ak sk omp le ks . S ak sk omp le ks Json >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid : ĠUUID ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠPerson Json ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġakt Ã¸ r Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsk j ema Vers jon : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġar be id sg iv ere : ĠList < Ar be id sg iver Json > ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠobjectMapper Ġ= Ġj ack son ObjectMapper () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Module ( Java Time Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. disable ( Serialization Feature . WRITE _ DAT ES _ AS _ TIMESTAMP S ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom Json ( json : ĠString ): ĠPerson Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperson Json : ĠPerson Json Ġ= ĠobjectMapper . readValue ( json ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( person Json . sk j ema Vers jon Ġ< ĠCURRENT _ SK JE MA _ VER SJ ON ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠPerson sk j ema For G am me lt ( person Json . akt Ã¸ r Id , Ġperson Json . sk j ema Vers jon , ĠCURRENT _ SK JE MA _ VER SJ ON ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPerson ( person Json . akt Ã¸ r Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġar be id sg iv ere . put All ( person Json . ar be id sg iv ere ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . organ is as j ons nummer Ġto ĠAr be id sg iver ( it ). also Ġ{ Ġar be id sg iver Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġar be id sg iver . add Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ