public ProgressEvent updateKeyTags()

in common/src/main/java/software/amazon/kms/common/KeyHandlerHelper.java [258:303]


    public ProgressEvent<M, C> updateKeyTags(
        final AmazonWebServicesClientProxy proxy,
        final ProxyClient<KmsClient> proxyClient,
        final M model,
        final Map<String, String> desiredResourceTags,
        final C callbackContext
    ) {
        return ProgressEvent.progress(model, callbackContext)
            .then(progressEvent -> retrieveResourceTags(proxy, proxyClient, model,
                callbackContext, false))
            .then(progressEvent -> {
                final Set<Tag> existingTags =
                    Optional.ofNullable(callbackContext.getExistingTags())
                        .orElse(new HashSet<>());
                final Set<Tag> tagsToRemove = Sets.difference(existingTags,
                    keyTranslator.translateTagsToSdk(desiredResourceTags));
                if (!tagsToRemove.isEmpty()) {
                    return proxy
                        .initiate("kms::untag-key", proxyClient, model, callbackContext)
                        .translateToServiceRequest(
                            (m) -> keyTranslator.untagResourceRequest(m, tagsToRemove))
                        .makeServiceCall(keyApiHelper::untagResource)
                        .progress();
                }

                return progressEvent;
            })
            .then(progressEvent -> {
                final Set<Tag> existingTags =
                    Optional.ofNullable(callbackContext.getExistingTags())
                        .orElse(new HashSet<>());
                final Set<Tag> tagsToAdd =
                    Sets.difference(keyTranslator.translateTagsToSdk(desiredResourceTags),
                        existingTags);
                if (!tagsToAdd.isEmpty()) {
                    return proxy
                        .initiate("kms::tag-key", proxyClient, model, callbackContext)
                        .translateToServiceRequest(
                            (m) -> keyTranslator.tagResourceRequest(m, tagsToAdd))
                        .makeServiceCall(keyApiHelper::tagResource)
                        .progress();
                }

                return progressEvent;
            });
    }