package Ġcom . netflix . spin n aker . ke el . persistence Ċ Ċ import Ġcom . netflix . spin n aker . ke el . api . Delivery Config Ċ import Ġcom . netflix . spin n aker . ke el . api . Resource Ċ import Ġcom . netflix . spin n aker . ke el . api . Resource Spec Ċ import Ġcom . netflix . spin n aker . ke el . api . id Ċ import Ġcom . netflix . spin n aker . ke el . core . api . resources Ċ import Ġcom . netflix . spin n aker . ke el . events . Resource Deleted Ċ import Ġjava . time . Clock Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . context . Application Event Publisher Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . springframework . transaction . annotation . Propagation . REQUIRED Ċ import Ġorg . springframework . transaction . annotation . Transactional Ċ Ċ /** Ċ Ġ* ĠA Ġclass Ġused Ġto Ġorche strate Ġthe Ġdeletion Ġof Ġdelivery Ġconfigs Ġand Ġtheir Ġassociated Ġresources Ċ Ġ*/ Ċ @ Component Ċ class ĠClean er ( ĊĠ Ġprivate Ġval Ġdelivery Config Repository : ĠDelivery Config Repository , ĊĠ Ġprivate Ġval Ġartifact Repository : ĠArtifact Repository , ĊĠ Ġprivate Ġval Ġresource Repository : ĠResource Repository , ĊĠ Ġprivate Ġval Ġclock : ĠClock , ĊĠ Ġprivate Ġval Ġpublisher : ĠApplication Event Publisher Ċ ) Ġ{ ĊĠ Ġprivate Ġval Ġlog Ġby Ġlazy Ġ{ ĠLoggerFactory . getLogger ( java Class ) Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠDeletes Ġa Ġdelivery Ġconfig Ġand Ġeverything Ġin Ġit . ĊĠĠ Ġ*/ ĊĠ Ġ@ Transactional ( propagation Ġ= ĠREQUIRED ) ĊĠ Ġfun Ġdelete ( delivery Config Name : ĠString ): ĠDelivery Config Ġ{ ĊĠĠĠ Ġval Ġdelivery Config Ġ= Ġdelivery Config Repository . get ( delivery Config Name ) ĊĊĠĠĠ Ġdelivery Config . environments . forEach Ġ{ Ġenvironment Ġ-> ĊĠĠĠĠĠ Ġenvironment . resources . forEach Ġ{ Ġresource Ġ-> ĊĠĠĠĠĠĠĠ Ġ// Ġresources Ġmust Ġbe Ġremoved Ġfrom Ġthe Ġenvironment Ġthen Ġdeleted ĊĠĠĠĠĠĠĠ Ġdelivery Config Repository . delete Resource From Env ( delivery Config . name , Ġenvironment . name , Ġresource . id ) ĊĠĠĠĠĠĠĠ Ġdelete Resource ( resource . id ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġdelivery Config Repository . delete Environment ( delivery Config . name , Ġenvironment . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdelivery Config . artifacts . forEach Ġ{ Ġartifact Ġ-> ĊĠĠĠĠĠ Ġartifact Repository . delete ( artifact ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdelivery Config Repository . delete ( delivery Config . name ) ĊĊĠĠĠ Ġreturn Ġdelivery Config ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠRemoves Ġartifacts , Ġenvironments , Ġand Ġresources Ġthat Ġwere Ġpresent Ġin Ġthe Ġ[ old ] ĊĠĠ Ġ* Ġdelivery Ġconfig Ġand Ġare Ġnot Ġpresent Ġin Ġthe Ġ[ new ] Ġdelivery Ġconfig ĊĠĠ Ġ*/ ĊĠ Ġfun Ġremove Resources ( old : ĠDelivery Config , Ġnew : ĠDelivery Config ) Ġ{ ĊĠĠĠ Ġval Ġnew Resources Ġ= Ġnew . resources . map Ġ{ Ġit . id Ġ} ĊĠĠĠ Ġold . artifacts . forEach Ġ{ Ġartifact Ġ-> ĊĠĠĠĠĠ Ġif Ġ( artifact Ġ! in Ġnew . artifacts ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" Updating Ġconfig Ġ${ new . name }: Ġremoving Ġartifact Ġ$ artifact ") ĊĠĠĠĠĠĠĠ Ġartifact Repository . delete ( artifact ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġold . environments ĊĠĠĠĠĠ Ġ. forEach Ġ{ Ġenvironment Ġ-> ĊĠĠĠĠĠĠĠ Ġenvironment . resources . forEach Ġ{ Ġresource Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( resource . id Ġ! in Ġnew Resources ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Updating Ġconfig Ġ${ new . name }: Ġremoving Ġresource Ġ${ resource . id } Ġin Ġenvironment Ġ${ environment . name }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelivery Config Repository . delete Resource From Env ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelivery Config Name Ġ= Ġold . name , Ġenvironment Name Ġ= Ġenvironment . name , Ġresource Id Ġ= Ġresource . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Resource ( resource . id ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( environment . name Ġ! in Ġnew . environments . map Ġ{ Ġit . name Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Updating Ġconfig Ġ${ new . name }: Ġremoving Ġenvironment Ġ${ environment . name }") ĊĠĠĠĠĠĠĠĠĠ Ġdelivery Config Repository . delete Environment ( new . name , Ġenvironment . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġdelete Resource ( id : ĠString ): ĠResource < out ĠResource Spec > Ġ= ĊĠĠĠ Ġresource Repository ĊĠĠĠĠĠ Ġ. get < Resource Spec >( id ) ĊĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠ Ġresource Repository . delete ( id ) ĊĠĠĠĠĠĠĠ Ġpublisher . publish Event ( Resource Deleted ( it , Ġclock )) ĊĠĠĠĠĠ Ġ} Ċ } Ċ