package Ġcom . netflix . spin n aker . ke el . act uation Ċ Ċ import Ġcom . netflix . spin n aker . ke el . api . Delivery Config Ċ import Ġcom . netflix . spin n aker . ke el . api . Environment Ċ import Ġcom . netflix . spin n aker . ke el . constraints . Constraint Evaluator Ċ import Ġcom . netflix . spin n aker . ke el . persistence . Artifact Repository Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ class ĠEnvironment Promotion Checker ( ĊĠ Ġprivate Ġval Ġartifact Repository : ĠArtifact Repository , ĊĠ Ġprivate Ġval Ġconstraints : ĠList < Constraint Evaluator <* >> Ċ ) Ġ{ ĊĊĠ Ġsuspend Ġfun Ġcheck Environments ( delivery Config : ĠDelivery Config ) Ġ{ ĊĠĠĠ Ġdelivery Config ĊĠĠĠĠĠ Ġ. artifacts ĊĠĠĠĠĠ Ġ. associate With Ġ{ Ġartifact Repository . versions ( it ) Ġ} ĊĠĠĠĠĠ Ġ. forEach Ġ{ Ġ( artifact , Ġversions ) Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( versions . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlog . warn (" No Ġversions Ġfor Ġ${ artifact . type } Ġartifact Ġ${ artifact . name } Ġare Ġknown ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġdelivery Config . environments . forEach Ġ{ Ġenvironment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġif Ġ( environment . constraints . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversions . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversions . first Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints . all Ġ{ Ġconstraint Evaluator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! environment . has Supported Constraint ( constraint Evaluator ) Ġ|| Ġconstraint Evaluator . can Prom ote ( artifact , Ġv , Ġdelivery Config , Ġenvironment . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġartifact Repository . approve Version For ( delivery Config , Ġartifact , Ġversion , Ġenvironment . name ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠEnvironment . has Supported Constraint ( constraint Evaluator : ĠConstraint Evaluator <* >) Ġ= ĊĠĠĠ Ġconstraints . any Ġ{ Ġit . java Class . isAssignableFrom ( constraint Evaluator . constraint Type ) Ġ} ĊĊĠ Ġprivate Ġval Ġlog Ġby Ġlazy Ġ{ ĠLoggerFactory . getLogger ( java Class ) Ġ} Ċ } Ċ