public ProgressEvent handleRequest()

in aws-iot-domainconfiguration/src/main/java/com/amazonaws/iot/domainconfiguration/CreateHandler.java [70:139]


    public ProgressEvent<ResourceModel, CallbackContext> handleRequest(
            final AmazonWebServicesClientProxy proxy,
            final ResourceHandlerRequest<ResourceModel> request,
            final CallbackContext callbackContext,
            final Logger logger) {

        final ResourceModel model = request.getDesiredResourceState();
        final String domainConfigName = getDomainConfigurationName(model, request);
        model.setDomainConfigurationName(domainConfigName);

        if (callbackContext != null && callbackContext.isCreateOrUpdateInProgress()) {
            int currentRetryCount = callbackContext.getRetryCount();
            try {
                final ProgressEvent<ResourceModel, CallbackContext> readResponse = (new ReadHandler(iotClient))
                        .handleRequest(proxy, request, CallbackContext.builder().build(), logger);
                logger.log(String.format("%s [%s] created successfully", ResourceModel.TYPE_NAME, domainConfigName));
                return readResponse;
            } catch (final CfnNotFoundException e) {
                if(currentRetryCount >= ResourceUtil.MAX_RETRIES)
                    throw new CfnResourceConflictException(model.getDomainName(), model.getArn(),
                            "Unable to create the resource", e);
                else
                    return ProgressEvent.defaultInProgressHandler(
                            CallbackContext.builder().createOrUpdateInProgress(true).retryCount(currentRetryCount + 1).build(),
                            ResourceUtil.DELAY_CONSTANT, model);
            }
        }

        final CreateDomainConfigurationRequest domainRequest = CreateDomainConfigurationRequest.builder()
                .domainConfigurationName(domainConfigName)
                .domainName(model.getDomainName())
                .authorizerConfig(ResourceUtil.getSdkAuthorizerConfig(model))
                .serverCertificateArns(model.getServerCertificateArns())
                .serviceType(model.getServiceType())
                .tags(getTags(model))
                .validationCertificateArn(model.getValidationCertificateArn())
                .build();

        try {
            CreateDomainConfigurationResponse response = proxy.injectCredentialsAndInvokeV2(domainRequest,
                    iotClient::createDomainConfiguration);
            logger.log(String.format("%s [%s] created. Waiting for %d seconds before returning success",
                    ResourceModel.TYPE_NAME, domainConfigName, ResourceUtil.DELAY_CONSTANT));

            // Since we have a property that only shows up in updates, we need to handle it in create as well as
            // there is no support for updateOnlyProperties.
            if (model.getDomainConfigurationStatus() != null) {
                UpdateDomainConfigurationRequest updateRequest = UpdateDomainConfigurationRequest.builder()
                        .domainConfigurationName(domainConfigName)
                        .domainConfigurationStatus(model.getDomainConfigurationStatus())
                        .build();
                proxy.injectCredentialsAndInvokeV2(updateRequest, iotClient::updateDomainConfiguration);
                logger.log(String.format("%s [%s] updated during creation with status [%s]",
                        ResourceModel.TYPE_NAME,
                        domainConfigName,
                        model.getDomainConfigurationStatus()));

            }
            return ProgressEvent.defaultInProgressHandler(
                    CallbackContext.builder().createOrUpdateInProgress(true).retryCount(1).build(),
                    ResourceUtil.DELAY_CONSTANT,
                    ResourceModel.builder().
                            domainConfigurationName(response.domainConfigurationName())
                            .arn(response.domainConfigurationArn())
                            .build());

        } catch (IotException e) {
            throw ExceptionTranslator.translateIotExceptionToHandlerException(e, OPERATION, domainConfigName);
        }
    }