package Ġtop . lan sc ar los . tower def ence . utils Ċ Ċ import Ġtab ool ib . common 5 . File Watcher Ċ import Ġtab ool ib . library . configuration . Configuration Section Ċ import Ġtab ool ib . module . configuration . ConfigFile Ċ import Ġtab ool ib . module . configuration . Configuration Ċ import Ġjava . io . File Ċ Ċ inline Ġfun ĠFile . if Exists ( func : Ġ(( file : ĠFile ) Ġ-> ĠUnit )): ĠFile Ġ{ ĊĠĠĠ Ġif Ġ( exists ()) Ġfunc ( this ) ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ inline Ġfun ĠFile . if Not Exists ( func : Ġ(( file : ĠFile ) Ġ-> ĠUnit )): ĠFile Ġ{ ĊĠĠĠ Ġif Ġ(! exists ()) Ġfunc ( this ) ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* Ġ è¿ĩæ»¤ æľīæķĪ æĸĩä»¶ Ċ Ġ* Ġ*/ Ċ fun ĠFile . get Files ( file Ġ: ĠFile Ġ= Ġthis , Ġfilter Ġ: ĠString Ġ= Ġ"# ", Ġsuffix : ĠString Ġ= Ġ" yml ") Ġ: ĠList < File > Ġ{ ĊĠĠĠ Ġif Ġ(! file . exists ()) Ġreturn ĠlistOf () ĊĠĠĠ Ġreturn Ġmutable ListOf < File >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( file . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . list Files ()?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( get Files ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! file . name . startsWith ( filter ) Ġ&& Ġfile . extension Ġ== Ġsuffix ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( file ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠFile . to Config (): ĠConfig File Ġ{ ĊĠĠĠ Ġreturn ĠConfiguration . load FromFile ( this ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ åĬłè½½ ĠConfig Ġä¸ĭ æīĢæľī ĠSection Ġ åĨħå®¹ Ċ Ġ* Ġ*/ Ċ inline Ġfun ĠConfiguration . forEach Sections ( func : Ġ(( key : ĠString , Ġsection : ĠConfiguration Section ) Ġ-> ĠUnit )) Ġ{ ĊĠĠĠ Ġget Keys ( false ). forEach Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠ Ġget Configuration Section ( key )?. let Ġ{ Ġsection Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunc ( key , Ġsection ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ åĬłè½½ è¯¥ çĽ®å½ķ ä¸ĭ æīĢæľī åŃĲ æĸĩä»¶çļĦ ĠSection Ġ åĨħå®¹ Ċ Ġ* Ġ*/ Ċ inline Ġfun ĠFile . deep Sections ( cross inline Ġfunc : Ġ(( file : ĠFile , Ġkey : ĠString , Ġsection : ĠConfiguration Section ) Ġ-> ĠUnit )) Ġ{ ĊĠĠĠ Ġthis . get Files (). forEach Ġ{ Ġit . to Config (). forEach Sections Ġ{ Ġkey , Ġsection Ġ-> Ġfunc ( it , Ġkey , Ġsection ) Ġ} Ġ} Ċ } Ċ Ċ inline Ġfun ĠFile . add Watcher ( run First : ĠBoolean Ġ= Ġfalse , Ġcross inline Ġfunc : Ġ( File . () Ġ-> ĠUnit )): ĠFile Ġ{ ĊĠĠĠ Ġif Ġ( File Watcher . INSTANCE . has Listener ( this )) Ġreturn Ġthis ĊĠĠĠ ĠFile Watcher . INSTANCE . add Simple Listener ( this , Ġ{ Ġfunc ( this ) Ġ}, Ġrun First ) ĊĠĠĠ Ġreturn Ġthis Ċ }