/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 1 7 - 2 0 2 0 Ġfact cast . org Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . fact cast . schema . registry . cli . commands Ċ Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . file . Path Ċ import Ġjavax . inject . Singleton Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . fact cast . schema . registry . cli . fs . FileSystem Service Ċ import Ġorg . fact cast . schema . registry . cli . project . Project Service Ċ import Ġorg . fact cast . schema . registry . cli . registry . Distribution Creator Service Ċ import Ġorg . fact cast . schema . registry . cli . validation . Validation Service Ċ import Ġorg . fact cast . schema . registry . cli . validation . format Errors Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ @ Singleton Ċ class ĠCommand ServiceImpl ( ĊĠĠĠ Ġprivate Ġval Ġfile System Service : ĠFileSystem Service , ĊĠĠĠ Ġprivate Ġval Ġvalidation Service : ĠValidation Service , ĊĠĠĠ Ġprivate Ġval Ġproject Service : ĠProject Service , ĊĠĠĠ Ġprivate Ġval Ġdistribution Creator Service : ĠDistribution Creator Service Ċ ) Ġ: ĠCommand Service Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġbuild ( source Root : ĠPath , Ġoutput Root : ĠPath , Ġwhite List : ĠPath ?, Ġschema Strip Titles : ĠBoolean ) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġfile System Service . delete Directory ( output Root ) ĊĊĠĠĠĠĠĠĠ Ġlogger . info (" Starting Ġbuilding ĠFact cast ĠSchema ĠRegistry ") ĊĠĠĠĠĠĠĠ Ġlogger . info (" Input : Ġ$ source Root ") ĊĠĠĠĠĠĠĠ Ġlogger . info (" Output : Ġ$ output Root ") ĊĠĠĠĠĠĠĠ Ġwhite List ?. let Ġ{ Ġlogger . info (" White Ġlist : Ġ$ white List ") Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġproject Service . detect Project ( source Root , Ġwhite List ) ĊĊĠĠĠĠĠĠĠ Ġvalidation Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. validate Project ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ({ Ġerrors Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Errors ( errors ). forEach Ġ{ Ġlogger . error ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistribution Creator Service . create Distribut able ( output Root , Ġit , Ġschema Strip Titles ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Build Ġfinished !") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( e ) Ġ{ Ġ" Something Ġwent Ġwrong " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error ( e ) Ġ{ Ġ" Invalid Ġpaths ." Ġ} ĊĊĠĠĠĠĠĠĠĠ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalidate ( source Root : ĠPath , Ġwhite List : ĠPath ?) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Starting Ġvalidating ĠFact cast ĠSchema ĠRegistry ") ĊĠĠĠĠĠĠĠ Ġlogger . info (" Input : Ġ$ source Root ") ĊĠĠĠĠĠĠĠ Ġwhite List ?. let Ġ{ Ġlogger . info (" White Ġlist : Ġ$ white List ") Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġproject Service . detect Project ( source Root , Ġwhite List ) ĊĊĠĠĠĠĠĠĠ Ġvalidation Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. validate Project ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ({ Ġerrors Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Errors ( errors ). forEach Ġ{ Ġlogger . error ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Validation Ġfailed !") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Project Ġseems Ġto Ġbe Ġvalid !") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error ( e ) Ġ{ Ġ" Invalid Ġpaths " Ġ} ĊĊĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠ Ġ} Ċ } Ċ