package Ġcom . uber to b . rest 4 sf tp . testing Ċ Ċ import Ġcom . uber to b . rest 4 sf tp . http . Un author ised Exception Ċ import Ġcom . uber to b . rest 4 sf tp . model .* Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġjava . io . InputStream Ċ import Ġjava . time . Instant Ċ Ċ class ĠS py Simple Remote Client ( ĊĠĠĠ Ġprivate Ġval Ġremote Host : ĠRemote Host , ĊĠĠĠ Ġprivate Ġval Ġfiles : ĠMutable Map < String , ĠMutable List < FileSystem Element >>, ĊĠĠĠ Ġprivate Ġval Ġfiles Content : ĠMutable Map < String , ĠByteArray > Ċ ) Ġ: ĠSimple Remote Client Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Folder ( folder Path : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( connected ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfiles . remove ( folder Path )?. let Ġ{ Ġtrue Ġ} Ġ?: Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Folder ( folder Path : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( connected ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfiles . put If Absent ( folder Path , Ġmutable ListOf ()) ?. let Ġ{ Ġfalse Ġ} Ġ?: Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġconnected : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġfun Ġis Connected (): ĠBoolean Ġ= Ġconnected ĊĊĠĠĠ Ġoverride Ġfun Ġlist Files ( folder Path : ĠString , Ġfilter : ĠFilter ): ĠList < FileSystem Element >? Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( connected ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfiles [ folder Path ]?. filter Ġ{ Ġfilter . accept ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġretrieve File ( folder Path : ĠString , ĠfileName : ĠString ): ĠByteArray ? Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( connected ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfiles Content [" $ folder Path /$ fileName "] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupload File ( folder Path : ĠString , ĠfileName : ĠString , Ġupload : ĠInputStream ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( connected ) ĊĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! files . containsKey ( folder Path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Content Ġ= Ġupload . read Bytes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġftp File Ġ= ĠFileInfo ( fileName , ĠInstant . now (), Ġbytes Content . size . to Long (), Ġfolder Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles [ folder Path ]?. add ( ftp File ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles Content [" $ folder Path /$ fileName "] Ġ= Ġbytes Content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrename File ( folder Path : ĠString , Ġold FileName : ĠString , Ġnew FileName : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( connected ) ĊĊĠĠĠĠĠĠĠ Ġfiles [ folder Path ]?. filter Ġ{ Ġit . name Ġ== Ġold FileName Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Is Instance < FileInfo >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map { Ġ Ġit . copy ( name Ġ= Ġnew FileName ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfiles [ folder Path ]?. any Ġ{ Ġit . name Ġ== Ġnew FileName Ġ} Ġ?: Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete File ( folder Path : ĠString , ĠfileName : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( connected ) ĊĠĠĠĠĠĠĠ Ġfiles Content . remove ("$ folder Path /$ fileName ") ĊĠĠĠĠĠĠĠ Ġreturn Ġfiles [ folder Path ]?. remove If Ġ{ Ġit . name Ġ== ĠfileName Ġ} Ġ?: Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconnect (): ĠSimple Remote Client Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( remote Host . password . contains (" bad ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUn author ised Exception ( message Ġ= Ġ" invalid Ġpassword ") ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġconnected Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊ Ċ }