package Ġcom . example . car los . real program mers . domain . io Ċ Ċ import Ġcom . example . car los . real program mers . domain . entities . Program mer Ċ import Ġcom . example . car los . real program mers . domain . entities . Rating Level Ċ import Ġcom . example . car los . real program mers . helpers . Observable Ċ import Ġjava . beans . Property Change Support Ċ import Ġjava . util .* Ċ import Ġkotlin . properties . Deleg ates Ċ import Ġkotlin . reflect . K Property ĊĊ Ċ class ĠProgram mer Request ( ĊĠĠĠ Ġid : ĠString ?, ĊĠĠĠ ĠfirstName : ĠString , ĊĠĠĠ ĠlastName : ĠString , ĊĠĠĠ Ġem acs : ĠInt , ĊĠĠĠ Ġcaffe ine : ĠInt , ĊĠĠĠ Ġreal Program mer Rating : ĠRating Level , ĊĠĠĠ Ġinter view Date : ĠDate ?, ĊĠĠĠ Ġfavorite : ĠBoolean Ċ ) Ġ: ĠObservable Ġ{ ĊĊĠĠĠ Ġconstructor () Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġ"", ĊĠĠĠĠĠĠĠ ĠlastName Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġem acs Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠ Ġcaffe ine Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠ Ġreal Program mer Rating Ġ= ĠRating Level ( Rating Level . MEDIUM ), ĊĠĠĠĠĠĠĠ Ġinter view Date Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfavorite Ġ= Ġfalse ĊĠĠĠ Ġ) ĊĊĊĠĠĠ Ġprivate Ġvar ĠonChange Ġ= Ġ{ Ġprop : ĠK Property <* >, ĠoldValue : ĠAny ?, ĠnewValue : ĠAny ? Ġ-> ĊĠĠĠĠĠĠĠ Ġchange Support . fire Property Change ( prop . name , ĠoldValue , ĠnewValue ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġvar Ġid Ġ= Ġid Ġ?: Ġ"" ĊĊĠĠĠ Ġvar ĠfirstName : ĠString Ġby ĠDeleg ates . observable ( initial Value Ġ= ĠfirstName , ĠonChange Ġ= ĠonChange ) ĊĊĠĠĠ Ġvar ĠlastName : ĠString Ġby ĠDeleg ates . observable ( initial Value Ġ= ĠlastName , ĠonChange Ġ= ĠonChange ) ĊĊĠĠĠ Ġvar Ġem acs : ĠInt Ġby ĠDeleg ates . observable ( initial Value Ġ= Ġem acs , ĠonChange Ġ= ĠonChange ) ĊĊĠĠĠ Ġvar Ġcaffe ine : ĠInt Ġby ĠDeleg ates . observable ( initial Value Ġ= Ġcaffe ine , ĠonChange Ġ= ĠonChange ) ĊĊĠĠĠ Ġval Ġreal Program mer Rating : ĠRating Level ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠRating Level (( emacs Ġ+ Ġcaffe ine ) Ġ/ Ġ 2 ) ĊĊĠĠĠ Ġvar Ġinter view Date : ĠDate ? Ġby ĠDeleg ates . observable ( initial Value Ġ= Ġinter view Date , ĠonChange Ġ= ĠonChange ) ĊĊĠĠĠ Ġvar Ġfavorite : ĠBoolean Ġby ĠDeleg ates . observable ( initial Value Ġ= Ġfavorite , ĠonChange Ġ= ĠonChange ) ĊĊĠĠĠ Ġval ĠisValid : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ!( firstName . isEmpty () Ġ|| ĠlastName . isEmpty ()) ĊĊĠĠĠ Ġoverride Ġval Ġchange Support Ġ= ĠProperty Change Support ( this ) ĊĊĊĠĠĠ Ġfun Ġget Program mer ( date : ĠDate ): ĠProgram mer Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠProgram mer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . firstName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . lastName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . emacs , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . caffe ine , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . real Program mer Rating , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . favorite ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊ Ċ }