package Ġcom . mv vm _ generator Ċ Ċ import Ġfre emark er . template . Configuration Ċ import Ġfre emark er . template . Version Ċ import Ġjava . io . File Ċ import Ġjava . io . String Writer Ċ import Ġjava . util .* Ċ Ċ // define Ġthe ĠEnvironment al Ġvariable Ġin ĠConstants . kt Ċ val Ġproject Path Ġ= ĠFile (" "). absolute Path !! Ċ val Ġtemplates FolderPath Ġ= Ġ"$ project Path $ module Templates Path " Ċ val Ġfragment File FolderPath Ġ= Ġ"$ project Path $ fragment FolderPath " Ċ val Ġvm File FolderPath Ġ= Ġ"$ project Path $ viewModel FolderPath " Ċ val Ġlayout FolderPath Ġ= Ġ"$ project Path $ layout Path " ĊĊ Ċ object ĠTemplate Generator Ġ{ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠPlease Ġinput Ġthe Ġprefix , Ġeg : ĠA 0 1 _ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġwill Ġbe Ġgenerated ï¼ļ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ-> ĠFolder Ġ: Ġa 0 1 _ test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ-> ĠFragment Ġ: ĠA 0 1 Test Fragment . kt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ-> ĠViewModel Ġ: ĠA 0 1 Test ViewModel . kt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ-> Ġlayout Ġ: Ġfragment _ a 0 1 _ test . xml ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġscanner Ġ= ĠScanner ( System .` in `) ĊĠĠĠĠĠĠĠ Ġvar Ġprefix Name Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( scanner . hasNext ()) Ġprefix Name Ġ= Ġscanner . nextLine () ĊĊĠĠĠĠĠĠĠ Ġ// Ċ // ĠĠĠĠĠĠĠ Ġprintln ( File (" "). absolute Path ) ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĠConfiguration ( Version ( 2 , Ġ 3 , Ġ 2 8 )) ĊĠĠĠĠĠĠĠ Ġconfiguration . set Directory For Template Loading ( File ( templates FolderPath )) ĊĊĠĠĠĠĠĠĠ Ġgen Fragment ( configuration , Ġprefix Name ) ĊĠĠĠĠĠĠĠ Ġgen ViewModel ( configuration , Ġprefix Name ) ĊĠĠĠĠĠĠĠ Ġgen Layout ( configuration , Ġprefix Name ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgen Layout ( configuration : ĠConfiguration , Ġprefix Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// generate Ġfiles ĊĠĠĠĠĠĠĠ Ġconfiguration . clear Template Cache () ĊĠĠĠĠĠĠĠ Ġval Ġstring Writer Ġ= ĠString Writer () ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= Ġconfiguration . get Template (" layout . ft l ") ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" fragment Name " Ġto Ġget Fragment Name By Class ( prefix Name ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" viewModel Name " Ġto Ġget ViewModel Name By Class ( prefix Name ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" base Package " Ġto Ġbase Package , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" fragment Package " Ġto Ġfragment Package , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" class Folder Name " Ġto Ġprefix Name . toLowerCase (). replace ("_ ", Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" layout Name " Ġto Ġget Layout Name By Class ( prefix Name ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġtemplate . process ( params , Ġstring Writer ) ĊĠĠĠĠĠĠĠ Ġstring Writer . flush () ĊĠĠĠĠĠĠĠ ĠFile ( layout FolderPath ). mkdir s () ĊĠĠĠĠĠĠĠ ĠFile ("$ layout FolderPath / fragment _${ prefix Name . toLowerCase ()}. xml ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Text ( string Writer . toString ()) ĊĠĠĠĠĠĠĠ Ġprintln (" generated Ġfiled Ġ$ layout FolderPath / fragment _${ prefix Name . toLowerCase ()}. xml Ġ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgen ViewModel ( configuration : ĠConfiguration , Ġprefix Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconfiguration . clear Template Cache () ĊĠĠĠĠĠĠĠ Ġval Ġstring Writer Ġ= ĠString Writer () ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= Ġconfiguration . get Template (" viewModel . ft l ") ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" fragment Name " Ġto Ġget Fragment Name By Class ( prefix Name ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" viewModel Name " Ġto Ġget ViewModel Name By Class ( prefix Name ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" base Package " Ġto Ġbase Package , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" fragment Package " Ġto Ġfragment Package , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" fragment Base Package " Ġto Ġfragment Base Package , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" vm Base Package " Ġto Ġvm Base Package , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" class Folder Name " Ġto Ġprefix Name . toLowerCase (). replace ("_ ", Ġ"") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġtemplate . process ( params , Ġstring Writer ) ĊĠĠĠĠĠĠĠ Ġstring Writer . flush () ĊĠĠĠĠĠĠĠ ĠFile ("$ vm File FolderPath /${ prefix Name . toLowerCase (). replace ("_ ", Ġ"") } "). mkdir s () ĊĠĠĠĠĠĠĠ ĠFile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ vm File FolderPath /${ prefix Name . toLowerCase (). replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"_ ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) }/${ get ViewModel Name By Class ( prefix Name )}. kt " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Text ( string Writer . toString ()) ĊĠĠĠĠĠĠĠ Ġprintln ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" generated Ġfiled Ġ$ vm File FolderPath /${ prefix Name . toLowerCase (). replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"_ ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) }/${ get ViewModel Name By Class ( prefix Name )}. kt " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgen Fragment ( configuration : ĠConfiguration , Ġprefix Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconfiguration . clear Template Cache () ĊĠĠĠĠĠĠĠ Ġval Ġstring Writer Ġ= ĠString Writer () ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= Ġconfiguration . get Template (" fragment . ft l ") ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" fragment Name " Ġto Ġget Fragment Name By Class ( prefix Name ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" viewModel Name " Ġto Ġget ViewModel Name By Class ( prefix Name ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" base Package " Ġto Ġbase Package , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" fragment Package " Ġto Ġfragment Package , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" fragment Base Package " Ġto Ġfragment Base Package , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" vm Base Package " Ġto Ġvm Base Package , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" class Folder Name " Ġto Ġprefix Name . toLowerCase (). replace ("_ ", Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" layout Name " Ġto Ġget Layout Name By Class ( prefix Name ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" binding Name " Ġto Ġget Binding Name By Class ( prefix Name ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġtemplate . process ( params , Ġstring Writer ) ĊĠĠĠĠĠĠĠ Ġstring Writer . flush () ĊĠĠĠĠĠĠĠ ĠFile ("$ fragment File FolderPath /${ prefix Name . toLowerCase (). replace ("_ ", Ġ"") } "). mkdir s () ĊĠĠĠĠĠĠĠ ĠFile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ fragment File FolderPath /${ prefix Name . toLowerCase (). replace ("_ ", Ġ"") }/ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ get Fragment Name By Class ( prefix Name )}. kt " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Text ( string Writer . toString ()) ĊĊĠĠĠĠĠĠĠ Ġprintln ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" generated Ġfiled Ġ$ fragment File FolderPath /${ prefix Name . toLowerCase (). replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"_ ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) }/${ get Fragment Name By Class ( prefix Name )}. k " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Binding Name By Class ( prefix Name : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġ" Fragment " Ġ+ Ġprefix Name . split ("_ "). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . substring ( 0 , Ġ 1 ). toUpperCase () Ġ+ Ġit . substring ( 1 , Ġit . length ). toLowerCase () ĊĠĠĠĠĠĠĠ Ġ}. reduce Right Ġ{ Ġs , Ġacc Ġ-> Ġs Ġ+ Ġacc Ġ} Ġ+ Ġ" Binding " ĊĊĠĠĠ Ġprivate Ġfun Ġget Fragment Name By Class ( prefix Name : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġprefix Name . replace ("_ ", Ġ"") Ġ+ Ġ" Fragment " ĊĊĠĠĠ Ġprivate Ġfun Ġget Layout Name By Class ( prefix Name : ĠString ) Ġ= Ġ" fragment _${ prefix Name . toLowerCase () }" ĊĊĠĠĠ Ġprivate Ġfun Ġget ViewModel Name By Class ( prefix Name : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġprefix Name . replace ("_ ", Ġ"") Ġ+ Ġ" ViewModel " ĊĊ Ċ } Ċ