// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 Ġ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 Ġcom . intellij . openapi . project Roots . impl . jdk Downloader Ċ Ċ import Ġcom . intellij . icons . All Icons Ċ import Ġcom . intellij . lang . Lang Bundle Ċ import Ġcom . intellij . openapi . action System . DataProvider Ċ import Ġcom . intellij . openapi . application . Application Info Ċ import Ġcom . intellij . openapi . application . Modal ity State Ċ import Ġcom . intellij . openapi . application . invoke Later Ċ import Ġcom . intellij . openapi . file Chooser . FileChooser Descriptor Factory Ċ import Ġcom . intellij . openapi . ide . Copy Paste Manager Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . ui . ComboBox Ċ import Ġcom . intellij . openapi . ui . Dialog Wrapper Ċ import Ġcom . intellij . openapi . ui . TextField With Browse Button Ċ import Ġcom . intellij . openapi . util . Dis poser Ċ import Ġcom . intellij . openapi . util . System Info Ċ import Ġcom . intellij . openapi . util . io . File Util Ċ import Ġcom . intellij . openapi . util . text . Html Chunk Ċ import Ġcom . intellij . ui . JB Color Ċ import Ġcom . intellij . ui . Simple Colo red Component Ċ import Ġcom . intellij . ui . components . JB Label Ċ import Ġcom . intellij . ui . layout .* Ċ import Ġcom . intellij . util . cast S af ely To Ċ import Ġcom . intellij . util . io . isDirectory Ċ import Ġcom . intellij . util . ui . J BU I Ċ import Ġcom . intellij . util . ui . components . Border LayoutPanel Ċ import Ġjava . awt . datat rans fer . Data Flavor Ċ import Ġjava . awt . event . Window Adapter Ċ import Ġjava . awt . event . Window Event Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġjavax . swing . J Component Ċ import Ġjavax . swing . JPanel Ċ import Ġjavax . swing . Swing Constants Ċ Ċ sealed Ġclass ĠRuntime Chooser Dialog Result Ġ{ ĊĠ Ġobject ĠCancel Ġ: ĠRuntime Chooser Dialog Result () ĊĠ Ġobject ĠUse Default : ĠRuntime Chooser Dialog Result () ĊĠ Ġdata Ġclass ĠDownload And Use ( val Ġitem : ĠJ dk Item , Ġval Ġpath : ĠPath ) Ġ: ĠRuntime Chooser Dialog Result () ĊĠ Ġdata Ġclass ĠUse Custom J dk ( val Ġname : ĠString , Ġval Ġpath : ĠPath ) Ġ: ĠRuntime Chooser Dialog Result () Ċ } Ċ Ċ class ĠRuntime Chooser Dialog ( ĊĠ Ġprivate Ġval Ġproject : ĠProject ?, ĊĠ Ġprivate Ġval Ġmodel : ĠRuntime Chooser Model , Ċ ) Ġ: ĠDialog Wrapper ( project ), ĠData Provider Ġ{ ĊĠ Ġprivate Ġval ĠUSE _ DEFAULT _ RUNTIME _ CODE Ġ= ĠNEXT _ USER _ EXIT _ CODE Ġ+ Ġ 4 2 ĊĊĠ Ġprivate Ġlateinit Ġvar Ġj dk Install Dir Selector : ĠTextField With Browse Button ĊĠ Ġprivate Ġlateinit Ġvar Ġj dk Combo box : ĠCombo Box < Runtime Chooser Item > ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġtitle Ġ= ĠLang Bundle . message (" dialog . title . choose . ide . runtime ") ĊĠĠĠ Ġset Resizable ( false ) ĊĠĠĠ Ġinit () ĊĠĠĠ Ġinit Clipboard Listener () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġinit Clipboard Listener () Ġ{ ĊĠĠĠ Ġval Ġknown Paths Ġ= Ġmutable Set Of < String >() ĊĊĠĠĠ Ġval Ġclipboard Update Action Ġ= Ġ{ ĊĠĠĠĠĠ Ġval Ġnew Path Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠ ĠCopy Paste Manager . getInstance (). contents ?. get Transfer Data ( Data Flavor . string Flavor ) Ġas ? ĠString ĊĠĠĠĠĠ Ġ}. get OrNull () ĊĊĠĠĠĠĠ Ġif Ġ( new Path Ġ!= Ġnull Ġ&& Ġnew Path . isNotBlank () Ġ&& Ġknown Paths . add ( new Path )) Ġ{ ĊĠĠĠĠĠĠĠ ĠRuntime Chooser Custom . import Detected Item ( new Path . trim (), Ġmodel ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġwindow Listener Ġ= Ġobject : ĠWindow Adapter () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġwindow Activated ( e : ĠWindow Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġinvoke Later ( Modal ity State . any ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġclipboard Update Action () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġwindow ?. let Ġ{ Ġwindow Ġ-> ĊĠĠĠĠĠ Ġwindow . add WindowListener ( window Listener ) ĊĠĠĠĠĠ ĠDis poser . register ( dis posable ) Ġ{ Ġwindow . remove WindowListener ( window Listener ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclipboard Update Action () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetData ( data Id : ĠString ): ĠAny ? Ġ{ ĊĠĠĠ Ġreturn ĠRuntime Chooser Custom . jdk Downloader Extension Provider . getData ( data Id ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate South Additional Panel (): ĠJPanel Ġ{ ĊĠĠĠ Ġreturn ĠBorder LayoutPanel (). apply Ġ{ ĊĠĠĠĠĠ ĠaddTo Center ( ĊĠĠĠĠĠĠĠ Ġcreate JButton For Action ( ĊĠĠĠĠĠĠĠĠĠ ĠDialog Wrapper Exit Action ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLang Bundle . message (" dialog . button . choose . ide . runtime . use Default "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUSE _ DEFAULT _ RUNTIME _ CODE ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġshow Dialog AndGet Result () Ġ: ĠRuntime Chooser Dialog Result Ġ{ ĊĠĠĠ Ġshow () ĊĊĠĠĠ Ġif Ġ( exit Code Ġ== ĠUSE _ DEFAULT _ RUNTIME _ CODE ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠRuntime Chooser Dialog Result . Use Default ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( is OK ) Ġrun Ġ{ ĊĠĠĠĠĠ Ġval Ġj dk Item Ġ= Ġj dk Combo box . selected Item . cast S af ely To < Runtime Chooser Download able Item >() ?. item Ġ?: Ġreturn @ run ĊĠĠĠĠĠ Ġval Ġpath Ġ= Ġmodel . get Install Path FromText ( jdk Item , Ġj dk Install Dir Selector . text ) ĊĠĠĠĠĠ Ġreturn ĠRuntime Chooser Dialog Result . Download And Use ( jdk Item , Ġpath ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( is OK ) Ġrun Ġ{ ĊĠĠĠĠĠ Ġval Ġj dk Item Ġ= Ġj dk Combo box . selected Item . cast S af ely To < Runtime Chooser Custom Item >() Ġ?: Ġreturn @ run ĊĠĠĠĠĠ Ġval Ġhome Ġ= ĠPaths . get ( jdk Item . home Dir ) ĊĠĠĠĠĠ Ġif Ġ( home . isDirectory ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRuntime Chooser Dialog Result . Use Custom J dk ( listOf NotNull ( jdk Item . displayName , Ġj dk Item . version ). join ToString (" Ġ"), Ġhome ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠRuntime Chooser Dialog Result . Cancel ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Title Pane (): ĠJ Component Ġ{ ĊĠĠĠ Ġreturn ĠBorder LayoutPanel (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcustom Line Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠSystem Info . is Windows Ġ-> ĠJ BU I . B orders . custom Line ( JB Color . border (), Ġ 1 , Ġ 0 , Ġ 1 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠJ BU I . B orders . custom Line Bottom ( JB Color . border ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġborder Ġ= ĠJ BU I . B orders . merge ( J BU I . B orders . empty ( 1 0 ), Ġcustom Line , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġbackground Ġ= ĠJ BU I . Current Theme . Notification . BACKGROUND ĊĠĠĠĠĠĠĠ Ġforeground Ġ= ĠJ BU I . Current Theme . Notification . FO REG ROUND ĊĊĠĠĠĠĠĠĠ ĠaddTo Center ( JB Label (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġicon Ġ= ĠAll Icons . General . Warning ĊĠĠĠĠĠĠĠĠĠ Ġvertical Text Position Ġ= ĠSw ing Constants . TOP ĊĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠHtml Chunk ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. html () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Text ( Lang Bundle . message (" dialog . label . choose . ide . runtime . warn ", ĠApplication Info . getInstance (). short Company Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġwith Preferred Width ( 4 0 0 ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Center Panel (): ĠJ Component Ġ{ ĊĠĠĠ Ġj dk Combo box Ġ= Ġobject Ġ: ĠCombo Box < Runtime Chooser Item >( model . main ComboBox Model ) Ġ{ ĊĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġis Swing Popup Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset Minimum And Preferred Width ( 4 0 0 ) ĊĠĠĠĠĠĠĠ Ġset Renderer ( Runtime Chooser Presenter ()) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġset SelectedItem ( an Object : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( an Object Ġ! is ĠRuntime Chooser Item ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( an Object Ġis ĠRuntime Chooser Add Custom Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠRuntime Chooser Custom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Sdk Chooser Popup ( jdk Combo box , Ġthis @ Runtime Chooser Dialog . model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . show Under ne ath Of ( jdk Combo box ) ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( an Object Ġis ĠRuntime Chooser Download able Item Ġ|| Ġan Object Ġis ĠRuntime Chooser Custom Item Ġ|| Ġan Object Ġis ĠRuntime Chooser Current Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsuper . setSelected Item ( an Object ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġpanel Ġ{ ĊĠĠĠĠĠ Ġrow ( Lang Bundle . message (" dialog . label . choose . ide . runtime . current ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontrol Ġ= ĠSimple Colo red Component () ĊĠĠĠĠĠĠĠ Ġcontrol (). constraints ( grow X ) ĊĊĠĠĠĠĠĠĠ Ġmodel . current Runtime . get And Subscribe ( dis posable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcontrol . clear () ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRuntime Chooser Presenter . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontrol . preset Current Runtime ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġrow ( Lang Bundle . message (" dialog . label . choose . ide . runtime . combo ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġj dk Combo box . invoke ( grow X ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ// download Ġrow ĊĠĠĠĠĠ Ġrow ( Lang Bundle . message (" dialog . label . choose . ide . runtime . location ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġj dk Install Dir Selector Ġ= Ġtext Field With Browse Button ( ĊĠĠĠĠĠĠĠĠĠ Ġproject Ġ= Ġproject , ĊĠĠĠĠĠĠĠĠĠ Ġbrowse Dialog Title Ġ= ĠLang Bundle . message (" dialog . title . choose . ide . runtime . select . path . to . install . jdk "), ĊĠĠĠĠĠĠĠĠĠ Ġfile Chooser Descriptor Ġ= ĠFile Chooser Descriptor Factory . create Single Folder Descriptor () ĊĠĠĠĠĠĠĠ Ġ). constraints ( grow X ) ĊĠĠĠĠĠĠĠĠĠ Ġ. comment ( Lang Bundle . message (" dialog . message . choose . ide . runtime . select . path . to . install . jdk ")) ĊĠĠĠĠĠĠĠĠĠ Ġ. component ĊĊĠĠĠĠĠĠĠ Ġval Ġupdate Location Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġwhen ( val Ġitem Ġ= Ġj dk Combo box . selected Item ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRuntime Chooser Download able Item Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Install Dir Selector . text Ġ= Ġmodel . getDefault Install Path For ( item . item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Install Dir Selector . set Button Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Install Dir Selector . is Editable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Install Dir Selector . set Button Visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRuntime Chooser Item With Fixed Location Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Install Dir Selector . text Ġ= ĠFile Util . getLocation Relative To User Home ( item . home Dir , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Install Dir Selector . set Button Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Install Dir Selector . is Editable Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Install Dir Selector . set Button Visible ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Install Dir Selector . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Install Dir Selector . set Button Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Install Dir Selector . is Editable Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Install Dir Selector . set Button Visible ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Location () ĊĠĠĠĠĠĠĠ Ġj dk Combo box . addItem Listener Ġ{ Ġupdate Location () Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ