package Ġcom . jk il p . blueprint diagram . util Ċ Ċ import Ġjava . io . File Ċ Ċ object ĠC fg Util Ġ{ ĊĊĠĠĠ Ġfun Ġget Cfg Map ( cfg Files : ĠList < File >, Ġenv Map : ĠMap < String , ĠString >): ĠHashMap < String , ĠHashMap < String , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcfg Map Ġ= ĠHashMap < String , ĠHashMap < String , ĠString >>() ĊĠĠĠĠĠĠĠ Ġcfg Files . forEach Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcfg Map [ file . name ] Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . read Lines () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotBlank () Ġ&& Ġit . contains (" =") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġresolve Param ( env Map , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcfg Map [ file . name ]?. set ( pair . first , Ġpair . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcfg Map ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresolve Param ( env Map : ĠMap < String , String >, Ġline : ĠString ): ĠPair < String , String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparam Name Ġ= Ġline . substring Before (" =") ĊĠĠĠĠĠĠĠ Ġvar Ġparam Value Ġ= Ġline . substring After (" =") ĊĠĠĠĠĠĠĠ Ġif Ġ( param Value . startsWith ("\ ${ env :" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam Value Ġ= Ġparam Value . replace (" .* \\\ $ \\ { env :| \\ } .* ". to Regex (), Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( param Value . contains (" :- ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit ted Ġ= Ġparam Value . split (" :- ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam Value Ġ= Ġenv Map [ split ted [ 0 ]] Ġ?: Ġsplit ted [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam Value Ġ= Ġenv Map [ param Value ] Ġ?: Ġ"\ ${ env :$ param Value }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( param Name , Ġparam Value ) ĊĠĠĠ Ġ} Ċ }