package Ġio . fabric 8 . launcher . creator . core Ċ Ċ import Ġjava . io . Buffered Writer Ċ import Ġjava . io . File Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . InputStream Ċ import Ġjava . net . URI Ċ import Ġjava . nio . file .* Ċ Ċ fun Ġjoin ( var arg Ġparts : ĠString ?) Ġ: ĠString Ġ{ ĊĠĠĠ Ġreturn Ġparts . filter Ġ{ Ġit Ġ!= Ġnull Ġ}. join ToString ("/") Ċ } Ċ Ċ fun Ġstream From Path ( path : ĠPath ): ĠInputStream Ġ{ ĊĠĠĠ Ġval Ġresolved Ġ= Ġtry Resolve Class Path ( path ) ĊĠĠĠ Ġreturn ĠFiles . new InputStream ( resolved ) Ċ } Ċ Ċ fun Ġexists From Path ( path : ĠPath ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġresolved Ġ= Ġtry Resolve Class Path ( path ) ĊĠĠĠ Ġreturn Ġif Ġ( resolved Ġ!= Ġnull ) ĠFiles . exists ( resolved ) Ġelse Ġfalse Ċ } Ċ Ċ fun Ġtry Resolve Class Path ( path : ĠPath ): ĠPath ? Ġ{ ĊĠĠĠ Ġfun Ġget FS ( uri : ĠURI ): ĠFileSystem Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileSystem s . get FileSystem ( uri ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠFileSystem NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileSystem s . new FileSystem ( uri , Ġmap Of (" create " Ġto Ġ" false ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġif Ġ( Files . exists ( path )) Ġ{ ĊĠĠĠĠĠĠĠ Ġpath ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ:: stream From Path . java Class . class Loader . getResource ( path . toString ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( url Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( url . protocol Ġ== Ġ" jar ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( jar file , Ġfilepath ) Ġ= Ġurl . path . split (" !", Ġlimit = 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjar uri Ġ= ĠURI (" jar ", Ġjar file , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget FS ( jar uri ). getPath ( filepath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( url . to URI ()). to Path () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġresolve Class Path ( path : ĠPath ): ĠPath Ġ{ ĊĠĠĠ Ġreturn Ġtry Resolve Class Path ( path ) Ġ?: Ġthrow ĠFileNotFoundException (" Couldn 't Ġresolve Ġpath Ġ'$ path '") Ċ } Ċ Ċ fun Ġ< T > Ġ(( T ) Ġ-> ĠT ). compose ( func : Ġ( T ) Ġ-> ĠT ): Ġ( T ) Ġ-> ĠT Ġ= Ġ{ Ġt : ĠT Ġ-> Ġinvoke ( func . invoke ( t )) Ġ} Ċ Ċ fun Ġ< T > Ġcompose ( var arg Ġfuncs : Ġ( T ) Ġ-> ĠT ): Ġ( T ) Ġ-> ĠT Ġ{ ĊĠĠĠ Ġreturn Ġfuncs . reversed Array (). reduce Ġ{ Ġacc , Ġcur Ġ-> ĊĠĠĠĠĠĠĠ Ġcur . compose ( acc ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠSequence < String >. write Lines ( out : ĠBuffered Writer ) Ġ{ ĊĠĠĠ ĠforEach Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠ Ġout . write ( line ) ĊĠĠĠĠĠĠĠ Ġout . new Line () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġrun Cmd ( cmd : ĠString , Ġvar arg Ġargs : ĠString ?): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġrun Cmd ( null , Ġcmd , Ġ* args ) Ċ } Ċ Ċ fun Ġrun Cmd ( cwd : ĠPath ?, Ġcmd : ĠString , Ġvar arg Ġargs : ĠString ?): ĠString Ġ{ ĊĠĠĠ Ġval Ġpb Ġ= ĠProcess Builder ( cmd , Ġ* args ) ĊĠĠĠ Ġif Ġ( cwd Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpb . directory ( cwd . to File ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġpb . redirect Error Stream ( true ) ĊĠĠĠ Ġval Ġp Ġ= Ġpb . start () ĊĠĠĠ Ġval Ġout Ġ= Ġp . inputStream . buffered Reader (). use Ġ{ Ġit . read Text () Ġ} ĊĠĠĠ Ġval Ġexit Code Ġ= Ġp . waitFor () ĊĠĠĠ Ġif Ġ( exit Code Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcmd Txt Ġ= Ġ"$ cmd Ġ${ args . join ToString (" Ġ") }" ĊĠĠĠĠĠĠĠ Ġthrow ĠException (" Command Ġ'$ cmd Txt ' Ġfailed Ġwith Ġerror Ġcode : Ġ$ exit Code \ n OUT : Ġ$ out ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġout Ċ }