package Ġcom . var abyte . k ob web . cli . create Ċ Ċ import Ġcom . var abyte . k ob web . cli . common . Path Utils Ċ import Ġcom . var abyte . k ob web . cli . common . Valid ations Ċ import Ġcom . var abyte . k ob web . cli . common . cmd Ċ import Ġcom . var abyte . k ob web . cli . common . handle Fetch Ċ import Ġcom . var abyte . k ob web . cli . common . inform Info Ċ import Ġcom . var abyte . k ob web . cli . common . query User Ċ import Ġcom . var abyte . k ob web . cli . common . template . K ob web Template File Ċ import Ġcom . var abyte . k ob web . cli . common . text Error Ċ import Ġcom . var abyte . k ob web . cli . create . fre emark er . F reem ark er State Ċ import Ġcom . var abyte . k ob web . project . K ob web Folder Ċ import Ġcom . var abyte . kot ter . foundation . session Ċ import Ġcom . var abyte . kot ter . foundation . text . blue Ċ import Ġcom . var abyte . kot ter . foundation . text . bold Ċ import Ġcom . var abyte . kot ter . foundation . text . green Ċ import Ġcom . var abyte . kot ter . foundation . text . magenta Ċ import Ġcom . var abyte . kot ter . foundation . text . text Ċ import Ġcom . var abyte . kot ter . foundation . text . text Line Ċ import Ġcom . var abyte . kot ter x . decor ations . Border Characters Ċ import Ġcom . var abyte . kot ter x . decor ations . bordered Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Path Ċ import Ġkotlin . io . path . absolute Path String Ċ import Ġkotlin . io . path . delete Existing Ċ import Ġkotlin . io . path . name Ċ Ċ /** Ċ Ġ* ĠA Ġspecial - case Ġpath Ġsuffix Ġwhich Ġis Ġused Ġfor Ġidentifying Ġthe Ġmain Ġchoice Ġfor Ġa Ġtemplate Ġthat Ġhas Ġmultiple Ġpossible Ċ Ġ* Ġchoices . Ċ Ġ* Ċ Ġ* ĠA Ġconcrete Ġexample Ġwill Ġhelp Ġhere . ĠS ay Ġthat Ġyou Ġoriginally Ġstart Ġby Ġcreating Ġa Ġsingle Ġtemplate Ġcalled Ġ" site ", Ġand Ċ Ġ* Ġusers Ġare Ġgetting Ġused Ġto Ġcalling Ġ` k ob web Ġcreate Ġsite `. ĠL ater , Ġyou Ġget Ġa Ġlot Ġof Ġrequests Ġfor Ġan Ġempty Ġsite Ġtemplate , Ċ Ġ* Ġand Ġyou Ġwant Ġto Ġadd Ġ` k ob web Ġcreate Ġsite / empty `. Ċ Ġ* Ċ Ġ* ĠIf Ġyou Ġdo Ġthis , Ġnow Ġyou Ġhave Ġa Ġk ob web Ġproject Ġnested Ġinside Ġof Ġanother Ġk ob web Ġproject , Ġwhich Ġis Ġawk ward . ĠInstead , Ġyou Ċ Ġ* Ġshould Ġrefactor Ġthe Ġoriginal Ġ" site " Ġtemplate Ġto Ġ" site / default ", Ġand Ġthen Ġ" site / default " Ġand Ġ" site / empty " Ġcan Ġlive Ċ Ġ* Ġside Ġby Ġside . Ċ Ġ* Ċ Ġ* ĠFor Ġconvenience , Ġthough , Ġusers Ġshouldn 't Ġhave Ġto Ġtype Ġ"/ default " Ġthemselves ; Ġit Ġshould Ġbe Ġhandled Ġautomatically . ĠSo , Ċ Ġ* Ġ` k ob web Ġcreate Ġsite ` Ġmight Ġactually Ġbe Ġinstanti ating Ġthe Ġproject Ġthat Ġlives Ġat Ġ" site / default ", Ġbut Ġthe Ġuser Ġdoesn 't Ċ Ġ* Ġneed Ġto Ġknow Ġthat . Ċ Ġ*/ Ċ private Ġconst Ġval ĠDEFAULT _ SUFFIX Ġ= Ġ"/ default " Ċ Ċ fun Ġhandle Create ( repo : ĠString , Ġbranch : ĠString , Ġtemplate : ĠString ) Ġ= Ġsession Ġ{ ĊĠĠĠ Ġval Ġtemp Dir Ġ= Ġhandle Fetch ( repo , Ġbranch ) Ġ?: Ġreturn @ session ĊĊĠĠĠ Ġval Ġtemplate File Ġ= Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp Path Ġ= Ġtemp Dir . to Path () ĊĠĠĠĠĠĠĠ Ġval Ġsub Paths Ġ= ĠlistOf ("$ template $ DEFAULT _ SUFFIX ", Ġtemplate ) ĊĠĠĠĠĠĠĠ Ġsub Paths ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġsub Path Ġ-> Ġtemp Path . resolve ( sub Path ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġcurr Path Ġ-> ĠK ob web Folder . in Path ( curr Path )?. let Ġ{ ĠK ob web Template File ( it ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . content Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Error (" Unable Ġto Ġlocate Ġa Ġtemplate Ġnamed Ġ\"$ template \" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Line () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Consider Ġrunning Ġ` "); Ġcmd (" k ob web Ġlist "); Ġtext (" ` Ġfor Ġa Ġlist Ġof Ġchoices .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. run () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ session ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠConvert Ġtemplate Ġname Ġto Ġfolder Ġname , Ġe . g . Ġ" site " Ġ-> Ġ" site " Ġand Ġ" examples / clock " Ġ-> Ġ" clock ". ĠOne Ġexception : ĊĠĠĠ Ġ// Ġthe Ġspecial - case Ġ" default " Ġname , Ġwhich Ġis Ġsupposed Ġto Ġbe Ġtransparent Ġto Ġusers . ĊĠĠĠ Ġval Ġdefault Folder Name Ġ= ĊĠĠĠĠĠĠĠ ĠPath Utils . generate Empty Path Name ( template . remove Suffix ( DEFAULT _ SUFFIX ). substring After Last ('/ ')) ĊĠĠĠ Ġinform Info (" The Ġfolder Ġyou Ġchoose Ġhere Ġwill Ġbe Ġcreated Ġunder Ġyour Ġcurrent Ġpath .") ĊĠĠĠ Ġinform Info (" You Ġcan Ġenter Ġ`. ` Ġif Ġyou Ġwant Ġto Ġuse Ġthe Ġcurrent Ġdirectory .") ĊĠĠĠ Ġval Ġdst Path Ġ= Ġquery User (" Specify Ġa Ġfolder Ġfor Ġyour Ġproject :", Ġdefault Folder Name ) Ġ{ Ġanswer Ġ-> ĊĠĠĠĠĠĠĠ ĠValid ations . is FileName ( answer ) Ġ?: ĠValid ations . isEmpty Path ( answer ) ĊĠĠĠ Ġ}. let Ġ{ Ġanswer Ġ-> ĊĠĠĠĠĠĠĠ ĠPath . of ( if Ġ( answer Ġ!= Ġ". ") Ġanswer Ġelse Ġ""). to AbsolutePath () ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġsrc Path Ġ= ĠK ob web Folder . from Child Path ( template File . path ) !!. getProject Path () ĊĠĠĠ Ġval Ġk ob web Template Ġ= Ġtemplate File . content !! Ġ// ĠWe Ġalready Ġchecked Ġthis Ġwas Ġset , Ġabove ĊĊĠĠĠ Ġ// ĠTemplate Ġalmost Ġready Ġto Ġbe Ġprocessed Ġ- Ġremove Ġall Ġfiles Ġthat Ġshould ĠNE VER Ġend Ġup Ġin Ġthe Ġfinal Ġproject ĊĠĠĠ Ġtemplate File . path . delete Existing () ĊĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsub Templates Ġ= Ġmutable ListOf < File >() ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġsrc Path . to File () ĊĠĠĠĠĠĠĠ Ġroot . walk Bottom Up () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġfile Ġ-> Ġfile Ġ!= Ġroot Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . isDirectory Ġ&& ĠK ob web Folder . is K ob web Project ( file . to Path ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Templates . add ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsub Templates . forEach Ġ{ Ġsub Template Ġ-> Ġsub Template . delete Re cursively () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġstate Ġ= ĠF reem ark er State ( src Path , Ġdst Path ) ĊĠĠĠ Ġstate . execute ( this , Ġk ob web Template . instructions ) ĊĊĠĠĠ Ġval Ġproject Folder Ġ= Ġdst Path . name ĊĊĠĠĠ Ġsection Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġindent () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Ġ Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Line () ĊĠĠĠĠĠĠĠ Ġbold Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgreen Ġ{ Ġtext (" Success ! Ġ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Line (" Created Ġ$ project Folder Ġat Ġ${ dst Path . absolute Path String () }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Line () ĊĠĠĠĠĠĠĠ Ġborder ed ( Border Characters . CUR VED , Ġpadding Left Right Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Consider Ġdownloading Ġ"); Ġm agenta ( is B right Ġ= Ġtrue ) Ġ{ Ġtext Line (" Int elli J ĠIDEA ĠCommunity ĠEdition ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" using Ġ"); Ġblue ( is B right Ġ= Ġtrue ) Ġ{ Ġtext Line (" https :// www . jetbrains . com / toolbox - app /") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Line () ĊĠĠĠĠĠĠĠ Ġtext Line (" We Ġsuggest Ġthat Ġyou Ġbegin Ġby Ġtyping :") ĊĠĠĠĠĠĠĠ Ġtext Line () ĊĠĠĠĠĠĠĠ Ġif Ġ( dst Path Ġ!= ĠPath . of (" "). to AbsolutePath ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindent (); Ġcmd (" cd Ġ$ project Folder "); Ġtext Line () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġindent (); Ġcmd (" k ob web Ġrun "); Ġtext Line () ĊĠĠĠ Ġ}. run () Ċ }