/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠSquare , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ġapp . cash . license e Ċ Ċ import Ġjava . io . Serializable Ċ Ċ internal Ġdata Ġclass ĠValidation Config ( ĊĠ Ġval Ġallowed Identifiers : ĠSet < String >, ĊĠ Ġval Ġallowed Urls : ĠSet < String >, ĊĠ Ġval Ġallowed Coordinates : ĠMap < Dependency Coordinates , ĠString ? >, Ċ ) Ġ: ĠSerializable Ċ Ċ internal Ġdata Ġclass ĠDependency Coordinates ( ĊĠ Ġval Ġgroup : ĠString , ĊĠ Ġval Ġartifact : ĠString , ĊĠ Ġval Ġversion : ĠString , Ċ ) Ġ: ĠSerializable Ċ Ċ internal Ġfun Ġvalidate Artifacts ( ĊĠ Ġvalidation Config : ĠValidation Config , ĊĠ Ġartifacts : ĠList < Artifact Detail >, Ċ ): ĠValidation Results Ġ{ ĊĠ Ġval Ġconfig Results Ġ= Ġmutable ListOf < Validation Result >() ĊĠ Ġval Ġartifact Result Map Ġ= Ġmutable Map Of < Artifact Detail , ĠList < Validation Result >>() ĊĊĠ Ġval Ġunused Allowed Identifiers Ġ= Ġvalidation Config . allowed Identifiers . to Mutable Set () ĊĠ Ġval Ġunused Allowed Urls Ġ= Ġvalidation Config . allowed Urls . to Mutable Set () ĊĠ Ġval Ġunused Allowed Coordinates Ġ= Ġvalidation Config . allowed Coordinates . keys . to Mutable Set () ĊĊĠ Ġfor Ġ( artifact Ġin Ġartifacts ) Ġ{ ĊĠĠĠ Ġval Ġartifact Results Ġ= Ġmutable ListOf < Validation Result >() ĊĠĠĠ Ġval Ġdependency Coordinates Ġ= ĊĠĠĠĠĠ ĠDependency Coordinates ( artifact . groupId , Ġartifact . artifactId , Ġartifact . version ) ĊĊĠĠĠ Ġ// ĠTrue Ġon Ġfirst Ġmatch . ĠPer Ġhttps :// maven . apache . org / ref / 3 . 5 . 4 / maven - model / maven . html # project , ĊĠĠĠ Ġ// Ġ> ĠIf Ġmultiple Ġlicenses Ġare Ġlisted , Ġit Ġis Ġassumed Ġthat Ġthe Ġuser Ġcan Ġselect Ġany Ġof Ġthem , Ġnot ĊĠĠĠ Ġ// Ġ> Ġthat Ġthey Ġmust Ġaccept Ġall . ĊĠĠĠ Ġvar Ġvalidated Ġ= Ġfalse ĊĊĠĠĠ Ġfor Ġ( sp dx License Ġin Ġartifact . sp dx License s ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( sp dx License . identifier Ġin Ġvalidation Config . allowed Identifiers ) Ġ{ ĊĠĠĠĠĠĠĠ Ġunused Allowed Identifiers Ġ-= Ġsp dx License . identifier ĊĠĠĠĠĠĠĠ Ġartifact Results Ġ+= ĠValidation Result . Info ( ĊĠĠĠĠĠĠĠĠĠ Ġ" SP DX Ġidentifier Ġ'${ sp dx License . identifier }' Ġallowed " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġvalidated Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( sp dx License . url Ġin Ġvalidation Config . allowed Urls ) Ġ{ ĊĠĠĠĠĠĠĠ Ġunused Allowed Urls Ġ-= Ġsp dx License . url ĊĠĠĠĠĠĠĠ Ġartifact Results Ġ+= ĠValidation Result . Warning ( ĊĠĠĠĠĠĠĠĠĠ Ġ" License ĠURL Ġ'${ sp dx License . url }' Ġwas Ġallowed Ġbut Ġcould Ġuse ĠSPDX Ġidentifier Ġ'${ sp dx License . identifier } '" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġvalidated Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ(! validated ) Ġ{ ĊĠĠĠĠĠ Ġfor Ġ( unknown License Ġin Ġartifact . unknown License s ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( unknown License . url Ġ!= Ġnull Ġ&& Ġunknown License . url Ġin Ġvalidation Config . allowed Urls ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġunused Allowed Urls Ġ-= Ġunknown License . url ĊĠĠĠĠĠĠĠĠĠ Ġartifact Results Ġ+= ĠValidation Result . Info (" Unknown Ġlicense ĠURL Ġ'${ unknown License . url }' Ġallowed ") ĊĠĠĠĠĠĠĠĠĠ Ġvalidated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ(! validated ) Ġ{ ĊĠĠĠĠĠ Ġfor Ġ( sp dx License Ġin Ġartifact . sp dx License s ) Ġ{ ĊĠĠĠĠĠĠĠ Ġartifact Results Ġ+= ĠValidation Result . Error ( ĊĠĠĠĠĠĠĠĠĠ Ġ" SP DX Ġidentifier Ġ'${ sp dx License . identifier }' Ġis ĠNOT Ġallowed " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġfor Ġ( unknown License Ġin Ġartifact . unknown License s ) Ġ{ ĊĠĠĠĠĠĠĠ Ġartifact Results Ġ+= ĠValidation Result . Error ( ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( unknown License . url Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unknown Ġlicense Ġname Ġ'${ unknown License . name }' Ġwith Ġno ĠURL Ġis ĠNOT Ġallowed " ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unknown Ġlicense ĠURL Ġ'${ unknown License . url }' Ġis ĠNOT Ġallowed " ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( artifact . sp dx License s . isEmpty () Ġ&& Ġartifact . unknown License s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġartifact Results Ġ+= ĠValidation Result . Error (" Artifact Ġdecl ares Ġno Ġlicenses !") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( artifact Results . any Ġ{ Ġit Ġis ĠValidation Result . Error Ġ}) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( dependency Coordinates Ġin Ġvalidation Config . allowed Coordinates ) Ġ{ ĊĠĠĠĠĠĠĠ Ġunused Allowed Coordinates Ġ-= Ġdependency Coordinates ĊĊĠĠĠĠĠĠĠ Ġartifact Results Ġ+= ĠValidation Result . Info ( ĊĠĠĠĠĠĠĠĠĠ Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Coordinate Ġversion Ġis Ġallowed ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreason Ġ= Ġvalidation Config . allowed Coordinates [ dependency Coordinates ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reason Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġbecause Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( reason ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDown grade Ġerrors Ġto Ġinfo . ĊĠĠĠĠĠĠĠ Ġartifact Results . forEach Indexed Ġ{ Ġindex , Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠValidation Result . Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġartifact Results [ index ] Ġ= ĠValidation Result . Info ( result . message ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcandidate Ġ= Ġvalidation Config . allowed Coordinates . keys ĊĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġit . group Ġ== Ġartifact . groupId Ġ&& Ġit . artifact Ġ== Ġartifact . artifactId Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( candidate Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġartifact Results Ġ+= ĠValidation Result . Warning ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Coordinates Ġmatch Ġan Ġallowed Ġdependency Ġbut Ġversion Ġdoes Ġnot Ġmatch Ġ(${ candidate . version } Ġ!= Ġ${ artifact . version })" ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġartifact Result Map [ artifact ] Ġ= Ġartifact Results ĊĠ Ġ} ĊĊĠ Ġfor Ġ( unused Allowed Identifier Ġin Ġunused Allowed Identifiers ) Ġ{ ĊĠĠĠ Ġconfig Results Ġ+= ĠValidation Result . Warning (" Allowed ĠSPDX Ġidentifier Ġ'$ unused Allowed Identifier ' Ġis Ġunused ") ĊĠ Ġ} ĊĠ Ġfor Ġ( unused Allowed Url Ġin Ġunused Allowed Urls ) Ġ{ ĊĠĠĠ Ġconfig Results Ġ+= ĠValidation Result . Warning (" Allowed Ġlicense ĠURL Ġ'$ unused Allowed Url ' Ġis Ġunused ") ĊĠ Ġ} ĊĠ Ġfor Ġ( unused Allowed Coordinate Ġin Ġunused Allowed Coordinates ) Ġ{ ĊĠĠĠ Ġconfig Results Ġ+= ĠValidation Result . Warning (" Allowed Ġdependency Ġ'${ unused Allowed Coordinate . group }:${ unused Allowed Coordinate . artifact }:${ unused Allowed Coordinate . version }' Ġis Ġunused ") ĊĠ Ġ} ĊĊĠ Ġreturn ĠValidation Results ( config Results , Ġartifact Result Map ) Ċ } Ċ Ċ internal Ġdata Ġclass ĠValidation Results ( ĊĠ Ġval Ġconfig Results : ĠList < Validation Result >, ĊĠ Ġval Ġartifact Results : ĠMap < Artifact Detail , ĠList < Validation Result >>, Ċ ) Ġ{ ĊĠ Ġval Ġcontains Errors : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġconfig Results . any Ġ{ Ġit Ġis ĠValidation Result . Error Ġ} Ġ|| ĊĠĠĠĠĠ Ġartifact Results . any Ġ{ Ġit . value . any Ġ{ Ġit Ġis ĠValidation Result . Error Ġ} Ġ} Ċ } Ċ Ċ internal Ġsealed Ġclass ĠValidation Result Ġ{ ĊĠ Ġabstract Ġval Ġmessage : ĠString ĊĊĠ Ġdata Ġclass ĠInfo ( override Ġval Ġmessage : ĠString ) Ġ: ĠValidation Result () ĊĠ Ġdata Ġclass ĠWarning ( override Ġval Ġmessage : ĠString ) Ġ: ĠValidation Result () ĊĠ Ġdata Ġclass ĠError ( override Ġval Ġmessage : ĠString ) Ġ: ĠValidation Result () Ċ } Ċ