public ProgressEvent handleRequest()

in aws-timestream-scheduledquery/src/main/java/software/amazon/timestream/scheduledquery/CreateHandler.java [40:133]


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

        final ResourceModel model = request.getDesiredResourceState();

        AmazonTimestreamQuery timestreamClient = TimestreamClientFactory.get(proxy, logger);

        if (StringUtils.isNullOrEmpty(model.getScheduledQueryName())) {
            model.setScheduledQueryName(
                    IdentifierUtils.generateResourceIdentifier(
                            request.getLogicalResourceIdentifier(),
                            request.getClientRequestToken(),
                            SCHEDULED_QUERY_NAME_MAX_LENGTH
                    ));
        }

        if (StringUtils.isNullOrEmpty(model.getClientToken())) {
            model.setClientToken(UUID.randomUUID().toString());
        }

        final CreateScheduledQueryRequest createScheduledQueryRequest =
                new CreateScheduledQueryRequest()
                        .withName(model.getScheduledQueryName())
                        .withQueryString(model.getQueryString())
                        .withScheduleConfiguration(ScheduledQueryModelConverter
                                .convertToTimestreamScheduleConfiguration(model.getScheduleConfiguration()))
                        .withNotificationConfiguration(ScheduledQueryModelConverter
                                .convertToTimestreamNotificationConfiguration(model.getNotificationConfiguration()))
                        .withClientToken(model.getClientToken())
                        .withScheduledQueryExecutionRoleArn(model.getScheduledQueryExecutionRoleArn())
                        .withErrorReportConfiguration(ScheduledQueryModelConverter
                                .convertToTimestreamErrorReportConfiguration(model.getErrorReportConfiguration()));

        final TargetConfiguration targetConfiguration = model.getTargetConfiguration();
        if (targetConfiguration != null) {
            createScheduledQueryRequest.withTargetConfiguration(ScheduledQueryModelConverter
                    .convertToTimestreamTargetConfiguration(targetConfiguration));
        }

        if (!StringUtils.isNullOrEmpty(model.getKmsKeyId())) {
            createScheduledQueryRequest.withKmsKeyId(model.getKmsKeyId());
        }

        final Set<Tag> tags = TagHelper.convertToSet(
                TagHelper.generateTagsForCreate(model, request));
        if (tags != null && !tags.isEmpty()) {
            createScheduledQueryRequest.withTags(ScheduledQueryModelConverter
                    .convertToTimestreamTags(tags));
        }

        try {
            final CreateScheduledQueryResult result =
                    proxy.injectCredentialsAndInvoke(createScheduledQueryRequest, timestreamClient::createScheduledQuery);
            model.setArn(result.getArn());
            model.setSQName(model.getScheduledQueryName());
            model.setSQQueryString(model.getQueryString());
            model.setSQScheduleConfiguration(model.getScheduleConfiguration().toString());
            model.setSQNotificationConfiguration(model.getNotificationConfiguration().toString());
            model.setSQScheduledQueryExecutionRoleArn(model.getScheduledQueryExecutionRoleArn());
            model.setSQErrorReportConfiguration(model.getErrorReportConfiguration().toString());

            if (model.getTargetConfiguration() != null) {
                model.setSQTargetConfiguration(model.getTargetConfiguration().toString());
            } else {
                model.setSQTargetConfiguration(NO_TARGET_CONFIGURATION);
            }

            if (!StringUtils.isNullOrEmpty(model.getKmsKeyId())) {
                model.setSQKmsKeyId(model.getKmsKeyId());
            } else {
                model.setSQKmsKeyId(NO_KMS_KEY_ID);
            }
        } catch (ConflictException ex) {
            throw new CfnAlreadyExistsException(ResourceModel.TYPE_NAME, model.getScheduledQueryName(), ex);
        } catch (ValidationException | InvalidEndpointException ex) {
            throw new CfnInvalidRequestException(request.toString(), ex);
        } catch (AccessDeniedException ex) {
            throw new CfnAccessDeniedException(CREATE_SCHEDULED_QUERY, ex);
        } catch (ServiceQuotaExceededException ex) {
            throw new CfnServiceLimitExceededException(ResourceModel.TYPE_NAME, QUOTE_MESSAGE, ex);
        } catch (ThrottlingException ex) {
            throw new CfnThrottlingException(CREATE_SCHEDULED_QUERY, ex);
        } catch (InternalServerException ex) {
            throw new CfnInternalFailureException(ex);
        }

        return ProgressEvent.<ResourceModel, CallbackContext>builder()
                .resourceModel(model)
                .status(OperationStatus.SUCCESS)
                .build();
    }