// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġorg . jetbrains . plugins . github . authentication . ui Ċ Ċ import Ġcom . intellij . icons . All Icons Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . action System .* Ċ import Ġcom . intellij . openapi . action System . ex . Action Util . invoke Action Ċ import Ġcom . intellij . openapi . application . Modal ity State Ċ import Ġcom . intellij . openapi . keymap . Key map Util Ċ import Ġcom . intellij . openapi . progress . Progress Indicator Ċ import Ġcom . intellij . openapi . progress . Task Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . Dis poser Ċ import Ġcom . intellij . ui . Collection ListModel Ċ import Ġcom . intellij . ui . Simple Text Attributes Ċ import Ġcom . intellij . ui . Toolbar Decorator Ċ import Ġcom . intellij . ui . awt . Relative Point Ċ import Ġcom . intellij . ui . awt . Relative Point . get Center Of Ċ import Ġcom . intellij . ui . components . JB List Ċ import Ġcom . intellij . ui . components . labels . Link Label Ċ import Ġcom . intellij . ui . components . labels . Link Listener Ċ import Ġcom . intellij . util . progress . Progress Visibility Manager Ċ import Ġcom . intellij . util . ui .* Ċ import Ġcom . intellij . util . ui . components . Border LayoutPanel Ċ import Ġorg . jetbrains . plugins . github . api . Github ApiRequest Executor Ċ import Ġorg . jetbrains . plugins . github . api . Github Server Path Ċ import Ġorg . jetbrains . plugins . github . api . data . Github Authenticated User Ċ import Ġorg . jetbrains . plugins . github . authentication . accounts . Github Account Ċ import Ġorg . jetbrains . plugins . github . authentication . accounts . Github Account Manager Ċ import Ġorg . jetbrains . plugins . github . authentication . util . GH Security Util Ċ import Ġorg . jetbrains . plugins . github . exceptions . Github Authentication Exception Ċ import Ġorg . jetbrains . plugins . github . i 1 8 n . Github Bundle Ċ import Ġorg . jetbrains . plugins . github . pull request . avatars . Caching Github Avatar Icons Provider Ċ import Ġorg . jetbrains . plugins . github . pull request . avatars . GH Avatar Icons Provider Ċ import Ġorg . jetbrains . plugins . github . ui . util . J List Hover ed Row Material iser Ċ import Ġorg . jetbrains . plugins . github . util . Caching Github User Avatar Loader Ċ import Ġorg . jetbrains . plugins . github . util . Github Image Res izer Ċ import Ġorg . jetbrains . plugins . github . util . Github UI Util Ċ import Ġjava . awt .* Ċ import Ġjavax . swing .* Ċ Ċ private Ġval Ġaction Manager : ĠAction Manager Ġget () Ġ= ĠAction Manager . getInstance () Ċ Ċ internal Ġclass ĠGH Accounts Panel ( ĊĠ Ġprivate Ġval Ġproject : ĠProject , ĊĠ Ġprivate Ġval Ġexecutor Factory : ĠGithub ApiRequest Executor . Factory , ĊĠ Ġprivate Ġval Ġavatar Loader : ĠC aching Github User Avatar Loader , ĊĠ Ġprivate Ġval Ġimage Res izer : ĠGithub Image Res izer Ċ ) Ġ: ĠBorder LayoutPanel (), ĠDis posable , ĠData Provider Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġval ĠKEY : ĠData Key < GH Accounts Panel > Ġ= ĠData Key . create (" Github . Accounts Panel ") ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġaccount ListModel Ġ= ĠCollection ListModel < Github Account Decorator >() ĊĠ Ġprivate Ġval Ġaccount List Ġ= ĠJ B List < Github Account Decorator >( account ListModel ). apply Ġ{ ĊĠĠĠ Ġval Ġdecorator Renderer Ġ= ĠGithub Account Decorator Renderer () ĊĠĠĠ Ġcell Renderer Ġ= Ġdecorator Renderer ĊĠĠĠ ĠJ List Hover ed Row Material iser . install ( this , ĠGithub Account Decorator Renderer ()) ĊĠĠĠ ĠUI Util . put Client Property ( this , ĠUI Util . NOT _ IN _ HI ER ARCH Y _ COMPONENTS , ĠlistOf ( decorator Renderer )) ĊĊĠĠĠ Ġselection Mode Ġ= ĠList Selection Model . SINGLE _ SELECTION ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġprogress Manager Ġ= Ġcreate List Progress Manager () ĊĠ Ġprivate Ġvar Ġcurrent Tokens Map Ġ= Ġmap Of < Github Account , ĠString ?> () ĊĠ Ġprivate Ġval Ġnew Tokens Map Ġ= Ġmutable Map Of < Github Account , ĠString >() ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġaccount List . empty Text . apply Ġ{ ĊĠĠĠĠĠ Ġappend Text ( Github Bundle . message (" accounts . none . added ")) ĊĠĠĠĠĠ Ġappend Secondary Text ( Github Bundle . message (" accounts . add "), ĠSimple Text Attributes . LINK _ PLAIN _ ATTRIBUTES ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinvoke Action ( action Manager . getAction (" Github . Accounts . Add GH Account "), Ġaccount List , ĠAction Places . UNKNOWN , Ġnull , Ġnull ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġappend Secondary Text (" Ġ(${ Key map Util . getFirst Keyboard Shortcut Text ( Common Shortcut s . getNew ()) })", ĠStatus Text . DEFAULT _ ATTRIBUTES , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠaddTo Center ( Toolbar Decorator . create Decorator ( account List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. disable UpDown Actions () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Add Action Ġ{ Ġshow Add Account Actions ( it . preferred Popup Point Ġ?: Ġget Center Of ( account List )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Extra Action ( object Ġ: ĠToolbar Decorator . Element ActionButton ( Github Bundle . message (" accounts . set . default "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAll Icons . Actions . Checked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( account List . selected Value . project Default ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( account Data Ġin Ġaccount ListModel . items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( account Data Ġ== Ġaccount List . selected Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Data . project Default Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount ListModel . contents Changed ( account Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( account Data . project Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Data . project Default Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount ListModel . contents Changed ( account Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġupdate Button ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġis Enabled Ġ&& Ġ! account List . selected Value . project Default ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Panel ()) ĊĊĠĠĠ ĠDis poser . register ( this , Ġprogress Manager ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetData ( data Id : ĠString ): ĠAny ? Ġ{ ĊĠĠĠ Ġif Ġ( KEY .` is `( data Id )) Ġreturn Ġthis ĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Add Account Actions ( point : ĠRelative Point ) Ġ{ ĊĠĠĠ Ġval Ġgroup Ġ= Ġaction Manager . getAction (" Github . Accounts . Add Account ") Ġas ĠAction Group ĊĠĠĠ Ġval Ġpopup Ġ= Ġaction Manager . create Action PopupMenu ( Action Places . UNKNOWN , Ġgroup ) ĊĊĠĠĠ Ġpopup . setTarget Component ( this ) ĊĠĠĠ Ġpopup . component . show ( point . component , Ġpoint . point . x , Ġpoint . point . y ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġedit Account ( decorator : ĠGithub Account Decorator ) Ġ{ ĊĠĠĠ Ġval Ġdialog Ġ= ĠGithub Login Dialog ( executor Factory , Ġproject , Ġthis ). apply Ġ{ ĊĠĠĠĠĠ Ġwith Server ( decorator . account . server . toString (), Ġfalse ) ĊĠĠĠĠĠ Ġwith Credentials ( decorator . account . name ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( dialog . show AndGet ()) Ġ{ ĊĠĠĠĠĠ Ġdecorator . account . name Ġ= Ġdialog . login ĊĠĠĠĠĠ Ġnew Tokens Map [ decorator . account ] Ġ= Ġdialog . token ĊĠĠĠĠĠ Ġload Account Details ( decorator ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġadd Account ( server : ĠGithub Server Path , Ġlogin : ĠString , Ġtoken : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġgithub Account Ġ= ĠGithub Account Manager . create Account ( login , Ġserver ) ĊĠĠĠ Ġnew Tokens Map [ github Account ] Ġ= Ġtoken ĊĊĠĠĠ Ġval Ġaccount Data Ġ= ĠGithub Account Decorator ( github Account , Ġfalse ) ĊĠĠĠ Ġaccount ListModel . add ( account Data ) ĊĠĠĠ Ġload Account Details ( account Data ) ĊĠ Ġ} ĊĊĠ Ġfun Ġis Account Unique ( login : ĠString , Ġserver : ĠGithub Server Path ) Ġ= ĊĠĠĠ Ġaccount ListModel . items . none Ġ{ Ġit . account . name Ġ== Ġlogin Ġ&& Ġit . account . server Ġ== Ġserver Ġ} ĊĊĠ Ġfun Ġload Existing Accounts Details () Ġ{ ĊĠĠĠ Ġfor Ġ( account Data Ġin Ġaccount ListModel . items ) Ġ{ ĊĠĠĠĠĠ Ġload Account Details ( account Data ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġload Account Details ( account Data : ĠGithub Account Decorator ) Ġ{ ĊĠĠĠ Ġval Ġaccount Ġ= Ġaccount Data . account ĊĠĠĠ Ġval Ġtoken Ġ= Ġnew Tokens Map [ account ] Ġ?: Ġcurrent Tokens Map [ account ] ĊĠĠĠ Ġif Ġ( token Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġaccount ListModel . contents Changed ( account Data . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġerror Text Ġ= ĠGithub Bundle . message (" account . token . missing ") ĊĠĠĠĠĠĠĠ Ġshow Re Login Link Ġ= Ġtrue ĊĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġexecutor Ġ= Ġexecutor Factory . create ( token ) ĊĠĠĠ Ġprogress Manager . run ( object Ġ: ĠTask . Background able ( project , Ġ" Not ĠVis ible ") Ġ{ ĊĠĠĠĠĠ Ġlateinit Ġvar Ġloaded Details : ĠGithub Authenticated User ĊĠĠĠĠĠ Ġvar Ġcorrect Scopes : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġrun ( indicator : ĠProgress Indicator ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( details , Ġscopes ) Ġ= ĠGH Security Util . load CurrentUser With Scopes ( executor , Ġindicator , Ġaccount . server ) ĊĠĠĠĠĠĠĠ Ġloaded Details Ġ= Ġdetails ĊĠĠĠĠĠĠĠ Ġcorrect Scopes Ġ= ĠGH Security Util . is En ough Scopes ( scopes . or Empty ()) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess () Ġ{ ĊĠĠĠĠĠĠĠ Ġaccount ListModel . contents Changed ( account Data . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġdetails Ġ= Ġloaded Details ĊĠĠĠĠĠĠĠĠĠ Ġicon Provider Ġ= ĠC aching Github Avatar Icons Provider ( avatar Loader , Ġimage Res izer , Ġexecutor , ĠGithub UI Util . avatar Size , Ġaccount List ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( correct Scopes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Re Login Link Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Text Ġ= Ġ" Ins ufficient Ġsecurity Ġscopes " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Re Login Link Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Throwable ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġaccount ListModel . contents Changed ( account Data . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġerror Text Ġ= Ġerror . message . toString () ĊĠĠĠĠĠĠĠĠĠ Ġshow Re Login Link Ġ= Ġerror Ġis ĠGithub Authentication Exception ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate List Progress Manager () Ġ= Ġobject Ġ: ĠProgress Visibility Manager () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġset Progress Visible ( visible : ĠBoolean ) Ġ= Ġaccount List . set Paint Busy ( visible ) ĊĠĠĠ Ġoverride Ġfun Ġget Modal ity State () Ġ= ĠMod ality State . any () ĊĠ Ġ} ĊĊĠ Ġfun Ġset Accounts ( accounts : ĠMap < Github Account , ĠString ? >, Ġdefault Account : ĠGithub Account ?) Ġ{ ĊĠĠĠ Ġaccount ListModel . removeAll () ĊĠĠĠ Ġaccount ListModel . addAll ( 0 , Ġaccounts . keys . map Ġ{ ĠGithub Account Decorator ( it , Ġit Ġ== Ġdefault Account ) Ġ}) ĊĠĠĠ Ġcurrent Tokens Map Ġ= Ġaccounts ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ return Ġlist Ġof Ġaccounts Ġand Ġassociated Ġtokens Ġif Ġnew Ġtoken Ġwas Ġcreated Ġand Ġselected Ġdefault Ġaccount ĊĠĠ Ġ*/ ĊĠ Ġfun Ġget Accounts (): ĠPair < Map < Github Account , ĠString ? >, ĠGithub Account ?> Ġ{ ĊĠĠĠ Ġreturn Ġaccount ListModel . items . associate Ġ{ Ġit . account Ġto Ġnew Tokens Map [ it . account ] Ġ} Ġto ĊĠĠĠĠĠ Ġaccount ListModel . items . find Ġ{ Ġit . project Default Ġ} ?. account ĊĠ Ġ} ĊĊĠ Ġfun Ġclear New Tokens () Ġ= Ġnew Tokens Map . clear () ĊĊĠ Ġfun Ġis Modified ( accounts : ĠSet < Github Account >, Ġdefault Account : ĠGithub Account ?): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġaccount ListModel . items . find Ġ{ Ġit . project Default Ġ} ?. account Ġ!= Ġdefault Account Ġ|| ĊĠĠĠĠĠĠĠĠĠĠ Ġaccount ListModel . items . map Ġ{ Ġit . account Ġ}. toSet () Ġ!= Ġaccounts Ġ|| ĊĠĠĠĠĠĠĠĠĠĠ Ġnew Tokens Map . isNotEmpty () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdispose () Ġ{} ĊĊĠ Ġprivate Ġinner Ġclass ĠGithub Account Decorator Renderer Ġ: ĠList Cell Renderer < Github Account Decorator >, ĠJPanel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġaccount Name Ġ= ĠJLabel () ĊĊĠĠĠ Ġprivate Ġval Ġserver Name Ġ= ĠJLabel () ĊĠĠĠ Ġprivate Ġval Ġprofile Picture Ġ= ĠJLabel () ĊĊĠĠĠ Ġprivate Ġval ĠfullName Ġ= ĠJLabel () ĊĊĠĠĠ Ġprivate Ġval Ġloading Error Ġ= ĠJLabel () ĊĠĠĠ Ġprivate Ġval Ġre login Link Ġ= ĠLink Label < Any ? >( Github Bundle . message (" accounts . re login "), Ġnull ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUPDATE Ġ[ create Link Activation Listener ] ĠIF ĠYOU ĠCHANGE ĠLAY OUT ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġlayout Ġ= ĠFlow Layout ( Flow Layout . LEFT , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠ Ġborder Ġ= ĠJ BU I . B orders . empty ( 5 , Ġ 8 ) ĊĊĠĠĠĠĠ Ġval Ġnames Panel Ġ= ĠJPanel (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġlayout Ġ= ĠGrid BagLayout () ĊĠĠĠĠĠĠĠ Ġborder Ġ= ĠJ BU I . B orders . empty ( 0 , Ġ 6 , Ġ 4 , Ġ 6 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbag Ġ= ĠGrid Bag () ĊĠĠĠĠĠĠĠĠĠ Ġ. setDefault Insets ( J BU I . in sets Right ( UI Util . DEFAULT _ HG AP )) ĊĠĠĠĠĠĠĠĠĠ Ġ. setDefault Anchor ( Grid BagConstraints . WEST ) ĊĠĠĠĠĠĠĠĠĠ Ġ. setDefault Fill ( Grid BagConstraints . VERTICAL ) ĊĠĠĠĠĠĠĠ Ġadd ( fullName , Ġbag . nextLine (). next ()) ĊĠĠĠĠĠĠĠ Ġadd ( account Name , Ġbag . next ()) ĊĠĠĠĠĠĠĠ Ġadd ( loading Error , Ġbag . next ()) ĊĠĠĠĠĠĠĠ Ġadd ( re login Link , Ġbag . next ()) ĊĠĠĠĠĠĠĠ Ġadd ( server Name , Ġbag . nextLine (). cover Line ()) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġadd ( profile Picture ) ĊĠĠĠĠĠ Ġadd ( names Panel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetList Cell Renderer Component ( list : ĠJ List < out ĠGithub Account Decorator >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue : ĠGithub Account Decorator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Selected : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Has Focus : ĠBoolean ): ĠComponent Ġ{ ĊĠĠĠĠĠ ĠUI Util . setBackground Re cursively ( this , ĠList Ui Util . With T all Row . background ( list , Ġis Selected , Ġlist . has Focus ())) ĊĠĠĠĠĠ Ġval Ġprimary TextColor Ġ= ĠList Ui Util . With T all Row . foreground ( isSelected , Ġlist . has Focus ()) ĊĠĠĠĠĠ Ġval Ġsecondary TextColor Ġ= ĠList Ui Util . With T all Row . secondary Foreground ( list , Ġis Selected ) ĊĊĠĠĠĠĠ Ġaccount Name . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġvalue . account . name ĊĠĠĠĠĠĠĠ Ġset Bold ( if Ġ( value . details ?. name Ġ== Ġnull ) Ġvalue . project Default Ġelse Ġfalse ) ĊĠĠĠĠĠĠĠ Ġforeground Ġ= Ġif Ġ( value . details ?. name Ġ== Ġnull ) Ġprimary TextColor Ġelse Ġsecondary TextColor ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġserver Name . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġvalue . account . server . toString () ĊĠĠĠĠĠĠĠ Ġforeground Ġ= Ġsecondary TextColor ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġprofile Picture . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġicon Ġ= Ġvalue . get Icon () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠfullName . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġvalue . details ?. name ĊĠĠĠĠĠĠĠ Ġset Bold ( value . project Default ) ĊĠĠĠĠĠĠĠ Ġis Visible Ġ= Ġvalue . details ?. name Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġforeground Ġ= Ġprimary TextColor ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġloading Error . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġvalue . error Text ĊĠĠĠĠĠĠĠ Ġforeground Ġ= ĠUI Util . getError Foreground () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġre login Link . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġis Visible Ġ= Ġvalue . error Text Ġ!= Ġnull Ġ&& Ġvalue . show Re Login Link ĊĠĠĠĠĠĠĠ Ġset Listener ( Link Listener Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġedit Account ( value ) ĊĠĠĠĠĠĠĠ Ġ}, Ġnull ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠJLabel . setBold ( is Bold : ĠBoolean ) Ġ{ ĊĠĠĠĠĠ Ġfont Ġ= Ġfont . derive Font ( if Ġ( is Bold ) Ġfont . style Ġor ĠFont . BOLD Ġelse Ġfont . style Ġand ĠFont . BOLD . inv ()) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAccount Ġ+ Ġaux ill ary Ġinfo Ġ+ Ġinfo Ġloading Ġerror Ċ Ġ*/ Ċ private Ġclass ĠGithub Account Decorator ( val Ġaccount : ĠGithub Account , Ġvar Ġproject Default : ĠBoolean ) Ġ{ ĊĠ Ġvar Ġdetails : ĠGithub Authenticated User ? Ġ= Ġnull ĊĠ Ġvar Ġicon Provider : ĠGH Avatar Icons Provider ? Ġ= Ġnull ĊĊĠ Ġvar Ġerror Text : ĠString ? Ġ= Ġnull ĊĠ Ġvar Ġshow Re Login Link Ġ= Ġfalse ĊĊĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠ Ġother Ġas ĠGithub Account Decorator ĊĊĠĠĠ Ġif Ġ( account Ġ!= Ġother . account ) Ġreturn Ġfalse ĊĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġaccount . hashCode () ĊĠ Ġ} ĊĊĠ Ġfun Ġget Icon (): ĠIcon ? Ġ{ ĊĠĠĠ Ġval Ġurl Ġ= Ġdetails ?. avatar Url ĊĠĠĠ Ġreturn Ġicon Provider ?. get Icon ( url ) ĊĠ Ġ} Ċ } Ċ