/* Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ċ Ġ* Ġor Ġmore Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ċ Ġ* Ġdistributed Ġwith Ġthis Ġwork Ġfor Ġadditional Ġinformation Ċ Ġ* Ġregarding Ġcopyright Ġownership . Ġ ĠThe ĠASF Ġlicenses Ġthis Ġfile Ċ Ġ* Ġto Ġyou Ġ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 Ċ Ġ* Ċ Ġ* Ġhttp :// 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 Ġorg . apache . t inker pop 4 . gre mlin . process . traversal . step . map Ċ Ċ import Ġorg . apache . t inker pop 4 . gre mlin . process . traversal . Traversal Ċ Ċ /** Ċ Ġ* Ġ@ author ĠMark o ĠA . ĠRod rig ue z Ġ( http :// mark or od rig ue z . com ) Ċ Ġ*/ Ċ class ĠProject Step < S , ĠE >( traversal : ĠTra versal . Admin ?, Ġvar arg Ġproject Keys : ĠString ?) Ġ: ĊĠĠĠ ĠScalar Map Step < S , ĠMap < String ?, ĠE >? >( traversal ), ĠTra versal Parent , ĠBy Mod ulating Ġ{ ĊĠĠĠ Ġval Ġproject Keys : ĠList < String > ĊĠĠĠ Ġprivate Ġvar Ġtraversal Ring : ĠTra versal Ring < S , ĠE > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . project Keys Ġ= ĠArrays . asList ( project Keys ) ĊĠĠĠĠĠĠĠ Ġtraversal Ring Ġ= ĠTra versal Ring () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġprotected Ġfun Ġmap ( tra verser : ĠTr aver ser . Admin < S >? ): ĠMap < String , ĠE > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġend : ĠMap < String , ĠE > Ġ= ĠLinkedHashMap ( project Keys . size (), Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( project Key Ġin Ġproject Keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTra versal Util . produce ( tra verser , Ġtraversal Ring . next ()). if Product ive Ġ{ Ġp Ġ-> Ġend . put ( project Key , Ġp Ġas ĠE ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtraversal Ring . reset () ĊĠĠĠĠĠĠĠ Ġreturn Ġend ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . reset () ĊĠĠĠĠĠĠĠ Ġtraversal Ring . reset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString Factory . step String ( this , Ġproject Keys , Ġtraversal Ring ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġfun Ġclone (): ĠProject Step < S , ĠE > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclone Ġ= Ġsuper . clone () Ġas ĠProject Step < S , ĠE > ĊĠĠĠĠĠĠĠ Ġclone . traversal Ring Ġ= Ġtraversal Ring . clone () ĊĠĠĠĠĠĠĠ Ġreturn Ġclone ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġfun Ġset Traversal ( parent Traversal : ĠTra versal . Admin < *, Ġ*> ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set Traversal ( parent Traversal ) ĊĠĠĠĠĠĠĠ Ġtraversal Ring . get Tra vers als (). forEach ( this :: integrate Child ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . hashCode () Ġxor Ġtraversal Ring . hashCode () Ġxor Ġproject Keys . hashCode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Override ĊĠĠĠ Ġval Ġlocal Children : ĠList < Any > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtraversal Ring . get Tra vers als () ĊĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġfun Ġmod ulate By ( select Traversal : ĠTra versal . Admin < *, Ġ*> ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtraversal Ring . add Traversal ( this . integrate Child ( select Traversal )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġfun Ġreplace Local Child ( old Traversal : ĠTra versal . Admin < *, Ġ*> ?, Ġnew Traversal : ĠTra versal . Admin < *, Ġ*> ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtraversal Ring . replace Traversal ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Traversal Ġas ĠTra versal . Admin < S , ĠE > ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Traversal Ġas ĠTra versal . Admin < S , ĠE >? ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Override ĊĠĠĠ Ġval Ġrequirements : ĠSet < Any > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . get Self And Child Requirements () Ċ }