/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠNet flix , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠ Ġ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 Ġcom . netflix . spin n aker . or ca . q . handler Ċ Ċ import Ġcom . netflix . spin n aker . or ca . exceptions . ExceptionHandler Ċ import Ġcom . netflix . spin n aker . or ca . pipeline . expressions . Pipeline Expression Evaluator Ċ import Ġcom . netflix . spin n aker . or ca . pipeline . model . Execution Ċ import Ġcom . netflix . spin n aker . or ca . pipeline . model . Pipeline Ċ import Ġcom . netflix . spin n aker . or ca . pipeline . model . Stage Ċ import Ġcom . netflix . spin n aker . or ca . pipeline . util . Context Parameter Processor Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ /** Ċ Ġ* ĠImplemented Ġby Ġhandlers Ġthat Ġsupport Ġexpression Ġevaluation . Ċ Ġ*/ Ċ interface ĠExpression Aware Ġ{ ĊĊĠ Ġval Ġcontext Parameter Processor : ĠContext Parameter Processor ĊĠ Ġval Ġlog : ĠLogger ĊĠĠĠ Ġget () Ġ= ĠLoggerFactory . getLogger ( java Class ) ĊĊĠ Ġfun ĠStage <* >. with Merged Context (): ĠStage < *> Ġ{ ĊĠĠĠ Ġval Ġprocessed Ġ= Ġprocess Entries ( this ) ĊĠĠĠ Ġval Ġexecution Ġ= Ġget Execution () ĊĠĠĠ Ġthis . set Context ( object Ġ: ĠMutable Map < String , ĠAny ?> Ġby Ġprocessed Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġget ( key : ĠString ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( execution Ġis ĠPipeline ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġ" trigger ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexecution . trigger ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġ" execution ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexecution ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġprocessed [ key ] Ġ?: Ġexecution . getContext ()[ key ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠString Ġ&& ĠContext Parameter Processor . contains Expression ( result )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġaugment ed Context Ġ= Ġprocessed . augment Context ( execution ) ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext Parameter Processor . process ( map Of ( key Ġto Ġresult ), Ġaugment ed Context , Ġtrue )[ key ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġfun ĠStage <* >. include Expression Evaluation Summary () Ġ{ ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠ ĠPipeline Expression Evaluator . SUM MARY Ġin Ġthis . getContext () Ġ-> ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġexpression Evaluation Summary Ġ= Ġthis . getContext ()[ Pipeline Expression Evaluator . SUM MARY ] Ġas ĠMap < *, Ġ*> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġevaluation Errors : ĠList < String > Ġ= Ġexpression Evaluation Summary . values . flatMap Ġ{ Ġ( it Ġas ĠList < *> ). map Ġ{ Ġ( it Ġas ĠMap < *, Ġ* >) [" description "] Ġas ĠString Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġthis . getContext ()[" exception "] Ġ= Ġmerged Exception Errors ( this . getContext ()[" exception "] Ġas ĠMap < *, Ġ*> ?, Ġevaluation Errors ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlog . error (" failed Ġto Ġinclude Ġexpression Ġevaluation Ġerror Ġin Ġcontext ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġmerged Exception Errors ( exception : ĠMap < *, Ġ*> ?, Ġerrors : ĠList < String >): ĠMap < *, Ġ*> Ġ= ĊĠĠĠ Ġif Ġ( exception Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġmap Of (" details " Ġto ĠException Handler . response Details ( Pipeline Expression Evaluator . ERROR , Ġerrors )) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġval Ġdetails Ġ= Ġexception [" details "] Ġas ĠMutable Map < *, Ġ* >? Ġ?: Ġmutable Map Of (" details " Ġto Ġmutable Map Of (" errors " Ġto Ġmutable ListOf < String > ())) ĊĠĠĠĠĠ Ġval Ġmerged Errors : ĠList < *> Ġ= Ġ( details [" errors "] Ġas ĠList < *> ? Ġ?: Ġmutable ListOf < String >()) Ġ+ Ġerrors ĊĠĠĠĠĠ Ġmap Of (" details " Ġto Ġmap Of (" errors " Ġto Ġmerged Errors )) ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess Entries ( stage : ĠStage <* >) Ġ= ĊĠĠĠ Ġcontext Parameter Processor . process ( ĊĠĠĠĠĠ Ġstage . getContext (), ĊĠĠĠĠĠ Ġstage . getContext (). augment Context ( stage . get Execution ()), ĊĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ) ĊĊĠ Ġprivate Ġfun ĠMap < String , ĠAny ?> . augment Context ( execution : ĠExecution <* >) Ġ= ĊĠĠĠ Ġif Ġ( execution Ġis ĠPipeline ) Ġ{ ĊĠĠĠĠĠ Ġthis Ġ+ Ġexecution . context Ġ+ Ġmap Of (" trigger " Ġto Ġexecution . trigger , Ġ" execution " Ġto Ġexecution ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġthis ĊĠĠĠ Ġ} Ċ } Ċ