/* - Ċ Ġ* Ġ#% L Ċ Ġ* Ġorg . w inter sleep . avro : w inter sleep - avro - codegen Ċ Ġ* Ġ%% Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠD avy ĠVer st appen Ċ Ġ* Ġ%% Ċ Ġ* Ġ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 . Ċ Ġ* Ġ# L % Ċ Ġ*/ Ċ package Ġorg . w inter sleep . avro . codegen Ċ Ċ import Ġorg . apache . avro . Schema Ċ import Ġorg . apache . avro . compiler . specific . Specific Compiler Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ Ċ class ĠCode Generator ( private Ġval Ġoutput Dir : ĠFile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġimported Files : ĠList < File >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġinput Paths : ĠList < File >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġforce : ĠBoolean ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( Code Generator :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġu pt od ate File Ġ= ĠFile ( output Dir , Ġ". w inter sleep - avro . upt od ate ") ĊĊĠĠĠ Ġfun Ġexecute () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Files Ġ= Ġfind Input Files ( input Paths ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Up ToDate ( input Files )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Generated Ġcode Ġis Ġup Ġto Ġdate , Ġskipping Ġgeneration .") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġbuild Schema ( input Files ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompiler Ġ= ĠSpecific Compiler ( schema ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Maker Ġ= ĠName Maker ( compiler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate ( name Maker , Ġschema ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtouch U pt od ate File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Code Ġgeneration Ġfinished .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Schema ( input Files : ĠList < File >): ĠSchema Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( input Files . isNotEmpty ()) ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠSchema . Parser () ĊĠĠĠĠĠĠĠ Ġvar Ġschema : ĠSchema ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfor Ġ( f Ġin Ġimported Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= Ġparser . parse ( f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( f Ġin Ġinput Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f Ġ! in Ġimported Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= Ġparser . parse ( f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġschema !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Input Files ( input Paths : ĠList < File >): ĠList < File > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < File >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( input Path Ġin Ġinput Paths ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Path . isFile Ġ-> Ġif Ġ( input Path . name . endsWith (". av sc ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( input Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Path . isDirectory Ġ-> Ġresult . addAll ( find Input Files ( input Path . list Files (). asList ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlog . debug (" Ign oring Ġunknown Ġtype Ġof Ġpath : Ġ{}", Ġinput Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Up ToDate ( input Files : ĠList < File >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( force ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! upt od ate File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlast Generated Ġ= Ġu pt od ate File . lastModified () ĊĠĠĠĠĠĠĠ Ġfor Ġ( imported File Ġin Ġimported Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( imported File . lastModified () Ġ> Ġlast Generated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( inputFile Ġin Ġinput Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inputFile . lastModified () Ġ> Ġlast Generated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate ( name Maker : ĠName Maker , Ġschema : ĠSchema ) Ġ{ ĊĠĠĠĠĠĠĠ Ġschema . generate ( name Maker , Ġoutput Dir ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠSchema . generate ( name Maker : ĠName Maker , Ġoutput Dir : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠSchema . Type . RECORD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecord MetaData Generator ( name Maker , Ġthis , Ġoutput Dir ). generate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( field Ġin Ġfields ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// println ( field . name ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . schema (). generate ( name Maker , Ġoutput Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠSchema . Type . UNION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( field Schema Ġin Ġtypes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Schema . generate ( name Maker , Ġoutput Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtouch U pt od ate File () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! upt od ate File . parent File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! upt od ate File . parent File . mkdir s ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" Could Ġnot Ġcreate Ġdirectory : Ġ${ upt od ate File . parent File }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( upt od ate File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġu pt od ate File . set LastModified ( System . currentTimeMillis ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! upt od ate File . createNew File ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Could Ġnot Ġcreate Ġfile : Ġ" Ġ+ Ġu pt od ate File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ