package Ġjp . s 6 4 . tell orche . gui . scene . sequence Ċ Ċ import Ġjavafx . application . Platform Ċ import Ġjavafx . event . ActionEvent Ċ import Ġjavafx . f xml . FXML Ċ import Ġjavafx . f xml . FXML Loader Ċ import Ġjavafx . scene . Scene Ċ import Ġjavafx . scene . control . Button Ċ import Ġjavafx . scene . control . Label Ċ import Ġjavafx . scene . control . ScrollPane Ċ import Ġjavafx . scene . control . TextField Ċ import Ġjavafx . scene . input . KeyEvent Ċ import Ġjavafx . scene . layout . Border Pane Ċ import Ġjavafx . stage . Modal ity Ċ import Ġjavafx . stage . Stage Ċ import Ġjp . s 6 4 . tell orche . Sequence Logic Ċ import Ġjp . s 6 4 . tell orche . Sequence Mode Ċ import Ġjp . s 6 4 . tell orche . Tell orche Ċ import Ġjp . s 6 4 . tell orche . gui . Scene Loader Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . io . Pip ed InputStream Ċ import Ġjava . io . Pip ed OutputStream Ċ import Ġjava . io . Print Stream Ċ import Ġjava . io . PrintWriter Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ object ĠSequence Execution Scene Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġcreate ( filename : ĠString , Ġstart Period : ĠLong ): ĠStage Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġloader Ġ= ĠF XML Loader ( Scene Loader . class Loader (). getResource (" sequence _ execution _ scene . f xml ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠStage (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Sequence ĠExecution " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscene Ġ= ĠScene ( loader . load ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġloader . get Controller < Sequence Execution Controller >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Args ( filename , Ġstart Period ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate And Show ( self : ĠStage , Ġfilename : ĠString , Ġstart Period : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate ( filename , Ġstart Period ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Owner ( self ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Modal ity ( Modal ity . APPLICATION _ MOD AL ) ĊĠĠĠĠĠĠĠ Ġ}. show And Wait () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSequence Execution Controller Ġ{ ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġoutput : ĠLabel ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġroot : ĠBorder Pane ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġinput Field : ĠTextField ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġsend Button : ĠButton ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġkill Button : ĠButton ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġscroll Pane : ĠScroll Pane ĊĊĠĠĠ Ġprivate Ġval Ġinput : ĠP ip ed OutputStream ĊĠĠĠ Ġprivate Ġval Ġwriter : ĠPrintWriter ĊĊĠĠĠ Ġprivate Ġval Ġbuffer : ĠBufferedReader ĊĠĠĠ Ġprivate Ġval Ġstream : ĠPrint Stream ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfilename : ĠString ĊĠĠĠ Ġprivate Ġvar Ġstart Period : ĠLong Ġby ĠDeleg ates . notNull () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġconsole Thread : ĠThread ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlogic Thread : ĠThread ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlogic : ĠSequence Logic ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠP ip ed InputStream () ĊĊĠĠĠĠĠĠĠ Ġstream Ġ= ĠPrint Stream ( Pip ed OutputStream ( input )) ĊĠĠĠĠĠĠĠ Ġbuffer Ġ= ĠBufferedReader ( InputStream Reader ( input )) ĊĊĠĠĠĠĠĠĠ Ġthis . input Ġ= ĠP ip ed OutputStream () ĊĠĠĠĠĠĠĠ Ġthis . writer Ġ= ĠPrintWriter ( this . input ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ Ġroot . scene Property (). addListener Ġ{ Ġ_, Ġ_, Ġnew Scene Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Scene . window Property (). addListener Ġ{ Ġ_, Ġ_, Ġnew Window Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( new Window Ġas ĠStage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ing Property () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addListener Ġ{ Ġ_, ĠoldValue , ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( oldValue Ġ== Ġfalse Ġ&& ĠnewValue Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Window Created () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( oldValue Ġ== Ġtrue Ġ&& ĠnewValue Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Window Created () Ġ{ ĊĠĠĠĠĠĠĠ Ġconsole Thread Ġ= ĠThread ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . run Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln In Gui (" java Ġ- jar Ġ" Ġ+ ĠTell orche . filename () Ġ+ Ġ" Ġsequence Ġ-- config Ġ" Ġ+ Ġfilename ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . forEach Line Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . run Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln In Gui ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . run Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln In Gui (" exit ed .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon K illed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġ" Sequence Execution Scene ĠGUI ĠPrinter "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogic Thread Ġ= ĠThread ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogic Ġ= ĠSequence Logic ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSequence Mode (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig File Ġ= ĠFile ( filename ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart At In Millis Ġ= Ġstart Period ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ= ĠBufferedReader ( InputStream Reader ( Pip ed InputStream ( input ))), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ= Ġstream , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= Ġstream , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Console Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogic . exec () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace ( stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġ" Sequence Execution Scene ĠLogic ĠBridge "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Input Value () ĊĊĠĠĠĠĠĠĠ Ġoutput . height Property (). addListener Ġ{ Ġobservable , ĠoldValue , ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Pane . v value Ġ= Ġ 1 . 0 Ġ// Ġauto - scroll ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Args ( filename : ĠString , Ġstart Period : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . filename Ġ= Ġfilename ĊĠĠĠĠĠĠĠ Ġthis . start Period Ġ= Ġstart Period ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprintln In Gui ( line : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoutput . text Ġ+= Ġline Ġ+ ĠSystem . line Separator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġstream . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġfun Ġon Enter Input ( action Event : ĠAction Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsend Command () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġfun ĠonClick Kill Button ( action Event : ĠAction Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogic Thread . interrupt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Input ted ( key Event : ĠKeyEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Input Value () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Input Value () Ġ{ ĊĠĠĠĠĠĠĠ Ġsend Button . is Disable Ġ= Ġinput Field . text . isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick Send Button ( action Event : ĠAction Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsend Command () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Command () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcmd Ġ= Ġinput Field . text ĊĠĠĠĠĠĠĠ Ġinput Field . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġstream . println ( cmd ) ĊĠĠĠĠĠĠĠ Ġwriter . println ( cmd ) ĊĠĠĠĠĠĠĠ Ġwriter . flush () ĊĠĠĠĠĠĠĠ Ġcheck Input Value () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon K illed () Ġ{ ĊĠĠĠĠĠĠĠ Ġsend Button . is Disable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinput Field . is Disable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġkill Button . is Disable Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ