/** Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠRichard ĠH aus wal d Ġ- Ġhttps :// quantum maid . de /. Ċ Ġ* Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ċ Ġ* Ġor Ġmore Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ċ Ġ* Ġdistributed Ġwith Ġthis Ġwork Ġfor Ġadditional Ġinformation Ċ Ġ* Ġregarding Ġcopyright Ġownership . Ġ ĠThe ĠASF Ġlicenses Ġthis Ġfile Ċ Ġ* Ġto Ġyou Ġ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 Ġde . quantum maid . doc um aid . shared . filesystem Ċ Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ Ċ class ĠPhysical FileSystem Structure Builder Ġinternal Ġconstructor ( val Ġphysical Directory Builder : ĠPhysical Directory Builder ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġa Physical File Structure In ( directory Name : ĠString ): ĠPhysical FileSystem Structure Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġphysical Directory Builder Ġ= ĠPhysical Directory Builder . a Directory ( directory Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPhysical FileSystem Structure Builder ( physical Directory Builder ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith ( var arg Ġphysical FileObject Builders : ĠPhysical FileObject Builder ): ĠPhysical FileSystem Structure Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġphysical FileObject Builders . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphysical Directory Builder . with ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate (): ĠPhysical FileSystem Structure Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Working Dir Ġ= ĠPaths . get ( System . getProperty (" user . dir ")) ĊĠĠĠĠĠĠĠ Ġval Ġroot Directory Ġ= Ġphysical Directory Builder . create ( current Working Dir ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPhysical FileSystem Structure ( root Directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconstruct (): ĠPhysical FileSystem Structure Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Working Dir Ġ= ĠPaths . get ( System . getProperty (" user . dir ")) ĊĠĠĠĠĠĠĠ Ġval Ġroot Directory Ġ= Ġphysical Directory Builder . construct ( current Working Dir ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPhysical FileSystem Structure ( root Directory ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠPhysical FileSystem Structure Ġinternal Ġconstructor ( val Ġbase Directory : ĠPhysical Directory ) Ġ{ ĊĊĠĠĠ Ġfun Ġclean Up () Ġ{ ĊĠĠĠĠĠĠĠ Ġbase Directory . clean Up () ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠPhysical FileObject Builder Ġ{ ĊĠĠĠ Ġfun Ġcreate ( parent Path : ĠPath ): ĠPhysical FileObject ĊĠĠĠ Ġfun Ġconstruct ( parent Path : ĠPath ): ĠPhysical FileObject Ċ } Ċ Ċ abstract Ġclass ĠPhysical FileObject ( val Ġpath : ĠPath ) Ġ{ ĊĠĠĠ Ġval Ġname Ġ= Ġpath . fileName . toString () ĊĠĠĠ Ġabstract Ġfun Ġclean Up () Ċ } Ċ Ċ class ĠPhysical Directory Builder Ġprivate Ġconstructor ( private Ġval Ġname : ĠString ) Ġ: ĠPhysical FileObject Builder Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġchildren Ġ= ĠArrayList < Physical FileObject Builder >() ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġa Directory ( name : ĠString ): ĠPhysical Directory Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPhysical Directory Builder ( name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith ( var arg Ġphysical FileObject Builders : ĠPhysical FileObject Builder ): ĠPhysical Directory Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġphysical FileObject Builders . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate ( parent Path : ĠPath ): ĠPhysical Directory Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġparent Path . resolve ( name ) ĊĠĠĠĠĠĠĠ Ġcreate Directory ( path ) ĊĠĠĠĠĠĠĠ Ġval Ġchildren Objects Ġ= Ġchildren ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . create ( path ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPhysical Directory ( path , Ġchildren Objects . to Mutable List ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconstruct ( parent Path : ĠPath ): ĠPhysical Directory Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġparent Path . resolve ( name ) ĊĠĠĠĠĠĠĠ Ġval Ġchildren Objects Ġ= Ġchildren ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . construct ( path ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPhysical Directory ( path , Ġchildren Objects . to Mutable List ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠPhysical Directory Ġinternal Ġconstructor ( ĊĠĠĠ Ġpath : ĠPath , ĊĠĠĠ Ġval Ġchildren : ĠMutable List < Physical FileObject > Ċ ) Ġ: ĠPhysical FileObject ( path ) Ġ{ ĊĊĠĠĠ Ġfun Ġadd ( children : ĠList < Physical FileObject >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . children . addAll ( children ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclean Up () Ġ{ ĊĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ Ġit . clean Up () Ġ} ĊĠĠĠĠĠĠĠ Ġdelete Directory ( path ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠPhysical File Builder Ġprivate Ġconstructor ( val Ġname : ĠString ) Ġ: ĠPhysical FileObject Builder Ġ{ ĊĊĠĠĠ Ġvar Ġcontent : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġa File ( name : ĠString ): ĠPhysical File Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPhysical File Builder ( name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Content ( content : ĠString ): ĠPhysical File Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . content Ġ= Ġcontent ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate ( parent Path : ĠPath ): ĠPhysical FileObject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġparent Path . resolve ( name ) ĊĠĠĠĠĠĠĠ Ġcreate File With Content ( path , Ġcontent ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPhysical File ( path , Ġcontent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconstruct ( parent Path : ĠPath ): ĠPhysical FileObject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġparent Path . resolve ( name ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPhysical File ( path , Ġcontent ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠPhysical File Ġinternal Ġconstructor ( path : ĠPath , Ġval Ġcontent : ĠString ) Ġ: ĠPhysical FileObject ( path ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġclean Up () Ġ{ ĊĠĠĠĠĠĠĠ Ġdelete File If Existing ( path ) ĊĠĠĠ Ġ} Ċ } Ċ