/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 1 7 - 2 0 2 0 Ġfact cast . org Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġorg . fact cast . schema . registry . cli . fs Ċ Ċ import Ġcom . github . f ge . jackson . Json Loader Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . net . Jar URLConnection Ċ import Ġjava . net . URLConnection Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjavax . inject . Singleton Ċ import Ġkotlin . streams . toList Ċ import Ġorg . apache . commons . io . FileUtils Ċ Ċ @ Singleton Ċ class ĠFileSystem ServiceImpl Ġ: ĠFileSystem Service Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġexists ( path : ĠPath ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . exists ( path ) ĊĊĠĠĠ Ġoverride Ġfun Ġlist Directories ( path : ĠPath ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġx Ġ-> ĠFiles . isDirectory ( x ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlist Files ( path : ĠPath ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġx Ġ-> ĠFiles . is Regular File ( x ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġensure Directories ( output Path : ĠPath ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFiles . create Directories ( output Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ToFile ( filePath : ĠFile , Ġbody : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFileUtils . writeString ToFile ( filePath , Ġbody , ĠCharset . default Charset ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread ToString ( filePath : ĠFile ): ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . readFile ToString ( filePath , ĠCharset . default Charset ()) ĊĊĠĠĠ Ġoverride Ġfun Ġcopy File ( from : ĠFile , Ġto : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFileUtils . copy File ( from , Ġto ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread ToJson Node ( path : ĠPath ) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠJson Loader . from File ( path . to File ()) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Directory ( path : ĠPath ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . delete Directory ( path . to File ()) ĊĊĠĠĠ Ġoverride Ġfun Ġread ToBytes ( file : ĠPath ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFiles . read All Bytes ( file ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcopy From Classpath ( source : ĠString , Ġtarget : ĠPath ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġjava Class . class Loader . getResource ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" did nt Ġfound Ġ'$ source ' Ġon Ġclasspath ") ĊĊĠĠĠĠĠĠĠ Ġval Ġurl Connection : ĠURL Connection Ġ= Ġurl . open Connection () ĊĠĠĠĠĠĠĠ Ġval ĠtoString Ġ= Ġurl . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( toString . startsWith (" file :" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . copy Directory ( File ( url . path ), Ġtarget . to File ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( toString . startsWith (" jar :" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Jar Resources Re cursively ( target . to File (), Ġurl Connection Ġas ĠJar URLConnection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġthrow ĠIllegalStateException (" not Ġsupported ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcopy Directory ( from : ĠPath , Ġto : ĠPath ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFileUtils . copy Directory ( from . to File (), Ġto . to File ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlist ( path : ĠPath ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . list ( path ). toList () ĊĊĠĠĠ Ġprivate Ġfun Ġcopy Jar Resources Re cursively ( destination : ĠFile , Ġjar Connection : ĠJar URLConnection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjar File Ġ= Ġjar Connection . jar File ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( entry Ġin Ġjar File . entries ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . name . startsWith ( jar Connection . entry Name )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName : ĠString Ġ= Ġentry . name . replace ( jar Connection . entry Name , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( destination , ĠfileName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! entry . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjar File . getInputStream ( entry ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . copy ToFile ( it , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ