/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . google . api . kotlin . config Ċ Ċ /** Ċ Ġ* ĠA Ġpath Ġto Ġa Ġproperty Ġcomposed Ġof Ġnamed Ġsegments . Ċ Ġ*/ Ċ internal Ġdata Ġclass ĠProperty Path ( ĊĠĠĠ Ġval Ġsegments : ĠList < String > Ċ ) Ġ{ ĊĠĠĠ Ġval Ġfirst Segment Ġget () Ġ= Ġthis . segments . first () ĊĠĠĠ Ġval Ġlast Segment Ġget () Ġ= Ġthis . segments . last () ĊĠĠĠ Ġval Ġlast Ġget () Ġ= Ġthis . segments . last (). as Property Path () ĊĠĠĠ Ġval Ġsize Ġget () Ġ= Ġthis . segments . size ĊĊĠĠĠ Ġconstructor ( segment : ĠString ) Ġ: Ġthis ( listOf ( segment )) ĊĊĠĠĠ Ġ/** Ġpath Ġbetween Ġthe Ġspecified Ġ[ from Index ] Ġ( inclusive ) Ġand Ġ[ to Index ] Ġ( exclusive ). Ġ*/ ĊĠĠĠ Ġfun Ġsub Path ( from Index : ĠInt , Ġto Index : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ ĠProperty Path ( segments . sub List ( from Index , Ġto Index )) ĊĊĠĠĠ Ġ/** Ġsub Ġpath Ġusing Ġthe Ġfirst Ġ[ n ] Ġelements Ġ*/ ĊĠĠĠ Ġfun Ġtake Sub Path ( n : ĠInt ) Ġ= ĠProperty Path ( segments . take ( n )) ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġsegments . join ToString (".") ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** Ġmerge s Ġthe Ġlist Ġof Ġpaths Ġinto Ġa Ġsingle Ġlist Ġwithout Ġduplicates Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġmerge ( var arg Ġpath Lists : ĠList < Property Path >): ĠList < Property Path > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Ġ= Ġpath Lists ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . map Ġ{ Ġit . segments . join ToString (".") Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġthere Ġare Ġproperties Ġsuch Ġas Ġ" a . b . c " Ġand Ġ" a . b " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġonly Ġwant Ġthe Ġmost Ġspecific Ġ( i . e . Ġ" a . b . c ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġall ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall . none Ġ{ Ġit Ġ!= Ġp Ġ&& Ġit . startsWith ("$ p .") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠProperty Path ( it . split (". ")) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠString . as Property Path () Ġ= ĠProperty Path ( this . split (". ")) Ċ internal Ġfun ĠList < String >. as Property Path () Ġ= ĠProperty Path ( this ) Ċ Ċ internal Ġfun ĠList < Property Path >. merge ( var arg Ġpath Lists : ĠList < Property Path >) Ġ= ĊĠĠĠ ĠProperty Path . merge ( this , Ġ* path Lists ) Ċ Ċ /** Ċ Ġ* ĠMerge s Ġall Ġpaths Ġfrom Ġthe Ġsample Ġconfiguration . ĠNote Ġthat Ġif Ġthe Ġsample Ġconfiguration Ċ Ġ* Ġcontains Ġreferences Ġto Ġproperties Ġthat Ġare Ġnot Ġin Ġthe Ġoriginal Ġlist Ġthey Ġwill Ġbe Ġignored . Ċ Ġ* Ċ Ġ* ĠFor Ġexample Ġgiven Ġthe Ġlist : Ġ[" a . b " Ġ, Ġ" x "] Ċ Ġ* ĠSample Ġproperties Ġwill Ġbe Ġincluded Ġif Ġthey Ġstart Ġwith Ġa Ġor Ġx Ġbut Ġnot Ġy Ċ Ġ*/ Ċ internal Ġfun ĠList < Property Path >. merge ( sample : ĠSample Method ?): ĠList < Property Path > Ġ{ ĊĠĠĠ Ġval Ġpaths From Samples Ġ= Ġsample ?. parameters ?. map Ġ{ ĊĠĠĠĠĠĠĠ ĠProperty Path ( it . parameter Path . split (". ")) ĊĠĠĠ Ġ} Ġ?: ĠlistOf () ĊĊĠĠĠ Ġ// Ġremove Ġparents Ġif Ġchild Ġnodes Ġexists ĊĠĠĠ Ġval Ġpaths Ġ= Ġthis . map Ġ{ Ġit . toString () Ġ} ĊĠĠĠ Ġval Ġuse Paths From Samples Ġ= Ġif Ġ( paths . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġpaths From Samples . filter Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaths . any Ġ{ Ġp . toString (). startsWith ("$ it .") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġpaths From Samples ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠProperty Path . merge ( this , Ġuse Paths From Samples ) Ċ } Ċ