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);
}