package Ġcom . company . team . project . dsl . model Ċ Ċ import Ġcom . fasterxml . jackson . data format . yaml . YAML Factory Ċ import Ġcom . fasterxml . jackson . module . kotlin . Kotlin Module Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . initialization . Project Descriptor Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util . Properties Ċ Ċ /** Ċ Ġ* Ċ Ġ*/ Ċ object ĠProperties Ġ{ ĊĊ ĉ /** Ċĉ Ġ* Ċĉ Ġ*/ Ċ ĉ object Ġgeneral Ġ{ Ċĉ ĉ val Ġgroup Ġ= Ġproperties . get OrDefault (" project . group ", Ġ" com . company . team . project ") Ċĉ ĉ val Ġgroup As Path Ġ= ĠPaths . get ( group . replace (".", Ġ"/ ")) Ċĉ ĉ val Ġversion Ġ= Ġproperties . get OrDefault (" project . version ", Ġ" 0 . 0 . 1 ") Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ċĉ Ġ*/ Ċ ĉ object Ġutil Ġ{ Ċĉ ĉ val Ġgroup Separator Ġ= Ġ"." Ċĉ ĉ val Ġfolder Separator Ġ= Ġ"-" Ċĉ ĉ val Ġname Separator Ġ= Ġ"_" Ċĉ ĉ val Ġdomain Separator Ġ= Ġ"@ " Ċĉ ĉ val Ġpath Separator Ġ= ĠFile . path Separator Ċĉ ĉ val Ġfolder Concat en ator Ġ= Ġ" Ġ-> Ġ" Ċĉ ĉ val Ġname Concat en ator Ġ= Ġ" Ġ" Ċĉ ĉ val Ġdomain Concat en ator Ġ= Ġ" Ġ-> Ġ" ĊĊĉ ĉ /** Ċĉĉ Ġ* Ċĉĉ Ġ*/ Ċĉ ĉ val Ġos Ġby Ġlazy Ġ{ Ċĉĉ ĉ org . gradle . internal . os . Operating System . current () !! Ċĉ ĉ } ĊĊĉ ĉ /** Ċĉĉ Ġ* Ċĉĉ Ġ*/ Ċĉ ĉ val Ġj vm Ġby Ġlazy Ġ{ Ċĉĉ ĉ org . gradle . internal . jvm . Jvm . current () Ċĉ ĉ } ĊĊĉ ĉ val Ġcommon Main Ġ= Ġ" common Main " Ċĉ ĉ val Ġcommon Test Ġ= Ġ" common Test " Ċ ĉ } ĊĊ ĉ object Ġproperties Ġ{ ĊĊĉ ĉ /** Ċĉĉ Ġ* Ċĉĉ Ġ*/ Ċĉ ĉ val Ġenvironment Ġby Ġlazy Ġ{ Ċĉĉ ĉ System . getenv () Ċĉ ĉ } ĊĊĉ ĉ /** Ċĉĉ Ġ* Ċĉĉ Ġ*/ Ċĉ ĉ var Ġsystem : ĠProperties Ġ= ĠProperties () ĊĊĉ ĉ /** Ċĉĉ Ġ* Ċĉĉ Ġ*/ Ċĉ ĉ val Ġgradle : ĠProperties Ġby Ġlazy Ġ{ Ċĉĉ ĉ val Ġrelative Path Ġ= Ġ" gradle . properties " Ċĉĉ ĉ val Ġfile Ġ= ĠPaths . get ( projects . root . descriptor ?. project Dir ?. absolute Path , Ġrelative Path ). to File () ĊĊĉĉ ĉ val Ġproperties Ġ= ĠProperties () ĊĊĉĉ ĉ if Ġ( file . can Read ()) Ġ{ Ċĉĉĉ ĉ properties . load ( java . io . FileInputStream ( file )) Ċĉĉ ĉ } ĊĊĉĉ ĉ properties Ċĉ ĉ } ĊĊĉ ĉ /** Ċĉĉ Ġ* Ċĉĉ Ġ*/ Ċĉ ĉ val Ġlocal : ĠProperties Ġby Ġlazy Ġ{ Ċĉĉ ĉ val Ġrelative Path Ġ= Ġ" local . properties " Ċĉĉ ĉ val Ġfile Ġ= ĠPaths . get ( projects . root . descriptor ?. project Dir ?. absolute Path , Ġrelative Path ). to File () ĊĊĉĉ ĉ val Ġproperties Ġ= ĠProperties () ĊĊĉĉ ĉ if Ġ( file . can Read ()) Ġ{ Ċĉĉĉ ĉ properties . load ( java . io . FileInputStream ( file )) Ċĉĉ ĉ } ĊĊĉĉ ĉ properties Ċĉ ĉ } Ċ Ċ // ĉ ĉ /** Ċ // ĉĉ Ġ* Ċ // ĉĉ Ġ*/ Ċ // ĉ ĉ val Ġconfiguration Ġby Ġlazy Ġ{ Ċ // ĉĉ ĉ String Ġrelative Path Ġ= Ġ" build Src / src / main / resources / configuration . yml " Ċ // ĉĉ ĉ val Ġpath Ġ= ĠPaths . get ( projects . root . descriptor ?. project Dir ?. absolute Path , Ġrelative Path ) Ċ // Ċ // ĉĉ ĉ val Ġmapper Ġ= ĠObjectMapper ( YAML Factory ()) Ċ // ĉĉ ĉ mapper . register Module ( Kotlin Module ()) Ċ // Ċ // ĉĉ ĉ return @ lazy ĠFiles . new BufferedReader ( path ). use Ġ{ Ċ // ĉĉĉ ĉ mapper . readValue ( it , ĠConfiguration :: class . java ) Ċ // ĉĉ ĉ } Ċ // ĉ ĉ } ĊĊĉ ĉ /** Ċĉĉ Ġ* Ċĉĉ Ġ*/ Ċĉ ĉ fun Ġcontains Key ( key : ĠString ?): ĠBoolean Ġ{ Ċĉĉ ĉ if Ġ( key Ġ== Ġnull ) Ġreturn Ġfalse ĊĊĉĉ ĉ return Ġwhen Ġ{ Ċĉĉĉ ĉ environment . containsKey ( key ) Ġ-> Ġtrue Ċĉĉĉ ĉ system . containsKey ( key ) Ġ-> Ġtrue Ċĉĉĉ ĉ local . containsKey ( key ) Ġ-> Ġtrue Ċĉĉĉ ĉ gradle . containsKey ( key ) Ġ-> Ġtrue Ċĉĉĉ ĉ else Ġ-> Ġfalse Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ /** Ċĉĉ Ġ* Ċĉĉ Ġ*/ Ċĉ ĉ inline Ġfun Ġ< re ified ĠR > Ġget ( key : ĠString ?): ĠR ? Ġ{ Ċĉĉ ĉ if Ġ( key Ġ== Ġnull ) Ġreturn Ġnull ĊĊĉĉ ĉ return Ġwhen Ġ{ Ċĉĉĉ ĉ environment . containsKey ( key ) Ġ-> Ġenvironment [ key ] Ċĉĉĉ ĉ system . containsKey ( key ) Ġ-> Ġsystem [ key ] Ċĉĉĉ ĉ local . containsKey ( key ) Ġ-> Ġlocal [ key ] Ċĉĉĉ ĉ gradle . containsKey ( key ) Ġ-> Ġgradle [ key ] Ċĉĉĉ ĉ else Ġ-> Ġnull Ċĉĉ ĉ } Ġas ĠR ? Ċĉ ĉ } ĊĊĉ ĉ /** Ċĉĉ Ġ* Ċĉĉ Ġ*/ Ċĉ ĉ inline Ġfun Ġ< re ified ĠR > Ġget OrDefault ( key : ĠString ?, Ġdefault : ĠR ): ĠR Ġ{ Ċĉĉ ĉ return Ġget ( key ) Ġ?: Ġdefault Ċĉ ĉ } Ċ Ċ // ĉ ĉ /** Ċ // ĉĉ Ġ* Ċ // ĉĉ Ġ*/ Ċ // ĉ ĉ fun Ġget ( key : ĠString ?): ĠAny ? Ġ{ Ċ // ĉĉ ĉ if Ġ( key Ġ== Ġnull ) Ġreturn Ġnull Ċ // Ċ // ĉĉ ĉ return Ġwhen Ġ{ Ċ // ĉĉĉ ĉ environment . containsKey ( key ) Ġ-> Ġenvironment [ key ] Ċ // ĉĉĉ ĉ system . containsKey ( key ) Ġ-> Ġsystem [ key ] Ċ // ĉĉĉ ĉ local . containsKey ( key ) Ġ-> Ġlocal [ key ] Ċ // ĉĉĉ ĉ gradle . containsKey ( key ) Ġ-> Ġgradle [ key ] Ċ // ĉĉĉ ĉ else Ġ-> Ġnull Ċ // ĉĉ ĉ } Ċ // ĉ ĉ } Ċ // Ċ // ĉ ĉ /** Ċ // ĉĉ Ġ* Ċ // ĉĉ Ġ*/ Ċ // ĉ ĉ fun Ġget OrDefault ( key : ĠString ?, Ġdefault : ĠAny ): ĠAny Ġ{ Ċ // ĉĉ ĉ return Ġget ( key ) Ġ?: Ġdefault Ċ // ĉ ĉ } Ċ ĉ } ĊĊ ĉ object Ġprojects Ġ{ Ċĉ ĉ object Ġroot Ġ{ Ċĉĉ ĉ var Ġdescriptor : ĠProject Descriptor ? Ġ= Ġnull ĊĊĉĉ ĉ var Ġproject : ĠProject ? Ġ= Ġnull ĊĊĉĉ ĉ var Ġpath : ĠPath ? Ġ= Ġnull Ċĉĉĉ ĉ get () Ġ{ Ċĉĉĉĉ ĉ if Ġ( field Ġ!= Ġnull ) Ġreturn Ġfield ĊĊĉĉĉĉ ĉ if Ġ( descriptor Ġ!= Ġnull ) Ġ{ Ċĉĉĉĉĉ ĉ field Ġ= ĠPaths . get ( descriptor ?. project Dir ?. absolute Path ) Ċĉĉĉĉ ĉ } Ġelse Ġif Ġ( project Ġ!= Ġnull ) Ġ{ Ċĉĉĉĉĉ ĉ field Ġ= ĠPaths . get ( project ?. project Dir ?. absolute Path ) Ċĉĉĉĉ ĉ } ĊĊĉĉĉĉ ĉ return Ġfield Ċĉĉĉ ĉ } ĊĊĉĉ ĉ var Ġfile : ĠFile ? Ġ= Ġnull Ċĉĉĉ ĉ get () Ġ{ Ċĉĉĉĉ ĉ if Ġ( field Ġ!= Ġnull ) Ġreturn Ġfield ĊĊĉĉĉĉ ĉ field Ġ= Ġpath ?. to File () ĊĊĉĉĉĉ ĉ return Ġfield Ċĉĉĉ ĉ } ĊĊĉĉ ĉ var Ġabsolute Path : ĠString ? Ġ= Ġnull Ċĉĉĉ ĉ get () Ġ{ Ċĉĉĉĉ ĉ if Ġ( field Ġ!= Ġnull ) Ġreturn Ġfield ĊĊĉĉĉĉ ĉ field Ġ= Ġfile ?. absolute Path ĊĊĉĉĉĉ ĉ return Ġfield Ċĉĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ċĉ Ġ*/ Ċ ĉ object Ġvendor Ġ{ Ċĉ ĉ val Ġkotlin Ġ= Ġproperties . get < String >(" kotlin . version ") ĊĊĉ ĉ val Ġspring Boot Ġ= Ġ" 2 . 2 . 2 . RELEASE " Ċĉ ĉ val Ġandroid Tools Ġ= Ġ" 3 . 3 . 2 " Ċĉ ĉ val Ġfrontend Ġ= Ġ" 0 . 0 . 4 5 " Ċ ĉ } Ċ } Ċ