package Ġorg . jon ny zz z . team city . dsl . generating Ċ Ċ import Ġorg . jon ny zz z . team city . dsl . api . project Mixin Ċ import Ġorg . jon ny zz z . team city . dsl . div Ċ import Ġorg . jon ny zz z . team city . dsl . model . TC Project Ċ import Ġorg . jon ny zz z . team city . dsl . model . isEmpty Ċ import Ġorg . jon ny zz z . team city . dsl . write UTF Ċ import Ġjava . io . File Ċ Ċ val ĠTC Project . className : ĠString ĊĠ Ġget () Ġ= Ġ" Project _" Ġ+ Ġid Ċ Ċ val ĠTC Project . variable Name : ĠString ĊĠ Ġget () Ġ= ĠclassName Ġ+ Ġ". id " Ċ Ċ fun ĠTC Project . name Or Ref ( context : ĠGeneration Context ): ĠString Ġ{ ĊĠ Ġreturn Ġwhen Ġ( context . is Declared ( this )) Ġ{ ĊĠĠĠ Ġtrue Ġ-> Ġvariable Name ĊĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException (" Project Ġ$ id Ġis Ġreferred Ġbut Ġnot Ġdeclared ") ĊĠ Ġ} Ċ } Ċ Ċ fun Ġgenerate Project ( context : ĠGeneration Context , Ġhome : ĠFile , Ġproject : ĠTC Project ) Ġ{ ĊĠ Ġval ĠprojectId Ġ= Ġproject . id ĊĊĠ Ġ( home Ġ/ Ġ" project _$ projectId . t cd sl . kt "). write UTF Ġ{ ĊĠĠĠ Ġgenerate Kotlin DSL ( context . options . packageName , Ġ" project _$ projectId ") Ġ{ ĊĊĠĠĠĠĠ Ġfun Ġgenerate Project Ref ( parentId Ġ: ĠString ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġcontext . find Project ( parentId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( base Ġ!= Ġnull ) Ġreturn Ġ"${ base . variable Name }" ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ" Unknown Project (${ parentId . quote () })" ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġfun Ġgenerate Parent Project Ref () Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠparentId Ġ= Ġproject . parentId Ġ?: Ġreturn Ġ" Root Project " ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerate Project Ref ( parentId ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġblock (" object Ġ${ project . className }") Ġ{ ĊĠĠĠĠĠĠĠ Ġappend ln (" val Ġid Ġ= Ġ${ generate Parent Project Ref ()}. project (${ project . id . quote () }) ") ĊĠĠĠĠĠĠĠ Ġappend ln () ĊĊĠĠĠĠĠĠĠ Ġblock (" val Ġmixin Ġ= Ġ${ :: project Mixin . name }") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsetter (" arch ived ", Ġproject . arch ived ) ĊĠĠĠĠĠĠĠĠĠ Ġsetter (" name ", Ġproject . name ) ĊĠĠĠĠĠĠĠĠĠ Ġsetter (" description ", Ġproject . description ) ĊĊĠĠĠĠĠĠĠĠĠ Ġblock (" parameters ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams With Spec ( project . parameters ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġval Ġcleanup Ġ= Ġproject . cleanup ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( cleanup Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock (" cleanup ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Internals ( cleanup ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġval Ġplugins Ġ= Ġproject . plugin Settings ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( plugins Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock (" plugins ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugins . settings ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġval Ġextensions Ġ= Ġproject . project Extensions ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( extensions Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock (" extensions ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextensions . extensions ?. forEach Ġ{ Ġext Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock (" extension (${ ext . id ?. quote ()}, Ġ${ ext . type ?. quote () }) ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams ( ext . parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġgenerate Ordering ( context , Ġproject ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġappend ln () ĊĠĠĠĠĠĠĠ Ġblock (" init ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġappend ln (" id Ġ+= Ġmixin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun ĠKotlin Writer . generate Ordering ( context : ĠGeneration Context , Ġproject Ġ: ĠTC Project ) Ġ{ ĊĠ Ġval Ġordering Ġ= Ġproject . ordering ĊĠ Ġif Ġ( ordering . isEmpty ()) Ġreturn ĊĊĠ Ġblock (" ordering ") Ġ{ ĊĠĠĠ Ġval Ġprojects Order Ġ= Ġordering ?. projects Order ĊĠĠĠ Ġval Ġbuilds Order Ġ= Ġordering ?. builds Order ĊĊĠĠĠ Ġprojects Order ?. forEach Ġ{ ĊĠĠĠĠĠ Ġappend ln ("+ Ġ${ Ġcontext . find Project ( Ġit Ġ) !!. variable Name Ġ} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( projects Order ?. any () Ġ?: Ġfalse Ġ&& Ġbuilds Order ?. any () Ġ?: Ġfalse ) Ġappend ln () ĊĊĠĠĠ Ġbuilds Order ?. forEach Ġ{ ĊĠĠĠĠĠ Ġappend ln ("+ Ġ${ Ġcontext . find Build ( Ġit Ġ) !!. variable Name Ġ} ") ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ