protected ProgressEvent handleRequest()

in aws-sns-topic/src/main/java/software/amazon/sns/topic/DeleteHandler.java [19:62]


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

        this.logger = logger;

        ResourceModel model = request.getDesiredResourceState();

        return ProgressEvent.progress(request.getDesiredResourceState(), callbackContext)
                .then(progress ->
                        proxy.initiate("AWS-SNS-Topic::Delete::PreDeletionCheck", proxyClient, model, callbackContext)
                                .translateToServiceRequest(Translator::translateToGetTopicAttributes)
                                .makeServiceCall(this::getTopicAttributes)
                                .progress()
                )
                .then(progress ->
                        proxy.initiate("AWS-SNS-Topic::Unsubscribe", proxyClient, model, callbackContext)
                                .translateToServiceRequest(Translator::translateToListSubscriptionByTopic)
                                .makeServiceCall((listSubscriptionsByTopicRequest, client) -> {
                                    ListSubscriptionsByTopicResponse response = proxy.injectCredentialsAndInvokeV2(listSubscriptionsByTopicRequest, client.client()::listSubscriptionsByTopic);
                                    List<String> arnList = Translator.streamOfOrEmpty(response.subscriptions())
                                            .map(Subscription::subscriptionArn)
                                            .collect(Collectors.toList());
                                    callbackContext.setSubscriptionArnToUnsubscribe(arnList);
                                    return response;
                                })
                                .progress()

                )
                .then(progress -> removeSubscription(proxy, proxyClient, progress, logger))
                .then(progress ->
                        proxy.initiate("AWS-SNS-Topic::Delete", proxyClient, model, callbackContext)
                                .translateToServiceRequest(Translator::translateToDeleteTopic)
                                .makeServiceCall((deleteTopicRequest, client) -> proxy.injectCredentialsAndInvokeV2(deleteTopicRequest, client.client()::deleteTopic))
                                .done(awsResponse -> {
                                    return ProgressEvent.<ResourceModel, CallbackContext>builder()
                                            .status(OperationStatus.SUCCESS)
                                            .build();
                                })
                );
    }