protected ProgressEvent handleRequest()

in aws-cloudformation-resourceversion/src/main/java/software/amazon/cloudformation/resourceversion/CreateHandler.java [17:50]


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

        ResourceModel resourceModel = request.getDesiredResourceState();
        return ProgressEvent.progress(resourceModel, callbackContext)
                .then(progress ->
                        proxy.initiate("AWS-CloudFormation-ResourceVersion::Create", proxyClient, resourceModel, callbackContext)
                                .translateToServiceRequest(Translator::translateToCreateRequest)
                                .makeServiceCall((awsRequest, sdkProxyClient) -> sdkProxyClient.injectCredentialsAndInvokeV2(awsRequest, sdkProxyClient.client()::registerType))
                                .done((registerTypeRequest, registerTypeResponse, sdkProxyClient, model, cc) -> {
                                            logger.log(String.format("The resource registered successfully. The registrationToken for the Type [%s] is %s", ResourceModel.TYPE_NAME, registerTypeResponse.registrationToken()));
                                            cc.setRegistrationToken(registerTypeResponse.registrationToken());
                                            DescribeTypeRegistrationResponse describeTypeRegistrationResponse =
                                                    proxy.injectCredentialsAndInvokeV2(Translator
                                                                    .translateToDescribeTypeRegistration(cc.getRegistrationToken()),
                                                            proxyClient.client()::describeTypeRegistration);
                                            if (describeTypeRegistrationResponse == null) {
                                                logger.log(String.format("Failed to describe registration status, invalid response, resource=%s arn=%s",
                                                        model.getTypeName(), model.getArn()));
                                                throw new CfnInternalFailureException();
                                            }
                                            logger.log(String.format("Fetching the TypeVersionArn [%s] from the DescribeTypeRegistrationResponse [%s]", describeTypeRegistrationResponse.typeVersionArn(), describeTypeRegistrationResponse));
                                            model.setArn(describeTypeRegistrationResponse.typeVersionArn());
                                            return ProgressEvent.progress(model, cc);
                                        }
                                )
                )
                .then(progress -> stabilizeOnCreate(progress, proxy, proxyClient))
                .then(progress -> new ReadHandler().handleRequest(proxy, request, progress.getCallbackContext(), proxyClient, logger));
    }