/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠBoston ĠVan se ghi Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġb van seg . kotlin commons . assets Ċ Ċ import Ġb van seg . kotlin commons . assets . K Resource . Companion . default Domain Ċ import Ġb van seg . kotlin commons . assets . K Resource . Companion . default Root Ċ import Ġb van seg . kotlin commons . numbers . Hash er Ċ import Ġb van seg . kotlin commons . string . Text ual izer Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġresource Ġeither Ġin Ġthe Ġclasspath Ġor Ġon Ġdisk . Ċ Ġ* Ċ Ġ* Ġ@ author ĠBoston ĠVan se ghi Ċ Ġ* Ġ@ author ĠO ce lot 5 8 3 6 Ċ Ġ* Ġ@ since Ġ 2 . 1 . 1 Ċ Ġ*/ Ċ class ĠK Resource Location : ĠK Resource , ĠAuto Closeable Ġ{ ĊĊĠĠĠ Ġoverride Ġvar Ġdomain : ĠString Ġ= Ġdefault Domain ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġoverride Ġvar Ġlocation : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġoverride Ġval Ġpath : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ default Root $ domain /$ location " ĊĊĠĠĠ Ġconstructor ( domain : ĠString , Ġlocation : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . domain Ġ= Ġdomain ĊĠĠĠĠĠĠĠ Ġthis . location Ġ= Ġlocation ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( parent : ĠK Resource Location ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . domain Ġ= Ġparent . domain ĊĠĠĠĠĠĠĠ Ġthis . location Ġ= Ġparent . location ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( location : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresource Location Raw Ġ= Ġlocation . split (" :" . to Regex (), Ġ 2 ). to Typed Array () ĊĠĠĠĠĠĠĠ Ġif Ġ( resource Location Raw . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . domain Ġ= Ġresource Location Raw [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . location Ġ= Ġresource Location Raw [ 1 ] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . domain Ġ= Ġdefault Domain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . location Ġ= Ġlocation ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġresource Ġby Ġlazy Ġ{ ĠResources . scan . getResources With Path ( path )?. first OrNull () Ġ} ĊĊĠĠĠ Ġval ĠinputStream : ĠInputStream Ġby Ġlazy Ġ{ Ġresource !!. open () Ġ} ĊĠĠĠ Ġval Ġfile : ĠFile Ġby Ġlazy Ġ{ Ġresource !!. classpath Element File Ġ} ĊĊĠĠĠ Ġfun Ġget InputStream Safe (): ĠInputStream ? Ġ= Ġif ( resource Ġ!= Ġnull ) ĠinputStream Ġelse Ġnull ĊĠĠĠ Ġfun ĠgetFile Safe (): ĠFile ? Ġ= Ġif ( resource Ġ!= Ġnull ) Ġfile Ġelse Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġto Resource Mode (): ĠK Resource Location Ġ= Ġthis ĊĊĠĠĠ Ġoverride Ġfun Ġto Actor Mode ( should Close : ĠBoolean ): ĠK Actor Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( should Close ) Ġclose () ĊĠĠĠĠĠĠĠ Ġreturn ĠK Actor ( domain , Ġlocation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ= ĠinputStream . close () ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= ĠText ual izer . builder ( this ) ĊĠĠĠĠĠĠĠ Ġ. append (" domain ", Ġdomain ) ĊĠĠĠĠĠĠĠ Ġ. append (" location ", Ġlocation ) ĊĠĠĠĠĠĠĠ Ġ. append (" path ", Ġpath ) ĊĠĠĠĠĠĠĠ Ġ. toString () ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= ĠHash er ( this ). append ( path ). hashCode () ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġother Ġis ĠK Resource Location Ġ&& Ġthis . domain Ġ== Ġother . domain Ġ&& Ġthis . location Ġ== Ġother . location Ċ }