/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠHERE ĠEurope ĠB . V . Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 2 ĠB os ch . IO ĠGmbH Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 . helper . commands Ċ Ċ import Ġcom . github . aj alt . cli kt . core . Cli kt Command Ċ import Ġcom . github . aj alt . cli kt . parameters . groups . mut ually Exclusive Options Ċ import Ġcom . github . aj alt . cli kt . parameters . groups . single Ċ import Ġcom . github . aj alt . cli kt . parameters . options . associate Ċ import Ġcom . github . aj alt . cli kt . parameters . options . convert Ċ import Ġcom . github . aj alt . cli kt . parameters . options . default Ċ import Ġcom . github . aj alt . cli kt . parameters . options . option Ċ import Ġcom . github . aj alt . cli kt . parameters . options . required Ċ import Ġcom . github . aj alt . cli kt . parameters . types . file Ċ Ċ import Ġorg . oss review toolkit . helper . common . Package Configuration Option Ċ import Ġorg . oss review toolkit . helper . common . create Provider Ċ import Ġorg . oss review toolkit . model . Identifier Ċ import Ġorg . oss review toolkit . model . License Finding Ċ import Ġorg . oss review toolkit . model . config . Or t Configuration Ċ import Ġorg . oss review toolkit . model . utils . Finding C uration Matcher Ċ import Ġorg . oss review toolkit . model . utils . Root License Matcher Ċ import Ġorg . oss review toolkit . model . yaml Mapper Ċ import Ġorg . oss review toolkit . scanner . Scan Results Storage Ċ import Ġorg . oss review toolkit . utils . common . expand T ilde Ċ import Ġorg . oss review toolkit . utils . ort . ORT _ CONFIG _ FILENAME Ċ import Ġorg . oss review toolkit . utils . ort . ort Config Directory Ċ import Ġorg . oss review toolkit . utils . sp dx . Sp dx Constants Ċ import Ġorg . oss review toolkit . utils . sp dx . Sp dx Expression Ċ Ċ class ĠGet Package License s Command Ġ: ĠCli kt Command ( ĊĠĠĠ Ġhelp Ġ= Ġ" Shows Ġthe Ġroot Ġlicense Ġand Ġthe Ġdetected Ġlicense Ġfor Ġa Ġpackage Ġden oted Ġby Ġthe Ġgiven Ġpackage Ġidentifier ." Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġconfig File Ġby Ġoption ( ĊĠĠĠĠĠĠĠ Ġ"-- config ", ĊĠĠĠĠĠĠĠ Ġhelp Ġ= Ġ" The Ġpath Ġto Ġthe ĠOR T Ġconfiguration Ġfile Ġthat Ġconfig ures Ġthe Ġscan Ġresults Ġstorage ." ĊĠĠĠ Ġ). convert Ġ{ Ġit . expand T ilde () Ġ} ĊĠĠĠĠĠĠĠ Ġ. file ( must Exist Ġ= Ġtrue , Ġcan Be File Ġ= Ġtrue , Ġcan Be Dir Ġ= Ġfalse , Ġmust Be Writable Ġ= Ġfalse , Ġmust Be Readable Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ. convert Ġ{ Ġit . absolute File . normalize () Ġ} ĊĠĠĠĠĠĠĠ Ġ. default ( ort Config Directory . resolve ( ORT _ CONFIG _ FILENAME )) ĊĊĠĠĠ Ġprivate Ġval Ġconfig Arguments Ġby Ġoption ( ĊĠĠĠĠĠĠĠ Ġ"- P ", ĊĠĠĠĠĠĠĠ Ġhelp Ġ= Ġ" Override Ġa Ġkey - value Ġpair Ġin Ġthe Ġconfiguration Ġfile . ĠFor Ġexample : Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- P Ġort . scanner . storage s . postgres . schema = test Schema " ĊĠĠĠ Ġ). associate () ĊĊĠĠĠ Ġprivate Ġval Ġpackage Id Ġby Ġoption ( ĊĠĠĠĠĠĠĠ Ġ"-- package - id ", ĊĠĠĠĠĠĠĠ Ġhelp Ġ= Ġ" The Ġtarget Ġpackage Ġfor Ġwhich Ġthe Ġlicenses Ġshall Ġbe Ġlisted ." ĊĠĠĠ Ġ). convert Ġ{ ĠIdentifier ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. required () ĊĊĠĠĠ Ġprivate Ġval Ġpackage Configuration Option Ġby Ġmut ually Exclusive Options ( ĊĠĠĠĠĠĠĠ Ġoption ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- package - configuration - dir ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhelp Ġ= Ġ" The Ġdirectory Ġcontaining Ġthe Ġpackage Ġconfiguration Ġfiles Ġto Ġread Ġas Ġinput . ĠIt Ġis Ġsearched Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" re cursively ." ĊĠĠĠĠĠĠĠ Ġ). convert Ġ{ Ġit . expand T ilde () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. file ( must Exist Ġ= Ġtrue , Ġcan Be File Ġ= Ġfalse , Ġcan Be Dir Ġ= Ġtrue , Ġmust Be Writable Ġ= Ġfalse , Ġmust Be Readable Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. convert Ġ{ ĠPackage Configuration Option . Dir ( it ) Ġ}, ĊĠĠĠĠĠĠĠ Ġoption ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- package - configuration - file ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhelp Ġ= Ġ" The Ġfile Ġcontaining Ġthe Ġpackage Ġconfigurations Ġto Ġread Ġas Ġinput ." ĊĠĠĠĠĠĠĠ Ġ). convert Ġ{ Ġit . expand T ilde () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. file ( must Exist Ġ= Ġtrue , Ġcan Be File Ġ= Ġtrue , Ġcan Be Dir Ġ= Ġfalse , Ġmust Be Writable Ġ= Ġfalse , Ġmust Be Readable Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. convert Ġ{ ĠPackage Configuration Option . File ( it ) Ġ} ĊĠĠĠ Ġ). single () ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscan Results Ġ= Ġget Scan Result Storage (). read ( packageId ). get OrDefault ( emptyList ()) ĊĠĠĠĠĠĠĠ Ġval Ġpackage Configuration Provider Ġ= Ġpackage Configuration Option . create Provider () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġscan Results . first OrNull ()?. let Ġ{ Ġscan Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Configurations Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Configuration Provider . get Package Configurations ( packageId , Ġscan Result . pro venance ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlicense Finding Cur ations Ġ= Ġpackage Configurations . flatMap Ġ{ Ġit . license Finding Cur ations Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Exclude s Ġ= Ġpackage Configurations . flatMap Ġ{ Ġit . path Exclude s Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnon Excluded License Find ings Ġ= Ġscan Result . summary . license Find ings . filter Ġ{ Ġlicense Finding Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Exclude s . none Ġ{ Ġit . matches ( license Finding . location . path ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur ated Find ings Ġ= ĠFind ing C uration Matcher () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply All ( non Excluded License Find ings , Ġlicense Finding Cur ations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . cur ated Finding Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdetected License Ġ= Ġcur ated Find ings . to Sp dx Expression () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot License Ġ= ĠRoot License Matcher (). get Applicable Root License Find ings For Directories ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlicense Find ings Ġ= Ġcur ated Find ings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirectories Ġ= ĠlistOf ("") Ġ// ĠTODO : Ġuse Ġthe Ġproper ĠV CS Ġpath . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). values . flatten (). to Sp dx Expression () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult ( detected License , Ġroot License ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠResult ( Sp dx Constants . NO ASSERT ION , ĠSp dx Constants . NO ASSERT ION ) ĊĊĠĠĠĠĠĠĠ Ġprintln ( result . to Yaml ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Scan Result Storage (): ĠScan Results Storage Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġort Configuration Ġ= ĠO rt Configuration . load ( config Arguments , Ġconfig File ) ĊĠĠĠĠĠĠĠ ĠScan Results Storage . configure ( ort Configuration . scanner ) ĊĠĠĠĠĠĠĠ Ġreturn ĠScan Results Storage . storage ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠCollection < License Finding >. to Sp dx Expression (): ĠString Ġ= ĊĠĠĠ Ġif Ġ( isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠSp dx Constants . NONE ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġas Sequence (). map Ġ{ Ġit . license Ġ}. distinct (). reduce ( Sp dx Expression :: and ). sort (). toString () ĊĠĠĠ Ġ} Ċ Ċ private Ġdata Ġclass ĠResult ( ĊĠĠĠ Ġval Ġdetected License : ĠString , ĊĠĠĠ Ġval Ġroot License : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġto Yaml (): ĠString Ġ= Ġyaml Mapper . writer WithDefault PrettyPrinter (). writeValue AsString ( this ) Ċ } Ċ