protected ProgressEvent handleRequest()

in key/src/main/java/software/amazon/kms/key/UpdateHandler.java [36:76]


    protected ProgressEvent<ResourceModel, CallbackContext> handleRequest(
        final AmazonWebServicesClientProxy proxy,
        final ResourceHandlerRequest<ResourceModel> request,
        final CallbackContext callbackContext,
        final ProxyClient<KmsClient> proxyClient,
        final Logger logger) {
        final ResourceModel model = setDefaults(request.getDesiredResourceState());
        final ResourceModel previousModel = setDefaults(request.getPreviousResourceState());
        final Map<String, String> tags = request.getDesiredResourceTags();

        return ProgressEvent.progress(model, callbackContext)
            // Describe the key (without updating the model) to verify that it has not been deleted
            .then(progress -> keyHandlerHelper
                .describeKey(proxy, proxyClient, model, callbackContext, false))
            .then(progress -> validateResourceModel(progress, previousModel, model))
            .then(progress -> keyHandlerHelper
                .enableKeyIfNecessary(proxy, proxyClient, previousModel, model, callbackContext,
                    true))
            .then(progress -> updateKeyRotationStatus(proxy, proxyClient, previousModel, model,
                callbackContext))
            .then(progress -> keyHandlerHelper
                .disableKeyIfNecessary(proxy, proxyClient, previousModel, model, callbackContext))
            .then(progress -> keyHandlerHelper
                .updateKeyDescription(proxy, proxyClient, previousModel, model, callbackContext))
            .then(progress -> keyHandlerHelper
                .updateKeyPolicy(proxy, proxyClient, previousModel, model, callbackContext))
            .then(progress -> {
                if (!Objects.equals(tags, request.getPreviousResourceTags())) {
                    // Customer is attempting to change tags, no soft fail
                    return keyHandlerHelper
                        .updateKeyTags(proxy, proxyClient, model, tags, callbackContext);
                } else {
                    // Customer did not explicitly request a tag update, fixing the drift
                    return softFailAccessDenied(() -> keyHandlerHelper
                        .updateKeyTags(proxy, proxyClient, model, tags, callbackContext),
                            model, callbackContext);
                }
            })
            .then(eventualConsistencyHandlerHelper::waitForChangesToPropagate)
            .then(progress -> ProgressEvent.defaultSuccessHandler(unsetWriteOnly(model)));
    }