/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . android . tools . idea . app inspection . inspect ors . network . view . details Ċ Ċ import Ġcom . android . tools . adt ui . Legend Component Ċ import Ġcom . android . tools . adt ui . Legend Config Ċ import Ġcom . android . tools . adt ui . Tab ular Layout Ċ import Ġcom . android . tools . adt ui . Tree Walker Ċ import Ġcom . android . tools . adt ui . model . Range Ċ import Ġcom . android . tools . adt ui . model . legend . Fixed Legend Ċ import Ġcom . android . tools . adt ui . model . legend . Legend ComponentModel Ċ import Ġcom . android . tools . adt ui . std ui . ContentType Ċ import Ġcom . android . tools . idea . app inspection . inspect ors . network . model . http data . Http Data Ċ import Ġcom . android . tools . idea . app inspection . inspect ors . network . model . http data . Http Data . Companion . getUrl Name Ċ import Ġcom . android . tools . idea . app inspection . inspect ors . network . model . http data . NO _ STATUS _ CODE Ċ import Ġcom . android . tools . idea . app inspection . inspect ors . network . view . Connections State Chart Ċ import Ġcom . android . tools . idea . app inspection . inspect ors . network . view . Network State Ċ import Ġcom . android . tools . idea . app inspection . inspect ors . network . view . Ui Components Provider Ċ import Ġcom . android . tools . idea . app inspection . inspect ors . network . view . constants . STANDARD _ FONT Ċ import Ġcom . android . tools . inspect ors . common . ui . data viewer . Data Viewer Ċ import Ġcom . android . tools . inspect ors . common . ui . data viewer . ImageData Viewer Ċ import Ġcom . google . common . annotations . Visible ForTesting Ċ import Ġcom . intellij . ide . Browser Util Ċ import Ġcom . intellij . openapi . ui . Vertical Flow Layout Ċ import Ġcom . intellij . openapi . util . text . StringUtil Ċ import Ġcom . intellij . ui . components . JB ScrollPane Ċ import Ġcom . intellij . ui . components . labels . Bold Label Ċ import Ġcom . intellij . util . ui . JB Empty Border Ċ import Ġcom . intellij . util . ui . J BU I Ċ import Ġcom . intellij . util . ui . Platform Colors Ċ import Ġcom . intellij . util . ui . UI Util Ċ import Ġjava . awt . Cursor Ċ import Ġjava . awt . Dimension Ċ import Ġjava . awt . event . Component Adapter Ċ import Ġjava . awt . event . Component Event Ċ import Ġjava . awt . event . Mouse Adapter Ċ import Ġjava . awt . event . MouseEvent Ċ import Ġjava . awt . font . Text Attribute Ċ import Ġjava . awt . image . Buffered Image Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . function . Long Function Ċ import Ġjavax . swing . BoxLayout Ċ import Ġjavax . swing . J Component Ċ import Ġjavax . swing . JLabel Ċ import Ġjavax . swing . JPanel Ċ import Ġjavax . swing . J Separator Ċ import Ġjavax . swing . J TextArea Ċ import Ġjavax . swing . Swing Constants Ċ Ċ /** Ċ Ġ* ĠTab Ġwhich Ġshows Ġa Ġbunch Ġof Ġuseful , Ġhigh Ġlevel Ġinformation Ġfor Ġa Ġnetwork Ġrequest . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThis Ġtab Ġwill Ġbe Ġthe Ġfirst Ġone Ġshown Ġto Ġthe Ġuser Ġwhen Ġthey Ġfirst Ġselect Ġa Ġrequest . Ċ Ġ*/ Ċ class ĠOverview Tab Content ( private Ġval Ġcomponents Provider : ĠUi Components Provider ) Ġ: ĠTab Content () Ġ{ ĊĠ Ġprivate Ġlateinit Ġvar Ġcontent Panel : ĠJPanel ĊĠ Ġoverride Ġval Ġtitle Ġ= Ġ" Overview " ĊĊĠ Ġoverride Ġfun Ġcreate Component (): ĠJ Component Ġ{ ĊĠĠĠ Ġval Ġlayout : ĠTab ular Layout Ġ= ĠTab ular Layout ("* "). set V Gap ( PAGE _ VG AP ) ĊĠĠĠ Ġcontent Panel Ġ= ĠJPanel ( layout ) ĊĠĠĠ Ġcontent Panel . border Ġ= ĠJ B Empty Border ( PAGE _ VG AP , ĠH ORIZONTAL _ P ADDING , Ġ 0 , ĠH ORIZONTAL _ P ADDING ) ĊĠĠĠ Ġval Ġoverview Scroll : ĠJ B ScrollPane Ġ= Ġcreate Vertical ScrollPane ( content Panel ) ĊĠĠĠ Ġoverview Scroll . vertical ScrollBar . unit Increment Ġ= ĠSC ROLL _ UNIT ĊĠĠĠ Ġoverview Scroll . addComponent Listener ( object Ġ: ĠComponent Adapter () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġcomponent Res ized ( e : ĠComponent Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlayout . set Row S izing ( ĊĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠ ĠTab ular Layout . S izing Rule ( Tab ular Layout . S izing Rule . Type . FIXED , Ġ( overview Scroll . viewport . height Ġ* Ġ 0 . 4 f ). toInt ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlayout . layout Container ( content Panel ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġreturn Ġoverview Scroll ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpopulate For ( data : ĠHttp Data ?) Ġ{ ĊĠĠĠ Ġcontent Panel . removeAll () ĊĠĠĠ Ġif Ġ( data Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġval ĠmimeType Ġ= Ġdata . response Header . contentType . mime Type ĊĠĠĠ Ġval Ġpayload Viewer Ġ= Ġcomponents Provider . create Data Viewer ( ĊĠĠĠĠĠ Ġdata . response Payload . toByteArray (), ĠContentType . from MimeType ( mime Type ), ĊĠĠĠĠĠ ĠData Viewer . Style . PRE TTY ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġresponse Payload Component : ĠJ Component Ġ= Ġpayload Viewer . component ĊĠĠĠ Ġresponse Payload Component . name Ġ= ĠID _ RESPONSE _ PAYLOAD _ VIEW ER ĊĠĠĠ Ġcontent Panel . add ( response Payload Component , ĠTab ular Layout . Constraint ( 0 , Ġ 0 )) ĊĠĠĠ Ġval Ġimage Ġ= Ġif Ġ( payload Viewer Ġis ĠImage Data Viewer ) Ġpayload Viewer . image Ġelse Ġnull ĊĠĠĠ Ġcontent Panel . add ( create Fields ( data , Ġimage ), ĠTab ular Layout . Constraint ( 1 , Ġ 0 )) ĊĠ Ġ} ĊĊĠ Ġ@ Visible ForTesting ĊĠ Ġfun Ġfind Response Payload Viewer (): ĠJ Component ? Ġ{ ĊĠĠĠ Ġreturn Ġfind Component With Unique Name ( content Panel , ĠID _ RESPONSE _ PAYLOAD _ VIEW ER ) ĊĠ Ġ} ĊĊĠ Ġ@ Visible ForTesting ĊĠ Ġfun Ġfind ContentType Value (): ĠJLabel ? Ġ{ ĊĠĠĠ Ġreturn Ġfind Component With Unique Name ( content Panel , ĠID _ CONTENT _ TYPE ) Ġas ĠJLabel ? ĊĠ Ġ} ĊĊĠ Ġ@ Visible ForTesting ĊĠ Ġfun Ġfind Size Value (): ĠJLabel ? Ġ{ ĊĠĠĠ Ġreturn Ġfind Component With Unique Name ( content Panel , ĠID _ SIZE ) Ġas ĠJLabel ? ĊĠ Ġ} ĊĊĠ Ġ@ Visible ForTesting ĊĠ Ġfun Ġfind Url Value (): ĠJ TextArea ? Ġ{ ĊĠĠĠ Ġreturn Ġfind Component With Unique Name ( content Panel , ĠID _ URL ) Ġas ĠJ TextArea ? ĊĠ Ġ} ĊĊĠ Ġ@ Visible ForTesting ĊĠ Ġfun Ġfind Timing Bar (): ĠJ Component ? Ġ{ ĊĠĠĠ Ġreturn Ġfind Component With Unique Name ( content Panel , ĠID _ TIM ING ) ĊĠ Ġ} ĊĊĠ Ġ@ Visible ForTesting ĊĠ Ġfun Ġfind Initi ating Thread Value (): ĠJLabel ? Ġ{ ĊĠĠĠ Ġreturn Ġfind Component With Unique Name ( content Panel , ĠID _ INIT I ATING _ THREAD ) Ġas ĠJLabel ? ĊĠ Ġ} ĊĊĠ Ġ@ Visible ForTesting ĊĠ Ġfun Ġfind Other Threads Value (): ĠJLabel ? Ġ{ ĊĠĠĠ Ġreturn Ġfind Component With Unique Name ( content Panel , ĠID _ OTHER _ THREADS ) Ġas ĠJLabel ? ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThis Ġis Ġa Ġlabel Ġwith Ġbold Ġfont Ġand Ġdoes Ġnot Ġwrap . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġclass ĠNo Wrap Bold Label ( text : ĠString ) Ġ: ĠB old Label ("< no br >$ text </ no br >") ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThis Ġis Ġa Ġhyper link Ġwhich Ġwill Ġbreak Ġand Ġwrap Ġwhen Ġit Ġhits Ġthe Ġright Ġborder Ġof Ġits Ġcontainer . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġclass ĠWr apped Hyper link ( url : ĠString ) Ġ: ĠJ TextArea ( url ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġline Wrap Ġ= Ġtrue ĊĠĠĠĠĠ Ġis Editable Ġ= Ġfalse ĊĠĠĠĠĠ Ġbackground Ġ= ĠUI Util . getLabel Background () ĊĠĠĠĠĠ Ġfont Ġ= ĠST AND ARD _ FONT . derive Font ( ĊĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠ ĠText Attribute . FO REG ROUND Ġto ĠPlatform Colors . BLUE , ĊĠĠĠĠĠĠĠĠĠ ĠText Attribute . BACKGROUND Ġto ĠUI Util . getLabel Background () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġval Ġmouse Adapter Ġ= Ġget Mouse Adapter ( url ) ĊĠĠĠĠĠ Ġadd Mouse Listener ( mouse Adapter ) ĊĠĠĠĠĠ Ġadd Mouse Motion Listener ( mouse Adapter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Mouse Adapter ( url : ĠString ): ĠMouse Adapter Ġ{ ĊĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠMouse Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Entered ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġmouse Moved ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Exit ed ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= ĠCursor . getDefault Cursor () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Clicked ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Mouse Over Text ( e )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBrowser Util . browse ( url ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Moved ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= Ġif Ġ( is Mouse Over Text ( e )) ĠCursor . get Pre defined Cursor ( Cursor . HAND _ CURSOR ) Ġelse ĠCursor . getDefault Cursor () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġis Mouse Over Text ( e : ĠMouseEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġview To Model 2 D ( e . point ) Ġ< Ġdocument . length ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTIME _ FORMAT TER : ĠLong Function < String > Ġ= ĠLong Function < String > Ġ{ Ġtime : ĠLong Ġ-> ĊĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġ 0 ) ĠString Util . format Duration ( ĊĠĠĠĠĠĠĠ ĠTimeUnit . MICRO SECONDS . to Millis ( time ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġelse Ġ"*" ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġconst Ġval ĠID _ CONTENT _ TYPE Ġ= Ġ" CONTENT _ TYPE " ĊĠĠĠ Ġprivate Ġconst Ġval ĠID _ SIZE Ġ= Ġ" SIZE " ĊĠĠĠ Ġprivate Ġconst Ġval ĠID _ URL Ġ= Ġ" URL " ĊĠĠĠ Ġprivate Ġconst Ġval ĠID _ TIM ING Ġ= Ġ" TIM ING " ĊĠĠĠ Ġprivate Ġconst Ġval ĠID _ INIT I ATING _ THREAD Ġ= Ġ" INIT I ATING _ THREAD " ĊĠĠĠ Ġprivate Ġconst Ġval ĠID _ OTHER _ THREADS Ġ= Ġ" OTHER _ THREADS " ĊĠĠĠ Ġprivate Ġconst Ġval ĠID _ RESPONSE _ PAYLOAD _ VIEW ER Ġ= Ġ" RESPONSE _ PAYLOAD _ VIEW ER " ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Fields ( http Data : ĠHttp Data , Ġimage : ĠBufferedImage ?): ĠJ Component Ġ{ ĊĠĠĠĠĠ Ġval Ġmy Fields Panel Ġ= ĠJPanel ( Tab ular Layout (" Fit - , 4 0 px ,* "). set V Gap ( SECTION _ VG AP )) ĊĊĠĠĠĠĠ Ġvar Ġrow Ġ= Ġ 0 ĊĠĠĠĠĠ Ġmy Fields Panel . add ( No Wrap Bold Label (" Request "), ĠTab ular Layout . Constraint ( row , Ġ 0 )) ĊĠĠĠĠĠ Ġmy Fields Panel . add ( JLabel ( getUrl Name ( http Data . url )), ĠTab ular Layout . Constraint ( row , Ġ 2 )) ĊĠĠĠĠĠ Ġrow ++ ĊĠĠĠĠĠ Ġmy Fields Panel . add ( No Wrap Bold Label (" Method "), ĠTab ular Layout . Constraint ( row , Ġ 0 )) ĊĠĠĠĠĠ Ġmy Fields Panel . add ( JLabel ( http Data . method ), ĠTab ular Layout . Constraint ( row , Ġ 2 )) ĊĊĠĠĠĠĠ Ġval Ġresponse Header Ġ= Ġhttp Data . response Header ĊĠĠĠĠĠ Ġif Ġ( response Header . statusCode Ġ!= ĠNO _ STATUS _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrow ++ ĊĠĠĠĠĠĠĠ Ġmy Fields Panel . add ( No Wrap Bold Label (" Status "), ĠTab ular Layout . Constraint ( row , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġval ĠstatusCode Ġ= ĠJLabel ( java . lang . String . valueOf ( response Header . statusCode )) ĊĠĠĠĠĠĠĠ Ġmy Fields Panel . add ( statusCode , ĠTab ular Layout . Constraint ( row , Ġ 2 )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ( image Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrow ++ ĊĠĠĠĠĠĠĠ Ġmy Fields Panel . add ( No Wrap Bold Label (" Dimension "), ĠTab ular Layout . Constraint ( row , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġdimension Ġ= ĠJLabel ( String . format ("% d Ġx Ġ% d ", Ġimage . width , Ġimage . height )) ĊĠĠĠĠĠĠĠ Ġmy Fields Panel . add ( dimension , ĠTab ular Layout . Constraint ( row , Ġ 2 )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ(! response Header . contentType . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrow ++ ĊĠĠĠĠĠĠĠ Ġmy Fields Panel . add ( No Wrap Bold Label (" Content Ġtype "), ĠTab ular Layout . Constraint ( row , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġval ĠcontentType Label Ġ= ĠJLabel ( response Header . contentType . mime Type ) ĊĠĠĠĠĠĠĠ ĠcontentType Label . name Ġ= ĠID _ CONTENT _ TYPE ĊĠĠĠĠĠĠĠ Ġmy Fields Panel . add ( contentType Label , ĠTab ular Layout . Constraint ( row , Ġ 2 )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġcontent Length Ġ= Ġresponse Header . content Length ĊĠĠĠĠĠ Ġif Ġ( content Length Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġrow ++ ĊĠĠĠĠĠĠĠĠĠ Ġmy Fields Panel . add ( No Wrap Bold Label (" Size "), ĠTab ular Layout . Constraint ( row , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Length Label Ġ= ĠJLabel ( StringUtil . format FileSize ( content Length . to Long ())) ĊĠĠĠĠĠĠĠĠĠ Ġcontent Length Label . name Ġ= ĠID _ SIZE ĊĠĠĠĠĠĠĠĠĠ Ġmy Fields Panel . add ( content Length Label , ĠTab ular Layout . Constraint ( row , Ġ 2 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( ignored : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġrow ++ ĊĠĠĠĠĠ Ġmy Fields Panel . add ( No Wrap Bold Label (" Initi ating Ġthread "), ĠTab ular Layout . Constraint ( row , Ġ 0 )) ĊĠĠĠĠĠ Ġval Ġiniti ating Thread Label Ġ= ĠJLabel ( http Data . java Threads [ 0 ]. name ) ĊĠĠĠĠĠ Ġiniti ating Thread Label . name Ġ= ĠID _ INIT I ATING _ THREAD ĊĠĠĠĠĠ Ġmy Fields Panel . add ( initi ating Thread Label , ĠTab ular Layout . Constraint ( row , Ġ 2 )) ĊĠĠĠĠĠ Ġif Ġ( http Data . java Threads . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġother Threads Builder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġhttp Data . java Threads . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Threads Builder . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Threads Builder . append (", Ġ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġother Threads Builder . append ( http Data . java Threads [ i ]. name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrow ++ ĊĠĠĠĠĠĠĠ Ġmy Fields Panel . add ( No Wrap Bold Label (" Other Ġthreads "), ĠTab ular Layout . Constraint ( row , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġother Threads Label Ġ= ĠJLabel ( other Threads Builder . toString ()) ĊĠĠĠĠĠĠĠ Ġother Threads Label . name Ġ= ĠID _ OTHER _ THREADS ĊĠĠĠĠĠĠĠ Ġmy Fields Panel . add ( other Threads Label , ĠTab ular Layout . Constraint ( row , Ġ 2 )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġrow ++ ĊĠĠĠĠĠ Ġval Ġurl Label Ġ= ĠNo Wrap Bold Label (" URL ") ĊĠĠĠĠĠ Ġurl Label . vertical Alignment Ġ= ĠSw ing Constants . TOP ĊĠĠĠĠĠ Ġmy Fields Panel . add ( url Label , ĠTab ular Layout . Constraint ( row , Ġ 0 )) ĊĠĠĠĠĠ Ġval Ġhyper link Ġ= ĠWr apped Hyper link ( http Data . url ) ĊĠĠĠĠĠ Ġhyper link . name Ġ= ĠID _ URL ĊĠĠĠĠĠ Ġmy Fields Panel . add ( hyperlink , ĠTab ular Layout . Constraint ( row , Ġ 2 )) ĊĊĠĠĠĠĠ Ġrow ++ ĊĠĠĠĠĠ Ġval Ġseparator Ġ= ĠJ Separator () ĊĠĠĠĠĠ Ġseparator . minimum Size Ġ= Ġseparator . preferred Size ĊĠĠĠĠĠ Ġval Ġgap Ġ= ĠPAGE _ VG AP Ġ- ĠSECTION _ VG AP Ġ- Ġseparator . preferred Size . getHeight (). toInt () Ġ/ Ġ 2 ĊĠĠĠĠĠ Ġval Ġseparator Container Ġ= ĠJPanel ( Vertical Flow Layout ( 0 , Ġgap )) ĊĠĠĠĠĠ Ġseparator Container . add ( separator ) ĊĠĠĠĠĠ Ġmy Fields Panel . add ( separator Container , ĠTab ular Layout . Constraint ( row , Ġ 0 , Ġ 1 , Ġ 3 )) ĊĊĠĠĠĠĠ Ġrow ++ ĊĠĠĠĠĠ Ġval Ġtiming Label Ġ= ĠNo Wrap Bold Label (" Timing ") ĊĠĠĠĠĠ Ġtiming Label . vertical Alignment Ġ= ĠSw ing Constants . TOP ĊĠĠĠĠĠ Ġmy Fields Panel . add ( timing Label , ĠTab ular Layout . Constraint ( row , Ġ 0 )) ĊĠĠĠĠĠ Ġval Ġtiming Bar : ĠJ Component Ġ= Ġcreate Timing Bar ( http Data ) ĊĠĠĠĠĠ Ġtiming Bar . name Ġ= ĠID _ TIM ING ĊĠĠĠĠĠ Ġmy Fields Panel . add ( timing Bar , ĠTab ular Layout . Constraint ( row , Ġ 2 )) ĊĠĠĠĠĠ ĠTree Walker ( my Fields Panel ). desc endants (). forEach (:: adjust Font ) ĊĠĠĠĠĠ Ġreturn Ġmy Fields Panel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Timing Bar ( http Data : ĠHttp Data ): ĠJ Component Ġ{ ĊĠĠĠĠĠ Ġval Ġpanel Ġ= ĠJPanel () ĊĠĠĠĠĠ Ġpanel . layout Ġ= ĠBox Layout ( panel , ĠBox Layout . Y _ AXIS ) ĊĠĠĠĠĠ Ġval Ġrange Ġ= ĠRange ( ĊĠĠĠĠĠĠĠ Ġhttp Data . request StartTime Us . toDouble (), ĊĠĠĠĠĠĠĠ Ġ( if Ġ( http Data . connection EndTime Us Ġ> Ġ 0 ) Ġhttp Data . connection EndTime Us Ġelse Ġhttp Data . request StartTime Us Ġ+ Ġ 1 ). toDouble () ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġval Ġconnections Chart Ġ= ĠConnection s State Chart ( http Data , Ġrange ) ĊĠĠĠĠĠ Ġconnections Chart . component . minimum Size Ġ= ĠDimension ( 0 , ĠJ BU I . scale ( 2 8 )) ĊĠĠĠĠĠ Ġconnections Chart . set Height Gap ( 0 f ) ĊĠĠĠĠĠ Ġpanel . add ( connections Chart . component ) ĊĠĠĠĠĠ Ġvar Ġsent Time : ĠLong Ġ= Ġ- 1 ĊĠĠĠĠĠ Ġvar Ġreceived Time : ĠLong Ġ= Ġ- 1 ĊĠĠĠĠĠ Ġif Ġ( http Data . response StartTime Us Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsent Time Ġ= Ġhttp Data . response StartTime Us Ġ- Ġhttp Data . request StartTime Us ĊĠĠĠĠĠĠĠ Ġreceived Time Ġ= Ġhttp Data . response Complete Time Us Ġ- Ġhttp Data . response StartTime Us ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġif Ġ( http Data . connection EndTime Us Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsent Time Ġ= Ġhttp Data . connection EndTime Us Ġ- Ġhttp Data . request StartTime Us ĊĠĠĠĠĠĠĠ Ġreceived Time Ġ= Ġ 0 ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġsent Legend Ġ= ĠFixed Legend (" Sent ", ĠTIME _ FORMAT TER . apply ( sent Time )) ĊĠĠĠĠĠ Ġval Ġreceived Legend Ġ= ĠFixed Legend (" Received ", ĠTIME _ FORMAT TER . apply ( received Time )) ĊĠĠĠĠĠ Ġval Ġlegend Model Ġ= ĠLegend ComponentModel () ĊĠĠĠĠĠ Ġlegend Model . add ( sent Legend ) ĊĠĠĠĠĠ Ġlegend Model . add ( received Legend ) ĊĊĠĠĠĠĠ Ġ// ĠTODO : ĠAdd Ġwaiting Ġtime Ġin Ġ( currently Ġhidden Ġbecause Ġit 's Ġalways Ġ 0 ) ĊĠĠĠĠĠ Ġval Ġlegend : ĠLegend Component Ġ= ĠLegend Component . Builder ( legend Model ). set Left Padding ( 0 ). set Vertical Padding ( J BU I . scale ( 8 )). build () ĊĠĠĠĠĠ Ġlegend . font Ġ= ĠST AND ARD _ FONT ĊĠĠĠĠĠ Ġlegend . configure ( ĊĠĠĠĠĠĠĠ Ġsent Legend , ĊĠĠĠĠĠĠĠ ĠLegend Config ( Legend Config . IconType . BOX , Ġconnections Chart . colors . getColor ( Network State . SEND ING )) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġlegend . configure ( ĊĠĠĠĠĠĠĠ Ġreceived Legend , ĊĠĠĠĠĠĠĠ ĠLegend Config ( Legend Config . IconType . BOX , Ġconnections Chart . colors . getColor ( Network State . RECE IV ING )) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġpanel . add ( legend ) ĊĠĠĠĠĠ Ġreturn Ġpanel ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }