private ProgressEvent updateTags()

in datacatalog/src/main/java/software/amazon/athena/datacatalog/UpdateHandler.java [65:96]


    private ProgressEvent<ResourceModel, CallbackContext> updateTags(
        ResourceHandlerRequest<ResourceModel> request,
        final ProxyClient<AthenaClient> proxyClient,
        ResourceModel oldModel, ResourceModel newModel) {
        final Set<Tag> oldTags = getTagsFromResourceModel(oldModel);
        final Set<Tag> newTags = getTagsFromResourceModel(newModel);
        final Set<Tag> tagsToAdd = Sets.difference(newTags, oldTags);
        final Set<Tag> tagsToRemove = Sets.difference(oldTags, newTags);
        boolean areTagsUpdated = !tagsToAdd.isEmpty() || !tagsToRemove.isEmpty();

        if (areTagsUpdated){
            String arn = getDatacatalogArn(request, newModel.getName());
            if (!tagsToRemove.isEmpty()) {
                UntagResourceRequest untagResourceRequest = UntagResourceRequest.builder()
                    .resourceARN(arn)
                    .tagKeys(tagsToRemove.stream().map(Tag::key).collect(Collectors.toList()))
                    .build();
                proxyClient.injectCredentialsAndInvokeV2(untagResourceRequest,
                    proxyClient.client()::untagResource);
            }

            if (!tagsToAdd.isEmpty()) {
                TagResourceRequest tagResourceRequest = TagResourceRequest.builder()
                    .resourceARN(arn)
                    .tags(tagsToAdd)
                    .build();
                proxyClient.injectCredentialsAndInvokeV2(tagResourceRequest,
                    proxyClient.client()::tagResource);
            }
        }
        return ProgressEvent.defaultSuccessHandler(newModel);
    }