private ResourceModel update()

in aws-emrcontainers-virtualcluster/src/main/java/software/amazon/emrcontainers/virtualcluster/UpdateHandler.java [42:90]


    private ResourceModel update(ResourceModel model, ResourceHandlerRequest<ResourceModel> request) {
        DescribeVirtualClusterRequest describeVirtualClusterRequest = new DescribeVirtualClusterRequest();
        describeVirtualClusterRequest.setId(model.getId());

        DescribeVirtualClusterResult describeVirtualClusterResult;
        VirtualCluster virtualCluster;
        try {
             describeVirtualClusterResult =
                clientProxy.injectCredentialsAndInvoke(describeVirtualClusterRequest, emrContainersClient::describeVirtualCluster);
            virtualCluster = describeVirtualClusterResult.getVirtualCluster();
            if (virtualCluster.getState().equals(VirtualClusterState.TERMINATED.toString())) {
                throw new CfnNotFoundException(ResourceModel.TYPE_NAME, model.getId());
            }
        } catch(com.amazonaws.services.emrcontainers.model.ResourceNotFoundException e) {
            throw new CfnNotFoundException(ResourceModel.TYPE_NAME, model.getId());
        } catch (InternalServerException e) {
            throw new CfnGeneralServiceException("describeVirtualCluster", e);
        } catch (AmazonEMRContainersException e) {
            throw new CfnInvalidRequestException(e.getMessage(), e);
        }

        String arn = virtualCluster.getArn();
        final Set<Tag> existingTags = Translator.toTagSet(describeVirtualClusterResult.getVirtualCluster().getTags());
        final Set<Tag> latestTags = Translator.toTagSet(request.getDesiredResourceTags());

        final Set<Tag> tagsToRemove = new HashSet<>(existingTags);
        tagsToRemove.removeIf(latestTags::contains);

        final Set<Tag> tagsToAdd = new HashSet<>(latestTags);
        tagsToAdd.removeIf(existingTags::contains);

        if (tagsToRemove.size() > 0) {
            UntagResourceRequest untagResourceRequest = new UntagResourceRequest();
            untagResourceRequest.setResourceArn(arn);
            untagResourceRequest.setTagKeys(getFilteredTagKeys(tagsToRemove));
            clientProxy.injectCredentialsAndInvoke(untagResourceRequest, emrContainersClient::untagResource);
        }

        if (tagsToAdd.size() > 0) {
            TagResourceRequest tagResourceRequest = new TagResourceRequest();
            tagResourceRequest.setResourceArn(arn);
            tagResourceRequest.setTags(Translator.toTagMap(tagsToAdd));
            clientProxy.injectCredentialsAndInvoke(tagResourceRequest, emrContainersClient::tagResource);
        }

        model.setArn(arn);
        model.setName(virtualCluster.getName());
        return model;
    }