package software.amazon.customerprofiles.domain; import lombok.NoArgsConstructor; import software.amazon.awssdk.services.customerprofiles.CustomerProfilesClient; import software.amazon.awssdk.services.customerprofiles.model.BadRequestException; import software.amazon.awssdk.services.customerprofiles.model.DeleteDomainRequest; import software.amazon.awssdk.services.customerprofiles.model.DeleteDomainResponse; import software.amazon.awssdk.services.customerprofiles.model.InternalServerException; import software.amazon.awssdk.services.customerprofiles.model.ResourceNotFoundException; import software.amazon.cloudformation.exceptions.CfnGeneralServiceException; import software.amazon.cloudformation.exceptions.CfnInvalidRequestException; import software.amazon.cloudformation.exceptions.CfnNotFoundException; import software.amazon.cloudformation.exceptions.CfnServiceInternalErrorException; import software.amazon.cloudformation.proxy.AmazonWebServicesClientProxy; import software.amazon.cloudformation.proxy.Logger; import software.amazon.cloudformation.proxy.ProgressEvent; import software.amazon.cloudformation.proxy.OperationStatus; import software.amazon.cloudformation.proxy.ResourceHandlerRequest; @NoArgsConstructor public class DeleteHandler extends BaseHandler { private CustomerProfilesClient client; public DeleteHandler(CustomerProfilesClient client) { this.client = client; } @Override public ProgressEvent handleRequest( final AmazonWebServicesClientProxy proxy, final ResourceHandlerRequest request, final CallbackContext callbackContext, final Logger logger) { if (this.client == null) { this.client = ClientBuilder.getClient(); } final ResourceModel model = request.getDesiredResourceState(); final DeleteDomainRequest deleteDomainRequest = DeleteDomainRequest.builder() .domainName(model.getDomainName()) .build(); final DeleteDomainResponse deleteDomainResponse; try { deleteDomainResponse = proxy.injectCredentialsAndInvokeV2(deleteDomainRequest, client::deleteDomain); logger.log(String.format("Domain deleted with domainName = %s", model.getDomainName())); } catch (BadRequestException e) { throw new CfnInvalidRequestException(e); } catch (InternalServerException e) { throw new CfnServiceInternalErrorException(e); } catch (ResourceNotFoundException e) { throw new CfnNotFoundException(e); } catch (Exception e) { throw new CfnGeneralServiceException(e); } return ProgressEvent.builder() .resourceModel(null) .status(OperationStatus.SUCCESS) .message(deleteDomainResponse.message()) .build(); } }