/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 - 2 0 2 0 ĠHERE ĠEurope ĠB . V . Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ* Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ* ĠLicense - Filename : ĠLICENSE Ċ Ġ*/ Ċ Ċ package Ġorg . oss review toolkit . model . utils Ċ Ċ import Ġorg . oss review toolkit . model . Identifier Ċ import Ġorg . oss review toolkit . model . Provenance Ċ import Ġorg . oss review toolkit . model . config . Package Configuration Ċ import Ġorg . oss review toolkit . model . readValue Ċ Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠA Ġprovider Ġfor Ġ[ Package Configuration ] s Ġproviding Ġexactly Ġthe Ġpackages Ġof Ġthe Ġgiven Ġlist . Ċ Ġ*/ Ċ class ĠSimple Package Configuration Provider ( ĊĠĠĠ Ġconfigurations : ĠCollection < Package Configuration > Ġ= Ġempty List () Ċ ) Ġ: ĠPackage Configuration Provider Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturn Ġa Ġ[ Simple Package Configuration Provider ] Ġwhich Ġprovides Ġall Ġ[ Package Configuration ] s Ġfound Ġrecursively ĊĠĠĠĠĠĠĠĠ Ġ* Ġin Ġthe Ġgiven Ġ[ directory ]. ĠAll Ġnon - hidden Ġfiles Ġwithin Ġthe Ġgiven Ġ[ directory ] Ġmust Ġbe Ġpackage Ġc uration Ġfiles , ĊĠĠĠĠĠĠĠĠ Ġ* Ġand Ġthe Ġ[ directory ] Ġmust Ġnot Ġcontain Ġmultiple Ġ[ Package Configuration ] s Ġmatching Ġthe Ġsame Ġ[ Identifier ] Ġand ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Provenance ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġfor Directory ( directory : ĠFile ): ĠSimple Package Configuration Provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġdirectory . walk Bottom Up () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter To ( mutable ListOf ()) Ġ{ Ġ! it . is Hidden Ġ&& Ġit . isFile Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . readValue < Package Configuration >() Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSimple Package Configuration Provider ( entries ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġconfigurations ById : ĠMap < Identifier , ĠList < Package Configuration >> ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġconfigurations ById Ġ= Ġconfigurations . groupBy To ( HashMap ()) Ġ{ Ġit . id Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Package Configuration ( packageId : ĠIdentifier , Ġpro venance : ĠPro venance ): ĠPackage Configuration ? Ġ= ĊĠĠĠĠĠĠĠ Ġconfigurations ById [ packageId ]?. filter Ġ{ Ġit . matches ( packageId , Ġpro venance ) Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( it . size Ġ<= Ġ 1 ) Ġ{ Ġ" There Ġmust Ġbe Ġat Ġmost Ġone Ġpackage Ġconfiguration Ġper ĠId Ġand Ġpro venance ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . single OrNull () ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ