/* Ċ Ġ* Ġ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 . theme Ċ Ċ import Ġcom . be ust . j command er . Parameters Ċ import Ġcom . ha ul mont . cub a . cli .* Ċ import Ġcom . ha ul mont . cub a . cli . cub apl ugin . model . Module Structure . Companion . WEB _ MODULE Ċ import Ġcom . ha ul mont . cub a . cli . commands . Generator Command Ċ import Ġcom . ha ul mont . cub a . cli . commands . from Ċ import Ġcom . ha ul mont . cub a . cli . generation . Snippets Ċ import Ġcom . ha ul mont . cub a . cli . generation . Template Processor Ċ import Ġcom . ha ul mont . cub a . cli . cub apl ugin . model . Specific Version Ċ import Ġcom . ha ul mont . cub a . cli . pro mp ting . Answers Ċ import Ġcom . ha ul mont . cub a . cli . pro mp ting . Questions List Ċ import Ġorg . kode in . di . generic . instance Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . nio . file . Files Ċ import Ġjava . util . stream . Collectors Ċ Ċ @ Parameters ( command Description Ġ= Ġ" Gener ates Ġtheme Ġextension ") Ċ class ĠTheme Extension Command Ġ: ĠGenerator Command < Theme Extension Model >() Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmessages Ġby Ġlocal Messages () ĊĊĠĠĠ Ġprivate Ġval Ġresources Ġby ĠResources . from My Plugin () ĊĊĠĠĠ Ġprivate Ġval Ġsnippets : ĠSn ippets Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠSn ippets ( resources , Ġ" theme ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġwriter : ĠPrintWriter Ġby Ġk ode in . instance () ĊĊĠĠĠ Ġprivate Ġval Ġprint Helper : ĠPrint Helper Ġby Ġk ode in . instance () ĊĊĠĠĠ Ġprivate Ġval Ġtheme sTo Extend : ĠList < String > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthemes Directory Ġ= Ġproject Structure . getModule ( WEB _ MODULE ). path . resolve (" themes ") ĊĊĠĠĠĠĠĠĠ Ġval Ġalready Extended Ġ= Ġif Ġ( Files . exists ( themes Directory )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . walk ( themes Directory , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= Ġthemes Directory Ġ&& ĠFiles . isDirectory ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . fileName . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toList ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĠlistOf < String >() ĊĊĊĠĠĠĠĠĠĠ Ġval Ġrest Themes : ĠMutable List < String > Ġ= Ġmutable ListOf (" h alo ") ĊĠĠĠĠĠĠĠ Ġrest Themes . removeAll ( already Extended ) ĊĊĠĠĠĠĠĠĠ Ġif ( project Model . platform Version Ġ>= ĠSpecific Version ( 6 , Ġ 1 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrest Themes . add (" hover ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrest Themes . isNotEmpty () Ġ|| Ġfail (" H alo Ġand Ġh av ana Ġthemes Ġalready Ġextended ") ĊĊĠĠĠĠĠĠĠ Ġreturn @ lazy Ġrest Themes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpre Execute () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Project Ex istence () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ModelName (): ĠString Ġ= ĠTheme Extension Model . MODEL _ NAME ĊĊĠĠĠ Ġoverride Ġfun ĠQuestions List . pro mp ting () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( themes To Extend . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Options (" theme Name ", Ġ" Choose Ġtheme Ġto Ġextend ", Ġtheme sTo Extend ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . println (" Only Ġ${ themes To Extend . first ()} Ġtheme Ġcan Ġbe Ġextended .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconfirmation (" confirmed ", Ġmessages [" confirmation Message "]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Model ( answers : ĠAn swers ): ĠTheme Extension Model Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfirmed Ġ= Ġanswers [" confirmed "] Ġas ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġconfirmed Ġ|| Ġfail (" User Ġrejected ", Ġsilent Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( themes To Extend . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTheme Extension Model ( themes To Extend . first ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠTheme Extension Model (" theme Name " Ġfrom Ġanswers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate ( bindings : ĠMap < String , ĠAny >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtarget Directory Ġ= Ġproject Structure . getModule ( WEB _ MODULE ). path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. resolve (" themes ", Ġmodel . theme Name ) ĊĊĠĠĠĠĠĠĠ ĠTemplate Processor ( resources . get Template (" themes /" Ġ+ Ġmodel . theme Name ), Ġbindings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransform (" styles . scss ", Ġto Ġ= Ġtarget Directory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransform ("\ ${ project . root Package }", Ġto Ġ= Ġtarget Directory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy (" favicon . ico ", Ġto Ġ= Ġtarget Directory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy (" brand ing ", Ġto Ġ= Ġtarget Directory ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmodule Registered Ġ= Ġproject Structure . settings Gradle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to File () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Lines () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains ( snippets [" module Registration "]) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! module Registered ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Module () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister Module () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsettings Gradle Ġ= Ġproject Structure . settings Gradle ĊĊĠĠĠĠĠĠĠ Ġval Ġlines Ġ= Ġsettings Gradle . to File (). read Lines (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . startsWith (" include (" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . replace ( Regex (" include \\ (( .* )\\ ) ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodules Ġ= Ġit . group Values [ 1 ]. split (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( modules Ġ+ Ġ"\ ": \ ${ module Prefix }- web - themes \"" ). join ToString (" Ġ, ", Ġ" include (", Ġ") ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġit ĊĠĠĠĠĠĠĠ Ġ} Ġ+ Ġsnippets [" module Registration "] ĊĊĠĠĠĠĠĠĠ Ġsettings Gradle . to File (). write Text ( lines . join ToString ("\ n ")) ĊĊĠĠĠĠĠĠĠ Ġprint Helper . file Modified ( settings Gradle ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġbuild Gradle Ġ= Ġproject Structure . build Gradle ĊĠĠĠĠĠĠĠ Ġbuild Gradle . to File () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( snippets [" web Module Search "], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsnippets [" web Module Replace "]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsnippets [" configure Web Module Search "], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsnippets [" configure Web Module Replace "]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Gradle . to File (). write Text ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprint Helper . file Modified ( build Gradle ) ĊĠĠĠ Ġ} Ċ }