package Ġapplication . controller . dialogs . rule Ċ Ċ import Ġapplication . controller . dialogs . rule . h rot .* Ċ import Ġapplication . controller . dialogs . rule . isot ropic .* Ċ import Ġapplication . controller . dialogs . rule . misc .* Ċ import Ġapplication . controller . dialogs . rule . rule loader . Rule Loader Dialog Ċ import Ġapplication . model . Coordinate Ċ import Ġapplication . model . rules . Rule Family Ċ import Ġjavafx . beans . value . Observable Value Ċ import Ġjavafx . event . EventHandler Ċ import Ġjavafx . geometry . Pos Ċ import Ġjavafx . scene . control .* Ċ import Ġjavafx . scene . input . KeyCode Ċ import Ġjavafx . scene . input . KeyEvent Ċ import Ġjavafx . scene . layout . Grid Pane Ċ import Ġjavafx . scene . layout . H Box Ċ import Ġjavafx . scene . layout . Region Ċ import Ġjava . lang . Boolean Ċ import Ġjava . util . logging . Level Ċ import Ġjava . util . logging . Log Manager Ċ import Ġjava . util . logging . Logger Ċ import Ġkotlin . Any Ċ import Ġkotlin . Exception Ċ import Ġkotlin . IllegalArgumentException Ċ import Ġkotlin . String Ċ import Ġkotlin . array Of Ċ Ċ class ĠRule Dialog Ġ@ Jvm Over loads Ġconstructor ( prompt Text : ĠString ? Ġ= Ġ" Enter ĠRule string ") Ġ: ĠDialog < Any ?> () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġchosen Rule Family : ĠRule Family ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠControls ĊĠĠĠ Ġprivate Ġval Ġgrid : ĠGrid Pane ĊĠĠĠ Ġprivate Ġval Ġconfirm Rule Button : ĠButton ĊĠĠĠ Ġprivate Ġval Ġrule string Field : ĠTextField ĊĠĠĠ Ġprivate Ġval Ġrule Family Combo box : ĠCombo Box < String > ĊĊĠĠĠ Ġ// ĠArray Ġto Ġstore Ġrule Ġwidgets ĊĠĠĠ Ġprivate Ġval Ġrule Widgets Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ ĠH RO TD ialog (), ĠH RO TH istory Dialog (), ĊĠĠĠĠĠĠĠ ĠH RO TS ymb ios is Dialog (), ĠH ROT Dead ly En emies Dialog (), ĠH ROT Gener ations Dialog (), ĊĠĠĠĠĠĠĠ ĠH ROT Extended Gener ations Dialog (), ĠInteger H RO TD ialog (), ĠDef icient H RO TD ialog (), ĊĠĠĠĠĠĠĠ ĠH ROT Re generating Gener ations Dialog (), ĠH ROT BS FK L Dialog (), ĠMult ist ate Cyc lic H RO TD ialog (), ĊĠĠĠĠĠĠĠ ĠIN TD ialog (), ĠIN TH istory Dialog (), ĠINT En er get ic Dialog (), ĠINT Gener ations Dialog (), ĊĠĠĠĠĠĠĠ ĠDef icient INT Dialog (), ĠE uclidean Dialog (), ĠOne Dimension al Dialog (), ĠTur mit es Dialog (), ĊĠĠĠĠĠĠĠ ĠM arg ol us Dialog (), ĠAltern ating Dialog (), ĠRule Loader Dialog () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// ĠOnly Ġreturn Ġif Ġuser Ġhits Ġconfirm Ġrule ĊĠĠĠ Ġvar Ġrule : ĠRule Family ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( super . getResult () Ġ=== ĠBoolean . TRUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchosen Rule Family Ġ// ĠOnly Ġreturn Ġif Ġuser Ġhits Ġconfirm Ġrule ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġset ( rule ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfound Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( widget Ġin Ġrule Widgets ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( regex Ġin Ġwidget . rule Family !!. regex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rule !!. rule string . split (": "). to Typed Array ()[ 0 ]. matches ( Regex ( regex ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠComp let ely Ġbreak Ġout Ġof Ġthe Ġloop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrule string Field . text Ġ= Ġrule !!. rule string ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidget . rule Family Ġ= Ġrule ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Rule Family ( widget ) Ġ// ĠChange Ġto Ġthe Ġwidget Ġwhose Ġregex Ġmatches ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMove Ġthe Ġinitial Ġcoordinate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rule . bounded Grid Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrule . bounded Grid . initial Coordinate Ġ= ĠCoordinate ( 1 8 0 0 , Ġ 1 8 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSet ĠTitle s ĊĠĠĠĠĠĠĠ Ġsuper . setTitle (" Set ĠRule ") ĊĠĠĠĠĠĠĠ Ġsuper . setResizable ( true ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġcontrols ĊĠĠĠĠĠĠĠ Ġgrid Ġ= ĠGrid Pane () ĊĠĠĠĠĠĠĠ Ġgrid . alignment Ġ= ĠPos . CENTER ĊĠĠĠĠĠĠĠ Ġgrid . h gap Ġ= Ġ 5 . 0 ĊĠĠĠĠĠĠĠ Ġgrid . vg ap Ġ= Ġ 5 . 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠH Box Ġto Ġcontain Ġcombo box Ġand Ġbutton ĊĠĠĠĠĠĠĠ Ġval Ġh Box Ġ= ĠH Box () ĊĠĠĠĠĠĠĠ Ġh Box . spacing Ġ= Ġ 5 . 0 ĊĠĠĠĠĠĠĠ Ġgrid . add ( h Box , Ġ 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCombo box Ġto ĠChoose ĠRule ĠFamily ĊĠĠĠĠĠĠĠ Ġrule Family Combo box Ġ= ĠCombo Box < String >() ĊĠĠĠĠĠĠĠ Ġrule Family Combo box . on Action Ġ= ĠEventHandler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Rule Family ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrule Widgets [ rule Family Combo box . items . indexOf ( rule Family Combo box . value )] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġh Box . children . add ( rule Family Combo box ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠText box Ġfor Ġrule string ĊĠĠĠĠĠĠĠ Ġrule string Field Ġ= ĠTextField () ĊĠĠĠĠĠĠĠ Ġrule string Field . prompt Text Ġ= Ġprompt Text ĊĊĠĠĠĠĠĠĠ Ġ// ĠListen Ġfor Ġchanges Ġto Ġthe Ġtext Ġand Ġupdate Ġthe Ġcombo box ĊĠĠĠĠĠĠĠ Ġrule string Field . text Property (). addListener Ġ{ Ġ_: ĠObservable Value < out ĠString >, Ġ_: ĠString , Ġ_: ĠString Ġ-> Ġrule string Field Changed () Ġ} ĊĠĠĠĠĠĠĠ Ġrule string Field . on Key Pressed Ġ= ĠEventHandler Ġ{ Ġevent : ĠKeyEvent Ġ-> ĠĠ Ġ// ĠEnter Ġas Ġa Ġsubstitute Ġfor Ġokay ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . code Ġ== ĠKeyCode . ENTER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm Rule () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgrid . add ( rule string Field , Ġ 0 , Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠButton Ġthe Ġconfirm Ġthe Ġrule string ĊĠĠĠĠĠĠĠ Ġconfirm Rule Button Ġ= ĠButton (" Confirm ĠRule ") ĊĠĠĠĠĠĠĠ Ġconfirm Rule Button . on Action Ġ= ĠEventHandler Ġ{ Ġconfirm Rule () Ġ} ĊĠĠĠĠĠĠĠ Ġgrid . add ( confirm Rule Button , Ġ 0 , Ġ 3 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġrule Ġfamily Ġnames Ġ& Ġconfigure Ġthe Ġbutton Ġcorrectly ĊĠĠĠĠĠĠĠ Ġrule Family Combo box . setValue ( rule Widgets [ 0 ]. toString ()) ĊĠĠĠĠĠĠĠ Ġfor Ġ( widget Ġin Ġrule Widgets ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrule Family Combo box . items . add ( widget . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠButton Ġto Ġdisplay Ġinformation Ġabout Ġthe Ġrule space ĊĠĠĠĠĠĠĠ Ġval Ġinfo Button Ġ= ĠButton (" ?") ĊĠĠĠĠĠĠĠ Ġinfo Button . on Action Ġ= ĠEventHandler Ġ{ Ġshow Rule Family Description () Ġ} ĊĠĠĠĠĠĠĠ Ġh Box . children . add ( info Button ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAllows Ġclosing Ġwith Ġclose Ġbutton ĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġsuper . get Dialog Pane (). scene . window ĊĠĠĠĠĠĠĠ Ġwindow . onClose Request Ġ= ĠEventHandler Ġ{ Ġwindow . hide () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġrule Ġwidget Ġto Ġthe Ġgrid ĊĠĠĠĠĠĠĠ Ġgrid . add ( rule Widgets [ 0 ], Ġ 0 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġsuper . get Dialog Pane (). content Ġ= Ġgrid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfirm Rule () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġcurrently Ġselected Ġrule Ġwidget ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġrule Family Combo box . items . indexOf ( rule Family Combo box . value ) ĊĠĠĠĠĠĠĠ Ġval Ġrule Widget Ġ= Ġrule Widgets [ index ] ĊĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġrule Ġin Ġthe Ġrule Ġwidget ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrule Widget . update Rule ( rule string Field . text ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Manager . getLog Manager (). getLogger ( Logger . GLOBAL _ LOGGER _ NAME ). log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLevel . WARNING , Ġexception . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalert Ġ= ĠAlert ( Alert . Alert Type . ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . title Ġ= Ġ" Error !" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . header Text Ġ= Ġ" This Ġrule string Ġis Ġinvalid !" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . content Text Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ exception . message } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIf Ġyou Ġsuspect Ġthis Ġis Ġa Ġbug , Ġplease Ġreport Ġit ! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . show And Wait () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Manager . getLog Manager (). getLogger ( Logger . GLOBAL _ LOGGER _ NAME ). log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLevel . WARNING , Ġexception . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . printStackTrace () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalert Ġ= ĠAlert ( Alert . Alert Type . ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . title Ġ= Ġ" Error !" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . header Text Ġ= Ġ" An Ġerror Ġoccured !" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . content Text Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ exception . message } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIf Ġyou Ġsuspect Ġthis Ġis Ġa Ġbug , Ġplease Ġreport Ġit ! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . show And Wait () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġchosen Rule Family Ġ= Ġrule Widget . rule Family ĊĠĠĠĠĠĠĠ Ġif Ġ( chosen Rule Family !!. bounded Grid Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchosen Rule Family !!. bounded Grid . initial Coordinate Ġ= ĠCoordinate ( 1 8 0 0 , Ġ 1 8 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCan on ise Ġthe Ġrule string Ġin Ġthe Ġtext Ġfield ĊĠĠĠĠĠĠĠ Ġrule string Field . text Ġ= Ġchosen Rule Family !!. rule string ĊĊĠĠĠĠĠĠĠ Ġ// ĠClose Ġthe Ġdialog ĊĠĠĠĠĠĠĠ Ġsuper . set Result ( Boolean . TRUE ) ĊĠĠĠĠĠĠĠ Ġsuper . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrule string Field Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfound Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfor Ġ( widget Ġin Ġrule Widgets ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( regex Ġin Ġwidget . rule Family !!. regex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rule string Field . text . split (": "). to Typed Array ()[ 0 ]. matches ( Regex ( regex ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠComp let ely Ġbreak Ġout Ġof Ġthe Ġloop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Rule Family ( widget ) Ġ// ĠChange Ġto Ġthe Ġwidget Ġwho Ġregex Ġmatches ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Rule Family ( widget : ĠRule Widget ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġcurrently Ġselected Ġrule Ġwidget ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġrule Family Combo box . items . indexOf ( rule Family Combo box . value ) ĊĠĠĠĠĠĠĠ Ġval Ġrule Widget Ġ= Ġrule Widgets [ index ] ĊĊĠĠĠĠĠĠĠ Ġ// ĠRemove Ġthe Ġcurrent Ġwidget ĊĠĠĠĠĠĠĠ Ġgrid . children . remove ( rule Widget ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġnew Ġone ĊĠĠĠĠĠĠĠ Ġgrid . add ( widget , Ġ 0 , Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġvalue Ġof Ġthe Ġcombo box ĊĠĠĠĠĠĠĠ Ġrule Family Combo box . value Ġ= Ġwidget . rule Family !!. name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Rule Family Description () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġcurrently Ġselected Ġrule Ġwidget ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġrule Family Combo box . items . indexOf ( rule Family Combo box . value ) ĊĠĠĠĠĠĠĠ Ġval Ġrule Widget Ġ= Ġrule Widgets [ index ] ĊĊĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġdescription ĊĠĠĠĠĠĠĠ Ġval Ġalert Ġ= ĠAlert ( Alert . Alert Type . INFORMATION ) ĊĠĠĠĠĠĠĠ Ġalert . title Ġ= Ġrule Widget . rule Family !!. name Ġ+ Ġ" ĠDescription " ĊĠĠĠĠĠĠĠ Ġalert . header Text Ġ= Ġ" Description Ġof Ġ" Ġ+ Ġrule Widget . rule Family !!. name ĊĠĠĠĠĠĠĠ Ġalert . content Text Ġ= Ġrule Widget . rule Family !!. description ĊĠĠĠĠĠĠĠ Ġalert . dialog Pane . min Height Ġ= ĠRegion . USE _ PRE F _ SIZE Ġ// ĠMakes Ġit Ġscale Ġto Ġthe Ġtext ĊĠĠĠĠĠĠĠ Ġalert . show And Wait () ĊĠĠĠ Ġ} Ċ }