/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 2 Ġdz iko ys k Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . repos il ite . storage . filesystem Ċ Ċ import Ġcom . repos il ite . storage . filesystem . FileSystem Storage Provider Ċ import Ġcom . repos il ite . web . http . ErrorResponse Ċ import Ġio . jav al in . http . Http Code . IN SUFF IC IENT _ STORAGE Ċ import Ġp anda . std . Result Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ Ċ /** Ċ Ġ* Ġ@ param Ġroot Directory Ġroot Ġdirectory Ġof Ġstorage Ġspace Ċ Ġ* Ġ@ param ĠmaxSize Ġthe Ġlargest Ġamount Ġof Ġstorage Ġavailable Ġfor Ġuse , Ġin Ġbytes Ċ Ġ*/ Ċ internal Ġclass ĠFixed Quota ( root Directory : ĠPath , Ġprivate Ġval ĠmaxSize : ĠLong ) Ġ: ĠFileSystem Storage Provider ( root Directory ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( maxSize Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Max Ġsize Ġparameter Ġhas Ġto Ġbe Ġa Ġvalue Ġgreater Ġthan Ġ 0 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcan Hold ( content Length : ĠLong ): ĠResult < Long , ĠError Response > Ġ= ĊĠĠĠĠĠĠĠ Ġusage () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġusage Ġ-> ĠmaxSize Ġ- Ġusage Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter ({ Ġavailable Ġ-> Ġcontent Length Ġ<= Ġavailable Ġ}, Ġ{ ĠError Response ( IN SUFF IC IENT _ STORAGE , Ġ" Repository Ġcannot Ġhold Ġthe Ġgiven Ġfile Ġ(${ maxSize Ġ- Ġit } Ġ+ Ġ$ content Length Ġ> Ġ$ maxSize )") Ġ}) Ċ Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ param Ġroot Directory Ġroot Ġdirectory Ġof Ġstorage Ġspace Ċ Ġ* Ġ@ param Ġmax Percentage Ġthe Ġmaximum Ġpercentage Ġof Ġthe Ġdisk Ġavailable Ġfor Ġuse Ċ Ġ*/ Ċ internal Ġclass ĠPer centage Quota ( ĊĠĠĠ Ġprivate Ġval Ġroot Directory : ĠPath , ĊĠĠĠ Ġprivate Ġval Ġmax Percentage : ĠDouble Ċ ) Ġ: ĠFileSystem Storage Provider ( root Directory ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( max Percentage Ġ> Ġ 1 Ġ|| Ġmax Percentage Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Percentage Ġparameter Ġhas Ġto Ġbe Ġa Ġvalue Ġbetween Ġ 0 . 0 Ġand Ġ 1 . 0 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcan Hold ( content Length : ĠLong ): ĠResult < Long , ĠError Response > Ġ= ĊĠĠĠĠĠĠĠ Ġusage () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġusage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcapacity Ġ= ĠFiles . getFile Store ( root Directory ). usable Space ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġcapacity Ġ* Ġmax Percentage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax . to Long () Ġ- Ġusage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter ({ Ġavailable Ġ-> Ġcontent Length Ġ<= Ġavailable Ġ}, Ġ{ ĠError Response ( IN SUFF IC IENT _ STORAGE , Ġ" Repository Ġcannot Ġhold Ġthe Ġgiven Ġfile Ġ($ content Length Ġtoo Ġmuch Ġfor Ġ$ max Percentage % )") Ġ}) Ċ Ċ } Ċ