protected ProgressEvent handleRequest()

in aws-nimblestudio-streamingimage/src/main/java/software/amazon/nimblestudio/streamingimage/ReadHandler.java [18:79]


    protected ProgressEvent<ResourceModel, CallbackContext> handleRequest(
        final AmazonWebServicesClientProxy proxy,
        final ResourceHandlerRequest<ResourceModel> request,
        final CallbackContext callbackContext,
        final ProxyClient<NimbleClient> proxyClient,
        final Logger logger) {

        return proxy.initiate(
                "AWS-NimbleStudio-StreamingImage::Read",
                proxyClient,
                request.getDesiredResourceState(),
                callbackContext)
            .translateToServiceRequest((model) -> GetStreamingImageRequest.builder()
                .studioId(model.getStudioId())
                .streamingImageId(model.getStreamingImageId())
                .build()
            )
            .makeServiceCall((getStreamingImageRequest, client) -> {
                try {
                    final NimbleClient studioClient = client.client();
                    final GetStreamingImageResponse getResponse = client
                        .injectCredentialsAndInvokeV2(getStreamingImageRequest, studioClient::getStreamingImage);

                    if (StreamingImageState.DELETED.equals(getResponse.streamingImage().state())) {
                        // If a resource was deleted, read request needs to throw a NotFoundException
                        logger.log(String.format("%s [%s] is in state DELETED, unable to get resource", ResourceModel.TYPE_NAME,
                            getResponse.streamingImage().streamingImageId()));
                        throw new CfnNotFoundException(ResourceModel.TYPE_NAME, getResponse.streamingImage().streamingImageId());
                    }

                    logger.log(String.format("%s [%s] read successful", ResourceModel.TYPE_NAME,
                        getResponse.streamingImage().streamingImageId()));

                    return getResponse;
                } catch (final NimbleException e) {
                    logger.log(String.format("%s [%s] exception during read", ResourceModel.TYPE_NAME,
                        getStreamingImageRequest.streamingImageId()));
                    throw ExceptionTranslator.translateToCfnException(e);
                }
            })
            .done((awsResponse) -> {
                ResourceModel.ResourceModelBuilder modelBuilder = ResourceModel.builder()
                    .studioId(request.getDesiredResourceState().getStudioId())
                    .streamingImageId(awsResponse.streamingImage().streamingImageId())
                    .ec2ImageId(awsResponse.streamingImage().ec2ImageId())
                    .name(awsResponse.streamingImage().name())
                    .description(awsResponse.streamingImage().description())
                    .owner(awsResponse.streamingImage().owner())
                    .eulaIds(awsResponse.streamingImage().eulaIds())
                    .platform(awsResponse.streamingImage().platform())
                    .tags(awsResponse.streamingImage().tags());

                if(awsResponse.streamingImage().encryptionConfiguration() != null) {
                    modelBuilder.encryptionConfiguration(StreamingImageEncryptionConfiguration.builder()
                        .keyType(awsResponse.streamingImage().encryptionConfiguration().keyTypeAsString())
                        .keyArn(awsResponse.streamingImage().encryptionConfiguration().keyArn())
                        .build());
                }

                return ProgressEvent.defaultSuccessHandler(modelBuilder.build());
            });
    }