in aws-kendra-datasource/src/main/java/software/amazon/kendra/datasource/UpdateHandler.java [150:188]
private ProgressEvent<ResourceModel, CallbackContext> updateTags(final ProxyClient<KendraClient> proxyClient,
final ProgressEvent<ResourceModel, CallbackContext> progress, ResourceHandlerRequest<ResourceModel> request) {
ResourceModel currResourceModel = request.getDesiredResourceState();
ResourceModel prevResourceModel = request.getPreviousResourceState();
CallbackContext callbackContext = progress.getCallbackContext();
Set<Tag> currentTags;
if (currResourceModel.getTags() != null) {
currentTags = currResourceModel.getTags().stream().collect(Collectors.toSet());
} else {
currentTags = new HashSet<>();
}
String arn = dataSourceArnBuilder.build(request);
Set<Tag> existingTags = new HashSet<>();
if (prevResourceModel != null && prevResourceModel.getTags() != null) {
existingTags = prevResourceModel.getTags().stream().collect(Collectors.toSet());
}
final Set<Tag> tagsToAdd = Sets.difference(currentTags, existingTags);
if (!tagsToAdd.isEmpty()) {
TagResourceRequest tagResourceRequest = Translator.translateToTagResourceRequest(tagsToAdd, arn);
try {
proxyClient.injectCredentialsAndInvokeV2(tagResourceRequest, proxyClient.client()::tagResource);
} catch (ValidationException e) {
throw new CfnInvalidRequestException(e.getMessage(), e);
}
}
final Set<Tag> tagsToRemove = Sets.difference(existingTags, currentTags);
if (!tagsToRemove.isEmpty()) {
UntagResourceRequest untagResourceRequest = Translator.translateToUntagResourceRequest(tagsToRemove, arn);
try {
proxyClient.injectCredentialsAndInvokeV2(untagResourceRequest, proxyClient.client()::untagResource);
} catch (ValidationException e) {
throw new CfnInvalidRequestException(e.getMessage(), e);
}
}
return ProgressEvent.progress(currResourceModel, callbackContext);
}