in aws-nimblestudio-streamingimage/src/main/java/software/amazon/nimblestudio/streamingimage/UpdateHandler.java [22:90]
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-StreamingImage::Update",
proxyClient,
progress.getResourceModel(),
progress.getCallbackContext())
.translateToServiceRequest((model) -> {
final UpdateStreamingImageRequest.Builder updateStreamingImageBuilder =
UpdateStreamingImageRequest.builder()
.clientToken(request.getClientRequestToken())
.studioId(model.getStudioId())
.streamingImageId(model.getStreamingImageId());
if (!StringUtils.isEmpty(model.getName())) {
updateStreamingImageBuilder.name(model.getName());
}
if (!StringUtils.isEmpty(model.getDescription())) {
updateStreamingImageBuilder.description(model.getDescription());
}
return updateStreamingImageBuilder.build();
})
.makeServiceCall((updateStreamingImageRequest, client) -> {
final String streamingImageId = updateStreamingImageRequest.streamingImageId();
try {
final GetStreamingImageRequest getStreamingImageRequest = GetStreamingImageRequest.builder()
.streamingImageId(streamingImageId)
.studioId(updateStreamingImageRequest.studioId())
.build();
final GetStreamingImageResponse getStreamingImageResponse = client
.injectCredentialsAndInvokeV2(getStreamingImageRequest, client.client()::getStreamingImage);
if (StreamingImageState.DELETED.equals(getStreamingImageResponse.streamingImage().state())) {
logger.log(String.format("%s [%s] is in state DELETED, update failed", ResourceModel.TYPE_NAME,
streamingImageId));
throw new CfnNotFoundException(ResourceModel.TYPE_NAME, streamingImageId);
}
final UpdateStreamingImageResponse updateStreamingImageResponse = client
.injectCredentialsAndInvokeV2(updateStreamingImageRequest,
client.client()::updateStreamingImage);
logger.log(String.format("%s [%s] update requested successfully", ResourceModel.TYPE_NAME,
streamingImageId));
return updateStreamingImageResponse;
} catch (final NimbleException e) {
logger.log(String.format("%s [%s] Exception during update", ResourceModel.TYPE_NAME,
streamingImageId));
throw ExceptionTranslator.translateToCfnException(e);
}
})
/*
* Even though CREATE and DELETE requests are async and require stabilization, UPDATE requests are
* synchronous and do not require stabilization.
*/
.progress()
)
.then((r) -> new ReadHandler().handleRequest(proxy, request, callbackContext, proxyClient, logger));
}