in aws-nimblestudio-launchprofile/src/main/java/software/amazon/nimblestudio/launchprofile/DeleteHandler.java [23:118]
public ProgressEvent<ResourceModel, CallbackContext> handleRequest(
final AmazonWebServicesClientProxy proxy,
final ResourceHandlerRequest<ResourceModel> request,
final CallbackContext callbackContext,
final ProxyClient<NimbleClient> proxyClient,
final Logger logger) {
return ProgressEvent.progress(request.getDesiredResourceState(), callbackContext)
.then(progress -> proxy
.initiate(
"AWS-NimbleStudio-LaunchProfile::Delete",
proxyClient,
progress.getResourceModel(),
progress.getCallbackContext())
.translateToServiceRequest(model -> DeleteLaunchProfileRequest.builder()
.clientToken(request.getClientRequestToken())
.studioId(model.getStudioId())
.launchProfileId(model.getLaunchProfileId())
.build())
.makeServiceCall((awsRequest, client) -> {
final String launchProfileId = awsRequest.launchProfileId();
try {
final GetLaunchProfileRequest getLaunchProfileRequest = GetLaunchProfileRequest.builder()
.studioId(awsRequest.studioId())
.launchProfileId(launchProfileId)
.build();
final GetLaunchProfileResponse getLaunchProfileResponse = client.injectCredentialsAndInvokeV2(
getLaunchProfileRequest, client.client()::getLaunchProfile);
final LaunchProfileState state = getLaunchProfileResponse.launchProfile().state();
if(LaunchProfileState.DELETED.equals(state) || LaunchProfileState.CREATE_FAILED.equals(state)) {
logger.log(String.format("%s [%s] is already in %s state",
ResourceModel.TYPE_NAME, launchProfileId, state.toString()));
throw new CfnNotFoundException(ResourceModel.TYPE_NAME, launchProfileId);
}
if(LaunchProfileState.DELETE_IN_PROGRESS.equals(state)) {
logger.log(String.format("%s [%s] is already in DELETE_IN_PROGRESS state",
ResourceModel.TYPE_NAME,launchProfileId));
return null;
}
final DeleteLaunchProfileResponse deleteLaunchProfileResponse = client
.injectCredentialsAndInvokeV2(awsRequest, client.client()::deleteLaunchProfile);
logger.log(String.format("%s [%s] deletion requested successfully", ResourceModel.TYPE_NAME,
launchProfileId));
return deleteLaunchProfileResponse;
} catch (final NimbleException e) {
logger.log(String.format("%s [%s] exception during deletion", ResourceModel.TYPE_NAME,
launchProfileId));
throw Translator.translateToCfnException(e);
}
})
.stabilize((awsRequest, awsResponse, client, model, context) -> {
final String launchProfileId = awsRequest.launchProfileId();
model.setLaunchProfileId(launchProfileId);
GetLaunchProfileRequest getLaunchProfileRequest = GetLaunchProfileRequest.builder()
.studioId(awsRequest.studioId())
.launchProfileId(launchProfileId)
.build();
GetLaunchProfileResponse getLaunchProfileResponse;
try {
getLaunchProfileResponse = client.injectCredentialsAndInvokeV2(
getLaunchProfileRequest, client.client()::getLaunchProfile);
} catch (final NimbleException e) {
logger.log(String.format("%s [%s] exception during deletion", ResourceModel.TYPE_NAME,
launchProfileId));
throw Translator.translateToCfnException(e);
}
if (LaunchProfileState.DELETE_IN_PROGRESS.equals(getLaunchProfileResponse.launchProfile().state())) {
logger.log(String.format("%s [%s] is in state DELETE_IN_PROGRESS, deletion in progress",
ResourceModel.TYPE_NAME, launchProfileId));
return false;
}
if (LaunchProfileState.DELETED.equals(getLaunchProfileResponse.launchProfile().state())) {
logger.log(String.format("%s [%s] is in state DELETED, deletion succeeded",
ResourceModel.TYPE_NAME, launchProfileId));
return true;
}
logger.log(String.format("%s [%s] is in error state %s, deletion failed", ResourceModel.TYPE_NAME,
launchProfileId, getLaunchProfileResponse.launchProfile().state()));
throw new CfnGeneralServiceException(String.format("Unexpected state %s: %s - %s",
getLaunchProfileResponse.launchProfile().stateAsString(),
getLaunchProfileResponse.launchProfile().statusCodeAsString(),
getLaunchProfileResponse.launchProfile().statusMessage()));
})
.done(awsResponse -> ProgressEvent.<ResourceModel, CallbackContext>builder()
.status(OperationStatus.SUCCESS)
.build()));
}