// ĠCopyright Ġ 2 0 0 0 - 2 0 1 8 Ġ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 . jetbrains . python . new Project . steps Ċ Ċ import Ġcom . intellij . execution . ExecutionException Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . module . Module Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . project Roots . Sdk Ċ import Ġcom . intellij . openapi . ui . Dialog Wrapper Ċ import Ġcom . intellij . openapi . ui . Validation Info Ċ import Ġcom . intellij . openapi . ui . popup . JB Popup Factory Ċ import Ġcom . intellij . openapi . util . System Info Ċ import Ġcom . intellij . openapi . util . component 1 Ċ import Ġcom . intellij . openapi . util . component 2 Ċ import Ġcom . intellij . openapi . util . text . StringUtil Ċ import Ġcom . intellij . util . ui . Form Builder Ċ import Ġcom . intellij . util . ui . UI Util Ċ import Ġcom . jetbrains . python . remote . Py Project Synchron izer Ċ import Ġcom . jetbrains . python . remote . Python Remote Interpreter Manager Ċ import Ġcom . jetbrains . python . sdk . Py Sdk Util Ċ import Ġcom . jetbrains . python . sdk . Python Sdk Type Ċ import Ġcom . jetbrains . python . sdk . add . Py Add Sdk Panel Ċ import Ġjava . awt . Border Layout Ċ import Ġjava . awt . Component Ċ Ċ /** Ċ Ġ* Ġ@ author Ġvlan Ċ Ġ*/ Ċ class ĠPy Add Existing Sdk Panel ( project : ĠProject ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule : ĠModule ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexisting Sdk s : ĠList < Sdk >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Project Path : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferred Sdk : ĠS dk ?) Ġ: ĠPy Add Sdk Panel () Ġ{ ĊĊĠ Ġoverride Ġval Ġpanel Name : ĠString Ġ= Ġ" Existing Ġinterpreter " ĊĊĠ Ġoverride Ġval Ġsdk : ĠS dk ? ĊĠĠĠ Ġget () Ġ= Ġsdk Chooser Combo . comboBox . selected Item Ġas ? ĠS dk ĊĊĠ Ġval Ġremote Path : ĠString ? ĊĠĠĠ Ġget () Ġ= Ġif Ġ( remote Path Field . main Panel . isVisible ) Ġremote Path Field . textField . text Ġelse Ġnull ĊĊĠ Ġoverride Ġvar Ġnew Project Path : ĠString ? Ġ= Ġnew Project Path ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠ Ġsdk Chooser Combo . set New Project Path ( value ) ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġval Ġsdk Chooser Combo : ĠPython Sdk Chooser Combo ĊĠ Ġprivate Ġval Ġremote Path Field Ġ= ĠPy Remote Path Field (). apply Ġ{ ĊĠĠĠ Ġadd ActionListener Ġ{ ĊĠĠĠĠĠ Ġval Ġcurrent Sdk Ġ= Ġsdk Ġ?: Ġreturn @ addActionListener ĊĠĠĠĠĠ Ġif Ġ(! Py Sdk Util . is Remote ( current Sdk )) Ġreturn @ addActionListener ĊĠĠĠĠĠ Ġtext Field . text Ġ= Ġcurrent Sdk . choose Remote Path ( parent ) Ġ?: Ġreturn @ addActionListener ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġlayout Ġ= ĠBorderLayout () ĊĠĠĠ Ġsdk Chooser Combo Ġ= ĠPython Sdk Chooser Combo ( project , Ġmodule , Ġexisting Sdk s , Ġnew Project Path , Ġ{ Ġit Ġ!= Ġnull Ġ&& Ġit Ġ== Ġpreferred Sdk Ġ}). apply Ġ{ ĊĠĠĠĠĠ Ġif Ġ( System Info . is Mac Ġ&& Ġ! UI Util . is Under Dar cul a ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġput Client Property (" JButton . button Type ", Ġnull ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġadd Changed Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġform Panel Ġ= ĠForm Builder . create Form Builder () ĊĠĠĠĠĠ Ġ. add Labeled Component (" Interpreter :", Ġsdk Chooser Combo ) ĊĠĠĠĠĠ Ġ. addComponent ( remote Path Field . main Panel ) ĊĠĠĠĠĠ Ġ. panel ĊĠĠĠ Ġadd ( form Panel , ĠBorderLayout . NORTH ) ĊĠĠĠ Ġupdate () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvalidate All (): ĠList < Validation Info > Ġ= ĊĠĠĠ ĠlistOf ( validate Sdk Chooser Field (), ĊĠĠĠĠĠĠĠĠĠĠ Ġvalidate Remote Path Field ()) ĊĠĠĠĠĠ Ġ. filter NotNull () ĊĊĠ Ġoverride Ġfun Ġadd ChangeListener ( listener : ĠRunnable ) Ġ{ ĊĠĠĠ Ġsdk Chooser Combo . add Changed Listener Ġ{ Ġlistener . run () Ġ} ĊĠĠĠ Ġremote Path Field . add Text ChangeListener Ġ{ Ġlistener . run () Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġvalidate Sdk Chooser Field (): ĠValidation Info ? Ġ{ ĊĠĠĠ Ġval Ġselected Sdk Ġ= Ġsdk ĊĠĠĠ Ġval Ġmessage Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠ Ġselected Sdk Ġ== Ġnull Ġ-> Ġ" No ĠPython Ġinterpreter Ġselected " ĊĠĠĠĠĠ ĠPython Sdk Type . is Invalid ( selected Sdk ) Ġ-> Ġ" Choose Ġvalid ĠPython Ġinterpreter " ĊĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠValidation Info ( message , Ġsdk Chooser Combo ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġvalidate Remote Path Field (): ĠValidation Info ? Ġ{ ĊĠĠĠ Ġval Ġpath Ġ= Ġremote Path ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠ Ġpath Ġ!= Ġnull Ġ&& Ġpath . isBlank () Ġ-> ĠValidation Info (" Remote Ġpath Ġnot Ġprovided ") ĊĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate () Ġ{ ĊĠĠĠ Ġval Ġsynchron izer Ġ= Ġsdk ?. project Synchron izer ĊĠĠĠ Ġremote Path Field . main Panel . isVisible Ġ= Ġsynchron izer Ġ!= Ġnull ĊĠĠĠ Ġif Ġ( synchron izer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġdefault Remote Path Ġ= Ġsynchron izer . getDefault Remote Path () ĊĠĠĠĠĠ Ġval Ġtext Field Ġ= Ġremote Path Field . textField ĊĠĠĠĠĠ Ġif Ġ( default Remote Path Ġ!= Ġnull Ġ&& ĠString Util . isEmpty ( textField . text )) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Field . text Ġ= Ġdefault Remote Path ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval ĠS dk . project Synchron izer : ĠPy Project Synchron izer ? ĊĠĠĠĠĠ Ġget () Ġ= ĠPython Remote Interpreter Manager . getInstance ()?. getS ynchron izer ( this ) ĊĊĠĠĠ Ġprivate Ġfun ĠS dk . choose Remote Path ( owner : ĠComponent ): ĠString ? Ġ{ ĊĠĠĠĠĠ Ġval Ġremote Manager Ġ= ĠPython Remote Interpreter Manager . getInstance () Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠ Ġval Ġ( supplier , Ġpanel ) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġremote Manager . create Server Browser Form ( this ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġis ĠExecution Exception , Ġis ĠInterruptedException Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . getInstance ( Py Add Existing Sdk Panel :: class . java ). warn (" Failed Ġto Ġcreate Ġserver Ġbrowse Ġbutton ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJ B Popup Factory . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Message (" Failed Ġto Ġbrowse Ġremote Ġserver . ĠMake Ġsure Ġyou Ġhave Ġpermissions .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( owner ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġpanel . isVisible Ġ= Ġtrue ĊĠĠĠĠĠ Ġval Ġwrapper Ġ= Ġobject Ġ: ĠDialog Wrapper ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ Ġinit () Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Center Panel () Ġ= Ġpanel ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġif Ġ( wrapper . show AndGet ()) Ġsupplier . get () Ġelse Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }