package software.amazon.events.apidestination; import software.amazon.awssdk.awscore.exception.AwsServiceException; import software.amazon.awssdk.services.eventbridge.EventBridgeClient; import software.amazon.awssdk.services.eventbridge.model.DeleteApiDestinationRequest; import software.amazon.awssdk.services.eventbridge.model.DeleteApiDestinationResponse; import software.amazon.awssdk.services.eventbridge.model.ResourceNotFoundException; import software.amazon.cloudformation.exceptions.CfnGeneralServiceException; import software.amazon.cloudformation.exceptions.CfnNotFoundException; import software.amazon.cloudformation.proxy.AmazonWebServicesClientProxy; import software.amazon.cloudformation.proxy.Logger; import software.amazon.cloudformation.proxy.ProgressEvent; import software.amazon.cloudformation.proxy.ProxyClient; import software.amazon.cloudformation.proxy.ResourceHandlerRequest; public class DeleteHandler extends BaseHandlerStd { private Logger logger; protected ProgressEvent handleRequest( final AmazonWebServicesClientProxy proxy, final ResourceHandlerRequest request, final CallbackContext callbackContext, final ProxyClient proxyClient, final Logger logger) { this.logger = logger; final ResourceModel model = request.getDesiredResourceState(); logger.log(String.format("Resource module: %s", model.toString())); return ProgressEvent.progress(model, callbackContext) .then(progress -> proxy.initiate("AWS-Events-ApiDestination::Delete", proxyClient, model, callbackContext) .translateToServiceRequest(Translator::translateToDeleteRequest) .makeServiceCall(this::deleteResource) .done(this::setResourceModelToNullAndReturnSuccess)); } private ProgressEvent setResourceModelToNullAndReturnSuccess( DeleteApiDestinationRequest deleteRequest, DeleteApiDestinationResponse deleteResponse, ProxyClient proxyClient, ResourceModel resourceModel, CallbackContext callbackContext) { return ProgressEvent.defaultSuccessHandler(null); } private DeleteApiDestinationResponse deleteResource(DeleteApiDestinationRequest awsRequest, ProxyClient proxyClient) { DeleteApiDestinationResponse awsResponse; try { awsResponse = proxyClient.injectCredentialsAndInvokeV2(awsRequest, proxyClient.client()::deleteApiDestination); } catch (final ResourceNotFoundException e) { // Api destination does not exist throw new CfnNotFoundException(e); } catch (final AwsServiceException e) { throw new CfnGeneralServiceException(ResourceModel.TYPE_NAME, e); } logger.log(String.format("%s successfully deleted.", ResourceModel.TYPE_NAME)); return awsResponse; } }