package Ġnet . me il cli . d arch . common . models Ċ Ċ import Ġnet . me il cli . d arch . common . ID arch Model Ċ import Ġnet . me il cli . d arch . common . IN otify PropertyChanged Ċ import Ġnet . me il cli . d arch . common . Property Event Ċ import Ġkotlin . reflect . K Property Ċ Ċ class ĠLazy Not ifiable Property < T Model Ġ: ĠID arch Model , ĠTValue Ġ: ĠAny >( ĊĠĠĠ Ġprivate Ġval Ġthis Ref : ĠT Model , ĊĠĠĠ Ġoverride Ġval Ġproperty : ĠK Property <* >, ĊĠĠĠ Ġprivate Ġval Ġnotify PropertyChanged : ĠIN otify PropertyChanged , ĊĠĠĠ Ġoverride Ġval ĠpropertyName : ĠString , ĊĠĠĠ Ġoverride Ġval Ġreadonly : ĠBoolean Ċ ) Ġ: ĠIN ot ifiable Property < T Model , ĠTValue > Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġproperty Value : ĠTValue ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠT Model , Ġproperty : ĠK Property < *> ): ĠTValue Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetValue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠT Model , Ġproperty : ĠK Property <* >, Ġvalue : ĠTValue ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetValue ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue (): ĠTValue Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠcheckNotNull ( property Value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetValue ( value : ĠTValue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġproperty Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Value Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify PropertyChanged . event Raised ( Property Event . Named ( this Ref , Ġproperty , ĠpropertyName )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Initialized (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproperty Value Ġ!= Ġnull ĊĠĠĠ Ġ} Ċ }