package Ġbur p Ċ Ċ import Ġjava . awt . Border Layout Ċ import Ġjava . awt . Dimension Ċ import Ġjava . awt . event . ActionEvent Ċ import Ġjava . awt . event . ActionListener Ċ import Ġjavax . swing .* Ċ import Ġjavax . swing . Timer Ċ import Ġjavax . swing . border . Be vel Border Ċ import Ġjavax . swing . table . TableRow Sorter ĊĊ Ċ class ĠUpdate Status bar ( val Ġmessage : ĠJLabel , Ġval Ġhandler : ĠAttack Handler ): ĠActionListener Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġtimer : ĠTimer ĊĊĠĠĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAction Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( handler . has Finished () Ġ|| ĠSw ing Utilities . getWindow Ancestor ( message ) Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer . stop () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmessage . text Ġ= Ġhandler . status String () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ interface ĠOutput Handler Ġ{ ĊĠĠĠ Ġfun Ġadd ( req : ĠRequest ) Ċ } Ċ Ċ class ĠConsole Printer (): ĠOutput Handler Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġadd ( req : ĠRequest ) Ġ{ ĊĠĠĠĠĠĠĠ ĠUtils . out ( req . word ?: Ġ"") ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠRequest Table ( val Ġservice : ĠI Http Service , Ġval Ġhandler : ĠAttack Handler ): ĠJPanel (), ĠOutput Handler Ġ{ ĊĠĠĠ Ġval Ġmodel Ġ= ĠRequest TableModel () ĊĠĠĠ Ġval Ġissue Table Ġ= ĠJ Table ( model ) ĊĠĠĠ Ġval Ġrequest Editor : ĠI Message Editor ĊĠĠĠ Ġval Ġresponse Editor : ĠI Message Editor ĊĠĠĠ Ġval Ġbottom Split : ĠJ Split Pane ĊĠĠĠ Ġval Ġrequest ListView : ĠJ ScrollPane ĊĠĠĠ Ġprivate Ġval Ġcontroller Ġ= ĠMessage Editor Controller () ĊĠĠĠ Ġprivate Ġvar Ġcurrent Request : ĠRequest ? Ġ= Ġnull ĊĊĠĠĠ Ġfun ĠsetCurrent Request ( req : ĠRequest ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// println (" Setting Ġcurrent Ġrequest Ġto Ġ"+ req !!. word ) ĊĠĠĠĠĠĠĠ Ġcurrent Request Ġ= Ġreq !! ĊĠĠĠĠĠĠĠ Ġrequest Editor . setMessage ( req . getRequest As Bytes (), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġresponse Editor . setMessage ( req . getResponse As Bytes (), Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġissue Table . row Sorter Ġ= ĠTable Row Sorter ( model ) ĊĊĠĠĠĠĠĠĠ Ġissue Table . setAuto Resize Mode ( J Table . AUTO _ RE SIZE _ OFF ) ĊĠĠĠĠĠĠĠ Ġ// issue Table . getColumn Model (). getColumn ( 0 ). set Preferred Width ( 5 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġissue Table . getSelection Model (). add List Selection Listener ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġmodel . getRequest ( issue Table . getSelected Row ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetCurrent Request ( req !!. req ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġrequest ListView Ġ= ĠJ ScrollPane ( issue Table ) ĊĊĠĠĠĠĠĠĠ Ġrequest Editor Ġ= ĠUtils . callbacks . create Message Editor ( controller , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġresponse Editor Ġ= ĠUtils . callbacks . create Message Editor ( controller , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbottom Split Ġ= ĠJ Split Pane ( JS plit Pane . HORIZONTAL _ SPLIT , Ġrequest Editor . getComponent (), Ġresponse Editor . getComponent ()) ĊĠĠĠĠĠĠĠ Ġbottom Split . set Resize Weight ( 0 . 5 ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġsplit Pane Ġ= ĠJ Split Pane ( JS plit Pane . VERTICAL _ SPLIT , Ġrequest ListView , Ġbottom Split ) ĊĊĠĠĠĠĠĠĠ Ġrequest ListView . preferred Size Ġ= ĠDimension ( 1 2 8 0 , Ġ 4 0 0 ) ĊĠĠĠĠĠĠĠ Ġsplit Pane . set Divider Location ( 0 . 2 ) ĊĠĠĠĠĠĠĠ Ġsplit Pane . preferred Size Ġ= ĠDimension ( 1 2 8 0 , Ġ 8 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġthis . layout Ġ= ĠBorderLayout () ĊĠĠĠĠĠĠĠ Ġthis . add ( split Pane , ĠBorderLayout . CENTER ) ĊĊĊĠĠĠĠĠĠĠ Ġsplit Pane . resize Weight Ġ= Ġ 0 . 5 ĊĊĊĠĠĠĠĠĠĠ Ġval Ġstatus Panel Ġ= ĠJPanel () ĊĠĠĠĠĠĠĠ Ġstatus Panel . border Ġ= ĠBe vel Border ( Be vel Border . LOWER ED ) ĊĠĠĠĠĠĠĠ Ġthis . add ( status Panel , ĠBorderLayout . SO UTH ) Ġ// ĊĠĠĠĠĠĠĠ Ġstatus Panel . preferred Size Ġ= ĠDimension ( this . getWidth (), Ġ 3 0 ) ĊĠĠĠĠĠĠĠ Ġstatus Panel . layout Ġ= ĠBox Layout ( status Panel , ĠBox Layout . X _ AXIS ) ĊĠĠĠĠĠĠĠ Ġval Ġstatus Label Ġ= ĠJLabel ("") ĊĠĠĠĠĠĠĠ Ġstatus Label . setHorizontal Alignment ( Swing Constants . LEFT ) ĊĠĠĠĠĠĠĠ Ġstatus Panel . add ( status Label ) ĊĊĠĠĠĠĠĠĠ Ġval Ġupdate Status bar Ġ= ĠUpdate Status bar ( status Label , Ġhandler ) ĊĠĠĠĠĠĠĠ Ġval Ġpanel Updater Ġ= ĠTimer ( 1 0 0 0 , Ġupdate Status bar ) ĊĠĠĠĠĠĠĠ Ġupdate Status bar . timer Ġ= Ġpanel Updater ĊĠĠĠĠĠĠĠ Ġpanel Updater . start () ĊĊĠĠĠĠĠĠĠ ĠUtils . callbacks . customize Ui Component ( this ) ĊĠĠĠĠĠĠĠ ĠUtils . callbacks . customize Ui Component ( issue Table ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġadd ( req : ĠRequest ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel . add Request ( req ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠMessage Editor Controller Ġ: ĠI Message Editor Controller Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Http Service (): ĠI Http Service ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġservice Ġ// current Request . get Http Service () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Request (): ĠByteArray ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurrent Request ?. getRequest As Bytes () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Response (): ĠByteArray ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurrent Request ?. getResponse As Bytes () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } ĊĊĊ