/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ċ Ġ* Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ċ Ġ* Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ċ Ġ* Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ċ Ġ* Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN Ċ Ġ* ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , Ċ Ġ* ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE Ċ Ġ* ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . devops . process . yaml . v 2 . parsers . template . models Ċ Ċ import Ġcom . tencent . devops . process . yaml . v 2 . exception . Yaml FormatException Ċ Ċ class ĠTemplate Deep TreeNode ( ĊĠĠĠ Ġval Ġpath : ĠString , ĊĠĠĠ Ġval Ġparent : ĠTemplate Deep TreeNode ?, ĊĠĠĠ Ġval Ġchildren : ĠMutable List < Template Deep TreeNode > Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġæ¨¡ æĿ¿ æľĢ å¤ļ å¼ķçĶ¨ æķ° åĴĮ æľĢå¤§ æ·± åº¦ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ TEMPLATE _ NUM B Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ TEMPLATE _ DE EP Ġ= Ġ 5 ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTEMPLATE _ NUM B _ BE Y OND Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ % s ] The Ġnumber Ġof Ġreferenced Ġtemplate Ġfiles Ġexceeds Ġthe Ġthreshold Ġ[$ MAX _ TEMPLATE _ NUM B ] Ġ" ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTEMPLATE _ DE EP _ BE Y OND Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ % s ] The Ġtemplate Ġnesting Ġdepth Ġexceeds Ġthe Ġthreshold Ġ[$ MAX _ TEMPLATE _ DE EP }] " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( node Path : ĠString ): ĠTemplate Deep TreeNode Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠTemplate Deep TreeNode ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġnode Path , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġchildren . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( node . get Deep () Ġ> ĠMAX _ TEMPLATE _ DE EP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠYaml FormatException ( TEMPLATE _ DE EP _ BE Y OND . format ( getRoot (). to Str ("", Ġtrue ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( node . getWidth () Ġ> ĠMAX _ TEMPLATE _ NUM B ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠYaml FormatException ( TEMPLATE _ NUM B _ BE Y OND . format ( getRoot (). to Str ("", Ġtrue ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Str ( prefix : ĠString ?, Ġis Tail : ĠBoolean ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġstr . append ( prefix Ġ+ Ġ( if Ġ( is Tail ) Ġ" âĶĶ âĶĢâĶĢ Ġ" Ġelse Ġ" âĶľâĶĢâĶĢ Ġ") Ġ+ Ġpath Ġ+ Ġ"\ n ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchildren . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr . append ( children [ i ]. to Str ( prefix Ġ+ Ġif Ġ( is Tail ) Ġ" ĠĠĠ Ġ" Ġelse Ġ" âĶĤ ĠĠ Ġ" Ġ+ Ġ"\ n ", Ġfalse )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( children . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr . append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren [ children . size Ġ- Ġ 1 ]. to Str ( prefix Ġ+ Ġif Ġ( is Tail ) Ġ" ĠĠĠ Ġ" Ġelse Ġ" âĶĤ ĠĠ Ġ" Ġ+ Ġ"\ n ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġstr . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Deep (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlength Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġit or Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġwhile Ġ( itor . parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit or Ġ= Ġit or . parent !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlength ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlength ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Width (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchildren . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Root (): ĠTemplate Deep TreeNode Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġit or Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġwhile Ġ( itor . parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit or Ġ= Ġit or . parent !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġit or ĊĠĠĠ Ġ} Ċ } Ċ