// Ġ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 . pull request . data Ċ Ċ import Ġcom . intellij . openapi . components . Service Ċ import Ġcom . intellij . openapi . components . service Ċ import Ġcom . intellij . openapi . diagnostic . logger Ċ import Ġcom . intellij . openapi . progress . Process Canceled Exception Ċ import Ġcom . intellij . openapi . progress . Progress Indicator Ċ import Ġcom . intellij . openapi . progress . Progress Manager Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . Dis poser Ċ import Ġcom . intellij . util . concurrency . annotations . Requires Background Thread Ċ import Ġcom . intellij . util . concurrency . annotations . Requires Ed t Ċ import Ġorg . jetbrains . plugins . github . api . GH G QL Requests Ċ import Ġorg . jetbrains . plugins . github . api . GH Repository Coordinates Ċ import Ġorg . jetbrains . plugins . github . api . GH Repository Path Ċ import Ġorg . jetbrains . plugins . github . api . Github ApiRequest Executor Ċ import Ġorg . jetbrains . plugins . github . api . data . GH Repository Owner Name Ċ import Ġorg . jetbrains . plugins . github . api . data . GH User Ċ import Ġorg . jetbrains . plugins . github . api . data . request . search . Github Issue Search Type Ċ import Ġorg . jetbrains . plugins . github . api . util . Github Api Search QueryBuilder Ċ import Ġorg . jetbrains . plugins . github . api . util . Simple GH G QL Pages Loader Ċ import Ġorg . jetbrains . plugins . github . authentication . accounts . Github Account Ċ import Ġorg . jetbrains . plugins . github . authentication . accounts . Github Account Information Provider Ċ import Ġorg . jetbrains . plugins . github . i 1 8 n . Github Bundle Ċ import Ġorg . jetbrains . plugins . github . pull request . data . service .* Ċ import Ġorg . jetbrains . plugins . github . pull request . search . GH PR Search Query Holder Impl Ċ import Ġorg . jetbrains . plugins . github . ui . avatars . GH Avatar Icons Provider Ċ import Ġorg . jetbrains . plugins . github . util .* Ċ import Ġjava . io . IOException Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ Ċ @ Service Ċ internal Ġclass ĠGH PR DataContext Repository ( private Ġval Ġproject : ĠProject ) Ġ{ ĊĊĠ Ġprivate Ġval Ġrepositories Ġ= Ġmutable Map Of < GH Repository Coordinates , ĠLazy C ancellable Background Process Value < GH PR DataContext >>() ĊĊĠ Ġ@ Requires Ed t ĊĠ Ġfun Ġacquire Context ( repository : ĠGH Repository Coordinates , Ġremote : ĠGit Remote Url Coordinates , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount : ĠGithub Account , Ġrequest Executor : ĠGithub ApiRequest Executor ): ĠCompletableFuture < GH PR DataContext > Ġ{ ĊĊĠĠĠ Ġreturn Ġrepositories . get Or Put ( repository ) Ġ{ ĊĠĠĠĠĠ Ġval Ġcontext Disposable Ġ= ĠDis poser . new Disposable () ĊĠĠĠĠĠ ĠLazy C ancellable Background Process Value . create Ġ{ Ġindicator Ġ-> ĊĠĠĠĠĠĠĠ ĠProgress Manager . getInstance (). submit I OT ask ( indicator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Context ( indicator , Ġaccount , Ġrequest Executor , Ġrepository , Ġremote ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ! is ĠProcess Canceled Exception ) ĠLOG . info (" Error Ġoccurred Ġwhile Ġcreating Ġdata Ġcontext ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. success On Ed t Ġ{ Ġctx Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( Dis poser . is Disposed ( context Disposable )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDis poser . dispose ( ctx ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDis poser . register ( context Disposable , Ġctx ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġctx ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠ Ġit . add Drop EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠDis poser . dispose ( context Disposable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. value ĊĠ Ġ} ĊĊĠ Ġ@ Requires Ed t ĊĠ Ġfun Ġclear Context ( repository : ĠGH Repository Coordinates ) Ġ{ ĊĠĠĠ Ġrepositories . remove ( repository )?. drop () ĊĠ Ġ} ĊĊĠ Ġ@ Requires Background Thread ĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġprivate Ġfun Ġload Context ( indicator : ĠProgress Indicator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount : ĠGithub Account , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Executor : ĠGithub ApiRequest Executor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Repository Coordinates : ĠGH Repository Coordinates , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Coordinates : ĠGit Remote Url Coordinates ): ĠGH PR DataContext Ġ{ ĊĠĠĠ Ġindicator . text Ġ= ĠGithub Bundle . message (" pull . request . loading . account . info ") ĊĠĠĠ Ġval Ġaccount Details Ġ= ĠGithub Account Information Provider . getInstance (). get Information ( request Executor , Ġindicator , Ġaccount ) ĊĠĠĠ Ġindicator . check Canceled () ĊĊĠĠĠ Ġindicator . text Ġ= ĠGithub Bundle . message (" pull . request . loading . repo . info ") ĊĠĠĠ Ġval Ġrepo With Permissions Ġ= ĊĠĠĠĠĠ Ġrequest Executor . execute ( indicator , ĠG HG QL Requests . Repo . find Permission ( ĊĠĠĠĠĠĠĠ ĠGH Repository Coordinates ( account . server , Ġparsed Repository Coordinates . repository Path ))) ĊĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠ Ġ" Repository Ġ${ parsed Repository Coordinates . repository Path } Ġdoes Ġnot Ġexist Ġat Ġ${ account . server } Ġor Ġyou Ġdon 't Ġhave Ġaccess .") ĊĊĠĠĠ Ġval ĠcurrentUser Ġ= ĠGH User ( account Details . nodeId , Ġaccount Details . login , Ġaccount Details . html Url , Ġaccount Details . avatar Url !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Details . name ) ĊĊĠĠĠ Ġindicator . text Ġ= ĠGithub Bundle . message (" pull . request . loading . user . teams . info ") ĊĠĠĠ Ġval Ġrepo Owner Ġ= Ġrepo With Permissions . owner ĊĠĠĠ Ġval ĠcurrentUser Teams Ġ= Ġif Ġ( repo Owner Ġis ĠGH Repository Owner Name . Organization ) ĊĠĠĠĠĠ ĠSimple GH G QL Pages Loader ( request Executor , Ġ{ ĊĠĠĠĠĠĠĠ ĠG HG QL Requests . Organization . Team . findBy User Log ins ( account . server , Ġrepo Owner . login , ĠlistOf ( currentUser . login ), Ġit ) ĊĠĠĠĠĠ Ġ}). load All ( indicator ) ĊĠĠĠ Ġelse Ġempty List () ĊĠĠĠ Ġindicator . check Canceled () ĊĊĠĠĠ Ġ// Ġrepository Ġmight Ġhave Ġbeen Ġrenamed / moved ĊĠĠĠ Ġval Ġapi Repository Path Ġ= Ġrepo With Permissions . path ĊĠĠĠ Ġval Ġapi Repository Coordinates Ġ= ĠGH Repository Coordinates ( account . server , Ġapi Repository Path ) ĊĊĠĠĠ Ġval Ġsecurity Service Ġ= ĠGH PR Security ServiceImpl ( Github Shared Project Settings . getInstance ( project ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount , ĠcurrentUser , ĠcurrentUser Teams , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo With Permissions ) ĊĠĠĠ Ġval Ġdetails Service Ġ= ĠGH PR Details ServiceImpl ( Progress Manager . getInstance (), Ġrequest Executor , Ġapi Repository Coordinates ) ĊĠĠĠ Ġval Ġstate Service Ġ= ĠGH PR State ServiceImpl ( Progress Manager . getInstance (), Ġsecurity Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Executor , Ġaccount . server , Ġapi Repository Path ) ĊĠĠĠ Ġval Ġcomment Service Ġ= ĠGH PR Comment ServiceImpl ( Progress Manager . getInstance (), Ġrequest Executor , Ġapi Repository Coordinates ) ĊĠĠĠ Ġval Ġchanges Service Ġ= ĠGH PR Changes ServiceImpl ( Progress Manager . getInstance (), Ġproject , Ġrequest Executor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Coordinates , Ġapi Repository Coordinates ) ĊĠĠĠ Ġval Ġreview Service Ġ= ĠGH PR Review ServiceImpl ( Progress Manager . getInstance (), Ġsecurity Service , Ġrequest Executor , Ġapi Repository Coordinates ) ĊĊĠĠĠ Ġval Ġsearch Holder Ġ= ĠGH PR Search Query Holder Impl (). apply Ġ{ ĊĠĠĠĠĠ Ġquery Ġ= ĠGH PR Search Query . DEFAULT ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġlist Loader Ġ= ĠG HG QL Paged List Loader ( Progress Manager . getInstance (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple GH G QL Pages Loader ( request Executor , Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG HG QL Requests . PullRequest . search ( account . server , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Query ( api Repository Path , Ġsearch Holder . query ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ Ġp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠ Ġval Ġlist Updates Checker Ġ= ĠGH PR List ET ag Update Checker ( Progress Manager . getInstance (), Ġrequest Executor , Ġaccount . server , Ġapi Repository Path ) ĊĊĠĠĠ Ġval Ġdata Provider Repository Ġ= ĠGH PR DataProvider Repository Impl ( details Service , Ġstate Service , Ġreview Service , Ġcomment Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanges Service ) Ġ{ Ġid Ġ-> ĊĠĠĠĠĠ ĠG HG QL Paged List Loader ( Progress Manager . getInstance (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple GH G QL Pages Loader ( request Executor , Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG HG QL Requests . PullRequest . Timeline . items ( account . server , Ġapi Repository Path . owner , Ġapi Repository Path . repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ Ġid . number , Ġp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġtrue )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġrepo DataService Ġ= ĠGH PR Repository Data ServiceImpl ( Progress Manager . getInstance (), Ġrequest Executor , Ġaccount . server , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Repository Path , Ġrepo Owner ) ĊĊĠĠĠ Ġval Ġavatar Icons Provider Ġ= ĠGH Avatar Icons Provider ( Caching GH User Avatar Loader . getInstance (), Ġrequest Executor ) ĊĊĠĠĠ Ġval Ġfiles Manager Ġ= ĠGH PR Files ManagerImpl ( project , Ġparsed Repository Coordinates ) ĊĊĠĠĠ Ġindicator . check Canceled () ĊĠĠĠ Ġreturn ĠGH PR DataContext ( parsed Repository Coordinates , Ġremote Coordinates , Ġsearch Holder , Ġlist Loader , Ġlist Updates Checker , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Provider Repository , Ġsecurity Service , Ġrepo DataService , Ġavatar Icons Provider , Ġfiles Manager ) ĊĠ Ġ} ĊĊĠ Ġ@ Requires Ed t ĊĠ Ġfun Ġfind Context ( repository Coordinates : ĠGH Repository Coordinates ): ĠGH PR DataContext ? Ġ= Ġrepositories [ repository Coordinates ]?. last Loaded Value ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval ĠLOG Ġ= Ġlogger < GH PR DataContext Repository >() ĊĊĠĠĠ Ġfun ĠgetInstance ( project : ĠProject ) Ġ= Ġproject . service < GH PR DataContext Repository >() ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Query ( repo Path : ĠGH Repository Path , Ġsearch Query : ĠGH PR Search Query ?): ĠString Ġ{ ĊĠĠĠĠĠ Ġreturn ĠGithub Api Search QueryBuilder . search Query Ġ{ ĊĠĠĠĠĠĠĠ Ġqualifier (" type ", ĠGithub Issue Search Type . pr . name ) ĊĠĠĠĠĠĠĠ Ġqualifier (" repo ", Ġrepo Path . toString ()) ĊĠĠĠĠĠĠĠ Ġsearch Query ?. build Api Search Query ( this ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ