package Ġorg . x ber y . art be ams . users . domain Ċ Ċ import Ġorg . x ber y . art be ams . common . assets . domain . Asset Ċ import Ġorg . x ber y . art be ams . common . assets . domain . Asset Attributes Ċ import Ġorg . x ber y . art be ams . common . security . Password Hash ing Ċ import Ġjava . io . Serializable Ċ import Ġjava . time . Instant Ċ Ċ /** Ċ Ġ* ĠUser Ġentity . Ċ Ġ* Ċ Ġ* Ġ@ author ĠR ade k ĠBer an Ċ Ġ*/ Ċ data Ġclass ĠUser ( ĊĠĠĠ Ġoverride Ġval Ġcommon : ĠAsset Attributes , ĊĠĠĠ Ġval Ġlogin : ĠString , ĊĠĠĠ Ġval Ġpassword : ĠString , ĊĠĠĠ Ġval ĠfirstName : ĠString , ĊĠĠĠ Ġval ĠlastName : ĠString , ĊĠĠĠ Ġval Ġemail : ĠString , ĊĠĠĠ Ġval Ġroles : ĠList < Role >, ĊĠĠĠ Ġval Ġconsent : ĠInstant ?) Ġ: ĠAsset (), ĠSerializable Ġ{ ĊĊĠĠĠ Ġval Ġrole Names : ĠList < String > Ġ= Ġroles . map Ġ{ Ġit . name Ġ} ĊĠĠĠ Ġval ĠfullName : ĠString Ġ= ĠfirstName Ġ+ Ġif Ġ( lastName . isEmpty ()) Ġ"" Ġelse Ġ" Ġ" Ġ+ ĠlastName ĊĊĠĠĠ Ġfun Ġupdated With ( edited : ĠEdit ed User , Ġroles Code book : ĠList < Role >, ĠuserId : ĠString ): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupdated Password : ĠString Ġ= Ġif Ġ(! edited . password . trim (). isEmpty () Ġ&& Ġ! edited . password 2 . trim (). isEmpty () Ġ&& Ġedited . password Ġ== Ġedited . password 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPassword Hash ing (). create Password Hash ( edited . password . trim ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . password ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġroles Ġ= Ġedited . role Ids . map NotNull Ġ{ Ġrole Id Ġ-> Ġroles Code book . find Ġ{ Ġit . id Ġ== Ġrole Id Ġ}} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommon Ġ= Ġthis . common . updated With ( userId ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Ġ= Ġedited . login , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġupdated Password , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġedited . firstName , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ= Ġedited . lastName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġedited . email . lowercase (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroles Ġ= Ġroles ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Edited (): ĠEdit ed User Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEdit ed User ( this . id , Ġthis . login , Ġ"", Ġ"", Ġthis . firstName , Ġthis . lastName , Ġthis . email , Ġthis . roles . map Ġ{ Ġit . id Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠEmpty : ĠUser Ġ= ĠUser ( Asset Attributes . Empty , Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġempty List (), Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġnames From FullName ( fullName : ĠString ): ĠPair < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( fullName . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ("", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnames Ġ= ĠfullName . split (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( names . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ("", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( names . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( names [ 0 ], Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( names [ 0 ], Ġnames [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ