private void handleTagging()

in aws-sagemaker-image/src/main/java/software/amazon/sagemaker/image/UpdateHandler.java [166:195]


    private void handleTagging(
            final ProxyClient<SageMakerClient> proxyClient,
            final ResourceModel model) {
        final Set<software.amazon.awssdk.services.sagemaker.model.Tag> newTags =
                new HashSet<>(Translator.cfnTagsToSdkTags(model.getTags()));
        final Set<software.amazon.awssdk.services.sagemaker.model.Tag> existingTags =
                new HashSet<>(proxyClient.injectCredentialsAndInvokeV2(
                        Translator.translateToListTagsRequest(model), proxyClient.client()::listTags).tags());
        final String imageArn = proxyClient.injectCredentialsAndInvokeV2(
                Translator.translateToReadRequest(model), proxyClient.client()::describeImage).imageArn();

        final List<software.amazon.awssdk.services.sagemaker.model.Tag> tagsToAdd = newTags.stream()
                .filter(tag -> !existingTags.contains(tag))
                .collect(Collectors.toList());
        final List<String> tagsToAddKeys = tagsToAdd.stream()
                .map(software.amazon.awssdk.services.sagemaker.model.Tag::key)
                .collect(Collectors.toList());
        final List<String> tagsToRemove = existingTags.stream()
                .filter(tag -> !newTags.contains(tag) && !tagsToAddKeys.contains(tag.key()))
                .map(software.amazon.awssdk.services.sagemaker.model.Tag::key)
                .collect(Collectors.toList());
        if (!tagsToRemove.isEmpty()) {
            proxyClient.injectCredentialsAndInvokeV2(Translator.translateToDeleteTagsRequest(tagsToRemove, imageArn),
                    proxyClient.client()::deleteTags);
        }
        if (!tagsToAdd.isEmpty()) {
            proxyClient.injectCredentialsAndInvokeV2(Translator.translateToAddTagsRequest(tagsToAdd, imageArn),
                    proxyClient.client()::addTags);
        }
    }