package Ġxyz . dav ids imon . inter akt . field Ċ Ċ import Ġorg . j line . keymap . Binding Reader Ċ import Ġorg . j line . reader . Line Reader Ċ import Ġorg . j line . terminal . Terminal Ċ import Ġxyz . dav ids imon . inter akt . Prompt Result Ċ import Ġxyz . dav ids imon . inter akt . always Prompt Ċ import Ġxyz . dav ids imon . inter akt . default Null Ċ import Ġjava . io . PrintWriter Ċ Ċ fun Ġwrap Choices ( allow Custom : ĠBoolean , Ġoriginal : Ġ( tr : ĠPrompt Result ) Ġ-> ĠList < List Field . Choice < String >> ): Ġ( tr : ĠPrompt Result ) Ġ-> ĠList < List Field . Choice < String >> Ġ{ ĊĠĠĠ Ġreturn Ġwhen ( allow Custom ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġoriginal ĊĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ Ġtr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal ( tr ) Ġ+ ĠlistOf ( List Field . Choice (" Other ...", Ġ"")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ class ĠText List Field ( ĊĠĠĠ Ġprompt Message : ĠString , ĊĠĠĠ Ġchoices : Ġ( tr : ĠPrompt Result ) Ġ-> ĠList < Choice < String >>, ĊĠĠĠ Ġprivate Ġval Ġallow Custom : ĠBoolean , ĊĠĠĠ Ġprivate Ġval Ġcustom Prompt Message : ĠString , ĊĠĠĠ Ġshould Prompt : Ġ( Prompt Result , ĠString ?) Ġ-> ĠBoolean , ĊĠĠĠ Ġdefault : Ġ( Prompt Result , ĠString ?) Ġ-> ĠString ? Ċ ) Ġ: ĊĠĠĠ ĠSingle Value List Field < String >( ĊĠĠĠĠĠĠĠ Ġprompt Message , ĊĠĠĠĠĠĠĠ Ġwrap Choices ( allow Custom , Ġchoices ), ĊĠĠĠĠĠĠĠ Ġshould Prompt , ĊĠĠĠĠĠĠĠ Ġdefault ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinit State ( pr : ĠPrompt Result ): ĠRender State < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġsuper . init State ( pr ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdefaults Ġ= Ġdefault ( pr , Ġpr [ this ]) ĊĠĠĠĠĠĠĠ Ġstate . choices . sortBy Ġ{ Ġdefaults ?. contains ( it . value ) Ġ== Ġfalse Ġ} ĊĊĠĠĠĠĠĠĠ Ġstate . selected Rows . clear () ĊĠĠĠĠĠĠĠ Ġval Ġdefault Indexes Ġ= Ġstate . choices . with Index (). filter Ġ{ Ġdefaults ?. contains ( it . value . value ) Ġ== Ġtrue }. map Ġ{ Ġit . index Ġ} ĊĠĠĠĠĠĠĠ Ġfor ( index Ġin Ġdefault Indexes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . selected Rows . set ( index , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġstate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġrender ( ĊĠĠĠĠĠĠĠ Ġpr : ĠPrompt Result , ĊĠĠĠĠĠĠĠ Ġterminal : ĠTerminal , ĊĠĠĠĠĠĠĠ Ġline Reader : ĠLine Reader , ĊĠĠĠĠĠĠĠ Ġbinding Reader : ĠBinding Reader , ĊĠĠĠĠĠĠĠ Ġwriter : ĠPrintWriter ĊĠĠĠ Ġ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠretVal Ġ= Ġsuper . render ( pr , Ġterminal , Ġline Reader , Ġbinding Reader , Ġwriter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" allow Custom : Ġ$ allow Custom Ġ| ĠisEmpty : Ġ${ ret Val . first OrNull () Ġ== Ġ"" }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( allow Custom Ġ&& ĠretVal . first OrNull () Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠretVal Ġ= Ġrender Custom Field ( pr , Ġterminal , Ġline Reader , Ġbinding Reader , Ġwriter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠretVal ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNo Choices Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( allow Custom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrender Custom Field ( pr , Ġterminal , Ġline Reader , Ġbinding Reader , Ġwriter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġrender Custom Field ( pr : ĠPrompt Result , Ġterminal : ĠTerminal , Ġline Reader : ĠLine Reader , Ġbinding Reader : ĠBinding Reader , Ġwriter : ĠPrintWriter ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTextField ( custom Prompt Message , Ġalways Prompt (), Ġdefault Null ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. render ( pr , Ġterminal , Ġline Reader , Ġbinding Reader , Ġwriter ) ĊĠĠĠĠĠĠĠ Ġ). map NotNull Ġ{ Ġit Ġ} ĊĠĠĠ Ġ} Ċ }