package Ġcontroller Ċ Ċ import Ġjavafx . beans . property . Simple Integer Property Ċ import Ġjavafx . beans . property . Simple Long Property Ċ import Ġjavafx . beans . property . Simple ObjectProperty Ċ import Ġjavafx . beans . property . Simple String Property Ċ import Ġjavafx . scene . control . TableColumn Ċ import Ġjavafx . stage . FileChooser Ċ import Ġjavafx . util . Callback Ċ import Ġt orn ad of x . Controller Ċ import Ġt orn ad of x . enable Cell Editing Ċ import Ġt orn ad of x . make Editable Ċ import Ġt orn ad of x . run Later Ċ import Ġview . Main Panel View Ċ import Ġview . Row Ċ import Ġjava . sql . ResultSet Ċ import Ġjava . time . Instant Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġkotlin . collections . set ĊĊĊ Ċ val Ġdb Ġ= ĠDB () Ċ class ĠMain Panel Controller Ġ: ĠController () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġview : ĠMain Panel View Ġby Ġinject () ĊĠĠĠ Ġvar Ġlines Property Ġ= ĠSimple Integer Property ( 0 ) ĊĠĠĠ Ġvar Ġstatus To View Ġ= ĠSimple String Property ("") ĊĠĠĠ Ġvar Ġcurrent FilePath : ĠString Ġ= Ġ"" ĊĠĠĠ Ġ// late init Ġvar Ġrs : ResultSet ĊĊĠĠĠ Ġfun Ġopen Loading Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Chooser Ġ= ĠFile Chooser () ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfile Chooser . show Open Dialog ( view . current Window ) ĊĠĠĠĠĠĠĠ Ġif Ġ( file Ġ!= Ġnull ) Ġcurrent FilePath Ġ= Ġfile . path ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Query To TableView ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġquery Ġ= Ġtext ĊĠĠĠĠĠĠĠ Ġif Ġ( query . toUpperCase (). substring ( 0 .. 2 ) Ġ== Ġ" SE Ġ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . run Command ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġenv Ġ= Ġquery . toUpperCase (). substring ( 3 .. 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Later Ġ{ Ġstatus To View . value Ġ= Ġ" Environment Ġis Ġset Ġto Ġ$ env ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġheader Ġ= ĠlistOf < String >() ĊĠĠĠĠĠĠĠ Ġprintln ( DateTime Formatter . ISO _ INST ANT . format ( Instant . now ())) ĊĠĠĠĠĠĠĠ Ġif Ġ(! Ġquery . toUpperCase (). contains (" LIMIT ")) Ġquery Ġ+= Ġ" Ġlimit Ġ${ db . numberOf Rows }" ĊĠĠĠĠĠĠĠ Ġval Ġrs Ġ= Ġdb . fetch Rows ( query ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( rs . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lines Property . value Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmapping Ġ= Ġmutable Map Of < String , ĠString >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġheaders ( rs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( heading 1 , Ġheading 2 ) Ġin Ġheader Ġzip Ġheader ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapping [ heading 1 ] Ġ= Ġheading 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . table . items . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . table . columns . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . table . columns . addAll ( get Columns ( mapping )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines Property . value ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmapping Ġ= Ġmutable Map Of < String , ĠString >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( heading , Ġline Element ) Ġin Ġheader Ġzip Ġelements ( rs )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapping [ heading ] Ġ= Ġline Element ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopulate ToTable ( mapping ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus To View . value Ġ= Ġlines Property . value . toString () Ġ+ Ġ" Ġrows Ġretrieved ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( DateTime Formatter . ISO _ INST ANT . format ( Instant . now ())) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Later Ġ{ Ġ Ġlines Property . value Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġstatus To View . value Ġ= Ġ"" } ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġheaders ( rs : ĠResultSet ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. rs . metaData . column Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ+= Ġrs . metaData . get ColumnName ( i ) ĊĠĠĠĠĠĠĠ Ġreturn Ġheader ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġelements ( rs : ĠResultSet ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcolumns Ġ= ĠlistOf < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. rs . metaData . column Count ) Ġcolumns Ġ+= Ġrs . getString ( rs . metaData . get ColumnName ( i )) ĊĠĠĠĠĠĠĠ Ġreturn Ġcolumns ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpopulate ToTable ( mapping : ĠMutable Map < String , ĠString >) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . table . items . addAll ( mapping )// add Ġcolumn Ġvalues ĊĠĠĠĠĠĠĠ Ġview . table . enable Cell Editing () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Columns ( mapping : ĠMutable Map < String , ĠString >): ĠArrayList < TableColumn < Row , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= ĠArrayList < TableColumn < Row , ĠString >>() ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= Ġmapping . keys ĊĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin Ġkeys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumn Ġ= ĠTable Column < Row , ĠString >( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn . make Editable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn . cell Value Factory Ġ= ĠCallback Ġ{ Ġparam Ġ-> ĠSimple ObjectProperty ( param . value [ key ]) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns Ġ+= Ġcolumn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcolumns ĊĠĠĠ Ġ} Ċ } ĊĊĊ