// ĠCopyright ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ // ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ċ package Ġcom . amazon . payments files Ċ Ċ import Ġcom . github . aj alt . m ord ant . Ansi Code Ċ import Ġcom . github . aj alt . m ord ant . Term Colors Ċ import Ġjava . io . File Ċ import Ġjava . io . OutputStream Ċ import Ġjava . io . OutputStream Writer Ċ Ċ /** Ċ Ġ* ĠDirect or Ġto ĠStandard ĠOutput Ċ Ġ* Ċ Ġ* ĠClass Ġimplementing ĠValidation Output Director Ġthat Ġforwards Ġa Ġfile Ġvalidation Ġto Ġan Ġoutput Ġstream . Ġ ĠIf Ġthe Ġoutput Ċ Ġ* Ġstream Ġis Ġthe Ġstandard Ġoutput Ġ( which Ġis Ġthe Ġdefault ), Ġit Ġwill Ġadd Ġtext Ġstyling Ċ Ġ*/ Ċ class ĠOutputStream Director ( ĊĠĠĠ Ġprivate Ġval ĠoutputStream : ĠOutputStream Ġ= ĠSystem . out , ĊĠĠĠ Ġoverride Ġval Ġverbose : ĠBoolean Ġ= Ġfalse Ċ ) Ġ: ĠOutput Director Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġwriter Ġ= ĠOutputStream Writer ( output Stream ) ĊĠĠĠ Ġprivate Ġvar Ġerror Count Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOpen - source Ġtool Ġfor Ġdetect ing Ġthe Ġcommand Ġwindow 's Ġcolor Ġstyling Ġcompatibility Ġand Ġstyling Ġthe Ġtext Ġif Ġpossible ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġt Ġ= ĠTerm Colors () ĊĠĠĠ Ġprivate Ġfun ĠAn si Code . print ( msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . append ( if Ġ( output Stream Ġ== ĠSystem . out ) Ġthis ( msg ) Ġelse Ġmsg ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWrite Ġa Ġbold Ġheader Ġto Ġinform Ġthe Ġreader Ġof Ġthe Ġfile Ġname Ġbeing Ġvalidated ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġsetup ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġt . bold . print ("* Ġ* Ġ* Ġ* Ġ* \ n Checking ĠErrors Ġfor Ġ${ file . name }\ n * Ġ* Ġ* Ġ* Ġ* \ n \ n ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReport Ġa Ġfatal Ġerror Ġin Ġred Ġand Ġregister Ġan Ġerror Ġwas Ġseen ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġreport Fatal Error ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġt . red . print (" Fatal Ġerror : Ġ${ e . message }\ n \ n ") ĊĠĠĠĠĠĠĠ Ġerror Count ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPrint Ġa Ġline Ġnumber Ġand Ġall Ġcorresponding Ġfield Ġerrors Ġfound Ġthere Ġin Ġred ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġreport Error Line ( error Line : ĠError Line ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror Count ++ ĊĠĠĠĠĠĠĠ Ġprint Error Line Header ( error Line ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( e Ġin Ġerror Line . errors ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Error ( e , Ġverbose ) ĊĠĠĠĠĠĠĠ Ġwriter . append ("\ n ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprint Error Line Header ( error Line : ĠError Line ) Ġ= Ġerror Line . run Ġ{ ĊĠĠĠĠĠĠĠ Ġt . red . print ("${ errors . size } Ġerror ${ if Ġ( errors . size Ġ> Ġ 1 ) Ġ" s " Ġelse Ġ"" } Ġfound Ġin Ġline Ġ#$ line No :\ n ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprint Error ( error : ĠField Error , Ġverbose : ĠBoolean ) Ġ= ĊĠĠĠĠĠĠĠ Ġt . red . print (" --> Ġ" Ġ+ Ġ( if Ġ( verbose ) Ġerror . verbose Ġelse Ġerror . normal ) Ġ+ Ġ"\ n ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInform Ġthe Ġreader Ġif Ġno Ġerrors Ġwere Ġfound Ġand Ġthen Ġclose Ġthe ĠOutputStream Writer ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcleanup ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( error Count Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Pass () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAut oc lose able Ġclose Ġmethod Ġcloses Ġthe Ġstream Ġwriter Ġand Ġits Ġunderlying Ġstream ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreport Pass () Ġ= Ġt . green . print (" Pass : Ġno Ġerrors Ġfound \ n \ n ") Ċ } Ċ