/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠA aron ĠGal uzz i Ċ Ġ* Ċ Ġ* Ġ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 Ġgal uzz i . kode gen . java Ċ Ċ import Ġgal uzz i . kode gen . Code Writer Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ Ċ private Ġconst Ġval ĠIMPORT _ PLACE HOLDER Ġ= Ġ"__ IMPORT _ PLACE HOLDER __ " Ċ Ċ /** Ċ Ġ* ĠA Ġutility Ġfor Ġgenerating ĠJava Ġsource Ġcode Ġfiles . Ċ Ġ* Ċ Ġ* ĠInstances Ġof Ġthis Ġclass Ġare Ġcreated / configured Ġwith Ġan Ġoutput Ġdirectory Ġand Ġcan Ġthen Ġbe Ġused Ġto Ġgenerate Ġ. java Ġfiles Ċ Ġ* Ġwithin Ġthe Ġoutput Ġdirectory . Ċ Ġ*/ Ċ class ĠJava Code Generator ( private Ġval Ġoutput Dir : ĠPath ) Ċ { ĊĠĠĠ Ġconstructor ( output Dir : ĠString ) Ġ: Ġthis ( Paths . get ( output Dir )) ĊĊĠĠĠ Ġvar Ġheader Ġ= Ġ"" ĊĊĠĠĠ Ġfun Ġgenerate ( elem : ĠJava Type Element ): ĠPath ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġelem . name ĊĠĠĠĠĠĠĠ Ġval Ġimports Ġ= ĠImports ( name ) ĊĠĠĠĠĠĠĠ ĠImports . set Thread Local ( imports ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= Ġoutput Dir . resolve ( name . pkg . to Path ()) ĊĊĠĠĠĠĠĠĠ ĠFiles . create Directories ( dir ) ĊĊĠĠĠĠĠĠĠ Ġval ĠoutputFile Ġ= Ġdir . resolve ("${ name . simple Name ()}. java ") ĊĠĠĠĠĠĠĠ Ġval Ġtemp File Ġ= Ġdir . resolve ("${ name . simple Name ()}. tmp ") ĊĊĠĠĠĠĠĠĠ Ġtry ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . new Buffered Writer ( temp File ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠCode Writer ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! header . isBlank ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" /* \ n $ header \ n */ \ n \ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ stmt (" package Ġ${ name . pkg . name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpad () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ IMPORT _ PLACE HOLDER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpad () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ elem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . new Buffered Writer ( outputFile ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠCode Writer ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . new BufferedReader ( temp File ). use Lines Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Ġ== ĠIMPORT _ PLACE HOLDER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write ( imports ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfinally ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( temp File ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠoutputFile ĊĠĠĠ Ġ} Ċ }