private ProgressEvent updateTags()

in aws-codeartifact-repository/src/main/java/software/amazon/codeartifact/repository/UpdateHandler.java [71:121]


    private ProgressEvent<ResourceModel,CallbackContext> updateTags(
        final AmazonWebServicesClientProxy proxy,
        final ProxyClient<CodeartifactClient> proxyClient,
        final ProgressEvent<ResourceModel, CallbackContext> progress,
        ResourceModel desiredModel,
        final ResourceHandlerRequest<ResourceModel> request
    ) {
        String repositoryName = desiredModel.getRepositoryName();
        String domainName = desiredModel.getDomainName();

        // TODO(jonjara): move this to shared module
        Map<String, String> desiredResourceTags = request.getDesiredResourceTags();
        Map<String, String> previousResourceTags = request.getPreviousResourceTags();

        final Set<Tag> desiredSdkTags = new HashSet<>(Translator.translateTagsToSdk(desiredResourceTags));
        final Set<Tag> previousSdkTags = new HashSet<>(Translator.translateTagsToSdk(previousResourceTags));

        final Set<Tag> setTagsToRemove = Sets.difference(previousSdkTags, desiredSdkTags);
        final Set<Tag> setTagsToAdd = Sets.difference(desiredSdkTags, previousSdkTags);

        final List<Tag> tagsToRemove = new ArrayList<>(setTagsToRemove);
        final List<Tag> tagsToAdd = new ArrayList<>(setTagsToAdd);

        String domainOwner = desiredModel.getDomainOwner() == null ?
            request.getAwsAccountId() :
            desiredModel.getDomainOwner();

        try {
            // Deletes tags only if tagsToRemove is not empty.
            if (!CollectionUtils.isNullOrEmpty(tagsToRemove)) {
                UntagResourceRequest untagRequest
                    = Translator.untagResourceRequest(request, tagsToRemove, repositoryName, domainName, domainOwner);
                proxy.injectCredentialsAndInvokeV2(untagRequest, proxyClient.client()::untagResource);
            }
        } catch (AwsServiceException e) {
            Translator.throwCfnException(e, Constants.UNTAG_RESOURCE, repositoryName);
        }

        try {
            // Adds tags only if tagsToAdd is not empty.
            if (!CollectionUtils.isNullOrEmpty(tagsToAdd)) {
                TagResourceRequest tagRequest
                    = Translator.tagResourceRequest(request, tagsToAdd, repositoryName, domainName, domainOwner);
                proxy.injectCredentialsAndInvokeV2(tagRequest, proxyClient.client()::tagResource);
            }
        } catch (AwsServiceException e) {
            Translator.throwCfnException(e, Constants.TAG_RESOURCE, repositoryName);
        }

        return ProgressEvent.progress(progress.getResourceModel(), progress.getCallbackContext());
    }