/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġ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 . ke el . api . constraints Ċ Ċ import Ġcom . netflix . spin n aker . ke el . api . Constraint Ċ 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 . api . artifacts . Delivery Artifact Ċ import Ġcom . netflix . spin n aker . ke el . api . events . Constraint StateChanged Ċ import Ġcom . netflix . spin n aker . ke el . api . plugins . Constraint Evaluator Ċ import Ġcom . netflix . spin n aker . ke el . api . plugins . Plugin Notification Config Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Constraint Evaluator ] Ġthat Ġdeals Ġwith Ġthe Ġlogic Ġfor Ġstate ful Ġconstraints . Ċ Ġ* Ċ Ġ* ĠThe Ġ[ can Prom ote ] Ġfunction Ġhandles Ġreading Ġstate Ġfrom Ġthe Ġrepository Ġand Ġsaving Ġinitial Ġstate . Ċ Ġ* ĠIf Ġthe Ġstate Ġis Ġ' done ' Ġ( failed Ġor Ġpassed ) Ġthe Ġspecific Ġimplementations Ġdon 't Ġget Ġcalled . Ċ Ġ* ĠIf Ġthe Ġstate Ġis Ġnot Ġ' done ', Ġunderlying Ġimplementations Ġ[ can Prom ote ] Ġfunctions Ġget Ġcalled . Ċ Ġ*/ Ċ interface ĠStateful Constraint Evaluator < CONSTRAINT Ġ: ĠConstraint , ĠATTRIBUT ES Ġ: ĠConstraint State Attributes > Ġ: ĠConstraint Evaluator < CONSTRAINT > Ġ{ ĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġtype Ġof Ġthe Ġmetadata Ġsaved Ġabout Ġthe Ġconstraint , Ġsurf aced Ġhere Ġto Ġautomatically Ġregister Ġit ĊĠĠ Ġ* Ġfor Ġserialization ĊĠĠ Ġ*/ ĊĠ Ġval Ġattribute Type : ĠSupported Constraint Attributes Type < ATTRIBUTES > ĊĊĠ Ġval Ġrepository : ĠConstraint Repository ĊĊĠ Ġ@ Jvm Default ĊĠ Ġoverride Ġfun Ġcan Prom ote ( ĊĠĠĠ Ġartifact : ĠDelivery Artifact , ĊĠĠĠ Ġversion : ĠString , ĊĠĠĠ Ġdelivery Config : ĠDelivery Config , ĊĠĠĠ Ġtarget Environment : ĠEnvironment ĊĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġconstraint Ġ= ĠConstraint Evaluator . get Constraint For Environment ( ĊĠĠĠĠĠ Ġdelivery Config , ĊĠĠĠĠĠ Ġtarget Environment . name , ĊĠĠĠĠĠ Ġsupported Type . type ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġvar Ġstate Ġ= Ġrepository . get Constraint State ( ĊĠĠĠĠĠ Ġdelivery Config . name , ĊĠĠĠĠĠ Ġtarget Environment . name , ĊĠĠĠĠĠ Ġversion , ĊĠĠĠĠĠ Ġconstraint . type , ĊĠĠĠĠĠ Ġartifact . reference ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġif Ġ( state Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġstate Ġ= ĠConstraint State ( ĊĠĠĠĠĠĠĠ Ġdelivery Config Name Ġ= Ġdelivery Config . name , ĊĠĠĠĠĠĠĠ Ġenvironment Name Ġ= Ġtarget Environment . name , ĊĠĠĠĠĠĠĠ Ġartifact Version Ġ= Ġversion , ĊĠĠĠĠĠĠĠ Ġartifact Reference Ġ= Ġartifact . reference , ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġconstraint . type , ĊĠĠĠĠĠĠĠ Ġstatus Ġ= ĠConstraint Status . PENDING ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġrepository . store Constraint State ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠ Ġstate . jud ged ByUser () Ġ&& Ġ Ġstate . failed () Ġ-> Ġfalse ĊĠĠĠĠĠ Ġstate . jud ged ByUser () Ġ&& Ġ Ġstate . passed () Ġ-> Ġtrue ĊĠĠĠĠĠ Ġ! state . jud ged ByUser () Ġ&& Ġ Ġshould Always Re evaluate () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġcan Prom ote ( artifact , Ġversion , Ġdelivery Config , Ġtarget Environment , Ġconstraint , Ġstate ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ! state . jud ged ByUser () Ġ&& Ġ! should Always Re evaluate () Ġ&& Ġstate . failed () Ġ-> Ġfalse ĊĠĠĠĠĠ Ġ! state . jud ged ByUser () Ġ&& Ġ! should Always Re evaluate () Ġ&& Ġstate . passed () Ġ-> Ġfalse ĊĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġcan Prom ote ( artifact , Ġversion , Ġdelivery Config , Ġtarget Environment , Ġconstraint , Ġstate ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThis Ġfunction Ġis Ġcalled Ġif Ġa Ġuser Ġhas Ġnot Ġjud ged Ġthe Ġconstraint ĊĠĠ Ġ* Ġ( if Ġthe Ġstate Ġis Ġnot ĠOVER RIDE _ FAIL Ġor ĠOVER RIDE _ PASS ) Ġ. ĊĠĠ Ġ* ĊĠĠ Ġ* ĠA Ġconstraint Ġcan Ġchange Ġits Ġstatus Ġbetween ĠPASS Ġand ĠFAIL Ġby Ġsaving Ġthe Ġnew Ġstatus Ġduring Ġthis Ġfunction ĊĠĠ Ġ* Ġevaluation . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġartifact Ġcan Ġbe Ġprom oted , Ġfalse Ġotherwise ĊĠĠ Ġ*/ ĊĠ Ġfun Ġcan Prom ote ( ĊĠĠĠ Ġartifact : ĠDelivery Artifact , ĊĠĠĠ Ġversion : ĠString , ĊĠĠĠ Ġdelivery Config : ĠDelivery Config , ĊĠĠĠ Ġtarget Environment : ĠEnvironment , ĊĠĠĠ Ġconstraint : ĠCONSTRAINT , ĊĠĠĠ Ġstate : ĠConstraint State ĊĠ Ġ): ĠBoolean ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCallback ĠAPI Ġfor Ġ[ Constraint StateChanged ]. ĠOverride Ġthis Ġmethod Ġif Ġyour Ġ[ State ful Constraint Evaluator ] Ġneeds ĊĠĠ Ġ* Ġto Ġtake Ġaction Ġwhen Ġa Ġsupported Ġconstraint 's Ġstate Ġchanges . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠDon 't Ġimplement Ġboth Ġ[ on Constraint StateChanged ] Ġand Ġ[ on Constraint StateChanged With Notification ], Ġbecause Ġboth ĊĠĠ Ġ* Ġwill Ġbe Ġcalled . ĊĠĠ Ġ*/ ĊĠ Ġ@ Jvm Default ĊĠ Ġ@ Deprecated ( ĊĠĠĠ Ġmessage Ġ= Ġ" Implement Ġthe Ġnew Ġmethod Ġwith Ġnotifications ", ĊĠĠĠ Ġreplace With Ġ= ĠReplace With (" on Constraint StateChanged With Notification ") ĊĠ Ġ) ĊĠ Ġfun Ġon Constraint StateChanged ( event : ĠConstraint StateChanged ) Ġ{ ĊĠĠĠ Ġ// Ġdefault Ġimplementation Ġis Ġa Ġno - op ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCallback ĠAPI Ġfor Ġ[ Constraint StateChanged ]. ĠOverride Ġthis Ġmethod Ġif Ġyour Ġ[ State ful Constraint Evaluator ] Ġneeds ĊĠĠ Ġ* Ġto Ġtake Ġaction Ġwhen Ġa Ġsupported Ġconstraint 's Ġstate Ġchanges ĠAND Ġyou Ġneed Ġto Ġsend Ġa Ġnotification . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠDon 't Ġimplement Ġboth Ġ[ on Constraint StateChanged ] Ġand Ġ[ on Constraint StateChanged With Notification ], Ġbecause Ġboth ĊĠĠ Ġ* Ġwill Ġbe Ġcalled . ĊĠĠ Ġ*/ ĊĠ Ġ@ Jvm Default ĊĠ Ġfun Ġon Constraint StateChanged With Notification ( event : ĠConstraint StateChanged ): ĠPlugin Notification Config ? Ġ{ ĊĠĠĠ Ġ// Ġdefault Ġimplementation Ġis Ġa Ġno - op ĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠControls Ġwhether Ġwe Ġshould Ġask Ġthe Ġconstraint Ġplugin Ġto Ġdecide Ġthe Ġresult Ġevery Ġtime , Ġor Ġjust Ġwhen Ġthe ĊĠĠ Ġ* Ġstatus Ġis Ġnot Ġa Ġterminal Ġstatus . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠReturn Ġtrue Ġto Ġallow Ġthis Ġconstraint Ġto Ġbe Ġable Ġto Ġflip Ġfrom Ġpass Ġto Ġfail . ĊĠĠ Ġ* ĠOtherwise , Ġonce Ġthe Ġconstraint Ġent ers Ġa Ġpass / fail Ġstate , Ġit Ġstays Ġthere Ġforever . ĊĠĠ Ġ*/ ĊĠ Ġ@ Jvm Default ĊĠ Ġfun Ġshould Always Re evaluate (): ĠBoolean Ġ= Ġfalse Ċ } Ċ