package Ġcom . very good security . vg sc heck out . collect . view . card . con ection Ċ Ċ import Ġcom . very good security . vg sc heck out . collect . core . On V gs ViewState ChangeListener Ċ import Ġcom . very good security . vg sc heck out . collect . core . model . state . V GS Field State Ċ import Ġcom . very good security . vg sc heck out . collect . view . card . validation . V GS Validator Ċ Ċ internal Ġabstract Ġclass ĠBase Input Connection Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġid : ĠInt , ĊĠĠĠ Ġinternal Ġvar Ġdefault Validator : ĠV GS Validator ? Ċ ) Ġ: ĠInput Runnable Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġstate Listeners Ġ= Ġmutable ListOf < On V gs ViewState ChangeListener >() ĊĊĠĠĠ Ġprotected Ġfun ĠisValid ( input : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdefault Validator ?. isValid ( input ) Ġ?: Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġclear All Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Listeners . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġadd New Listener ( listener : ĠOn V gs ViewState ChangeListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! state Listeners . contains ( listener )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Listeners . add ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġnotify All Listeners ( output : ĠV GS Field State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Listeners . forEach Ġ{ Ġit . emit ( id , Ġoutput ) Ġ} ĊĠĠĠ Ġ} Ċ }