/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 0 8 - 2 0 1 8 ĠHa ul mont . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . ha ul mont . cub a . cli . cub apl ugin . stat ict emplate Ċ Ċ import Ġcom . ha ul mont . cub a . cli . commands . Command ExecutionException Ċ import Ġcom . ha ul mont . cub a . cli . generation . findFirst Child Ċ import Ġcom . ha ul mont . cub a . cli . generation . get Ċ import Ġcom . ha ul mont . cub a . cli . generation . getChild Elements Ċ import Ġcom . ha ul mont . cub a . cli . generation . parse Ċ import Ġcom . ha ul mont . cub a . cli . kode in Ċ import Ġnet . sf . pract ical xml . Dom Util Ċ import Ġorg . kode in . di . generic . instance Ċ import Ġorg . w 3 c . dom . Element Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ Ċ data Ġclass ĠStatic Template ( val Ġpath : ĠPath , Ġval Ġname : ĠString , Ġval Ġquestions : ĠList < Template Question >, Ġval Ġinstructions : ĠList < Generation Instruction >, Ġval Ġregist rations : ĠList < Registration >) Ċ data Ġclass ĠGeneration Instruction ( val Ġfrom : ĠString , Ġval Ġto : ĠString , Ġval Ġtransform : ĠBoolean ) Ċ Ċ sealed Ġclass ĠRegistration Ċ data Ġclass ĠScreen Registration ( val Ġid : ĠString , Ġval ĠpackageName : ĠString , Ġval Ġdescriptor Name : ĠString , Ġval ĠaddTo Menu : ĠString , Ġval Ġmenu Caption : ĠString ) Ġ: ĠRegistration () Ċ data Ġclass ĠService Registration ( val Ġname : ĠString , Ġval ĠpackageName : ĠString , Ġval Ġinterface Name : ĠString ) Ġ: ĠRegistration () Ċ data Ġclass ĠEntity Registration ( val ĠclassName : ĠString , Ġval Ġpersistent : ĠString ) Ġ: ĠRegistration () ĊĊ Ċ sealed Ġclass ĠTemplate Question ( val Ġname : ĠString , Ġval Ġcaption : ĠString ) Ċ class ĠPlain Question ( name : ĠString , Ġcaption : ĠString ) Ġ: ĠTemplate Question ( name , Ġcaption ) Ċ class ĠOptions Question ( name : ĠString , Ġcaption : ĠString , Ġval Ġoptions : ĠList < String >) Ġ: ĠTemplate Question ( name , Ġcaption ) Ċ Ċ private Ġval Ġprint Writer : ĠPrintWriter Ġby Ġk ode in . instance () Ċ Ċ fun Ġparse Template ( template Name : ĠString ): ĠStatic Template Ġ{ ĊĠĠĠ Ġval Ġtemplate BasePath Ġ= Ġfind Template ( template Name ) ĊĠĠĠ Ġval Ġtemplate Xml Ġ= Ġtemplate BasePath ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. resolve (" template . xml ") ĊĊĠĠĠ Ġif Ġ(! Files . exists ( template BasePath )) Ġ{ ĊĠĠĠĠĠĠĠ Ġprint Writer . println (" Unable Ġto Ġfind Ġtemplate . xml Ġfor Ġtemplate Ġ$ template Name ") ĊĠĠĠĠĠĠĠ Ġthrow ĠCommand ExecutionException (" Unable Ġto Ġfind Ġtemplate . xml Ġfor Ġtemplate Ġ$ template Name ", Ġsilent Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtemplate Document Ġ= Ġparse ( template Xml ). documentElement ĊĠĠĠ Ġval Ġquestions : ĠList < Template Question > Ġ= ĠDom Util . getChild ( template Document , Ġ" questions "). let Ġ{ ĊĠĠĠĠĠĠĠ Ġparse Questions ( it ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġinstructions : ĠList < Generation Instruction > Ġ= ĠDom Util . getChild ( template Document , Ġ" operations "). let Ġ{ ĊĠĠĠĠĠĠĠ Ġparse Generation Instructions ( it ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġregist rations : ĠList < Registration > Ġ= Ġtemplate Document . findFirst Child (" register ") ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġparse Regist rations ( it ) ĊĠĠĠ Ġ} Ġ?: Ġempty List () ĊĊĠĠĠ Ġreturn ĠStatic Template ( template BasePath , Ġtemplate Document [" name "], Ġquestions , Ġinstructions , Ġregist rations ) Ċ } Ċ Ċ private Ġfun Ġparse Questions ( questions List Element : ĠElement ): ĠList < Template Question > Ġ= ĊĠĠĠĠĠĠĠ Ġquestions List Element . getChild Elements () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġit [" name "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcaption Ġ= Ġit [" caption "] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . tagName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" plain " Ġ-> ĠPlain Question ( name , Ġcaption ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" options " Ġ-> ĠOptions Question ( name , Ġcaption , Ġparse Options ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠCommand ExecutionException (" Invalid Ġtemplate ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĊ Ċ private Ġfun Ġparse Options ( options Question : ĠElement ): ĠList < String > Ġ= ĊĠĠĠĠĠĠĠ Ġoptions Question . getChild Elements () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . tagName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" option " Ġ-> Ġit . textContent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠCommand ExecutionException (" Invalid Ġtemplate ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĊ Ċ private Ġfun Ġparse Generation Instructions ( instructions List Element : ĠElement ): ĠList < Generation Instruction > Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions List Element . getChild Elements () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsrc Ġ= Ġit [" src "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdst Ġ= Ġit [" dst "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . tagName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" transform " Ġ-> ĠGeneration Instruction ( src , Ġdst , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" copy " Ġ-> ĠGeneration Instruction ( src , Ġdst , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠCommand ExecutionException (" Invalid Ġtemplate ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĊ Ċ private Ġfun Ġparse Regist rations ( regist rations List Element : ĠElement ): ĠList < Registration > Ġ= ĊĠĠĠĠĠĠĠ Ġregist rations List Element . getChild Elements () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . tagName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" screen " Ġ-> ĠScreen Registration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . findFirst Child (" id ") !!. textContent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . findFirst Child (" package ") !!. textContent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . findFirst Child (" descriptor ") !!. textContent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . findFirst Child (" add - to - menu ") ?. textContent Ġ?: Ġ" false ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . findFirst Child (" menu - caption ") ?. textContent Ġ?: Ġ"") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" service " Ġ-> ĠService Registration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . findFirst Child (" name ") !!. textContent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . findFirst Child (" package ") !!. textContent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . findFirst Child (" interface ") !!. textContent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity " Ġ-> ĠEntity Registration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . findFirst Child (" class ") !!. textContent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . findFirst Child (" persistent ") ?. textContent Ġ?: Ġ" true ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠCommand ExecutionException (" Invalid Ġregistration Ġtype Ġ${ it . tagName }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () Ċ Ċ val ĠCUSTOM _ TEMP LAT ES _ PATH : ĠPath Ġ= ĠPaths . get ( System . getProperty (" user . home "), Ġ". ha ul mont ", Ġ" cli ", Ġ" templates ") ĊĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Files . exists ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . create Directories ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ private Ġfun Ġfind Template ( template BasePath : ĠString ): ĠPath Ġ= ĠCUSTOM _ TEMP LAT ES _ PATH . resolve ( template BasePath )