in common/src/main/java/software/amazon/kms/common/KeyHandlerHelper.java [258:303]
public ProgressEvent<M, C> updateKeyTags(
final AmazonWebServicesClientProxy proxy,
final ProxyClient<KmsClient> proxyClient,
final M model,
final Map<String, String> desiredResourceTags,
final C callbackContext
) {
return ProgressEvent.progress(model, callbackContext)
.then(progressEvent -> retrieveResourceTags(proxy, proxyClient, model,
callbackContext, false))
.then(progressEvent -> {
final Set<Tag> existingTags =
Optional.ofNullable(callbackContext.getExistingTags())
.orElse(new HashSet<>());
final Set<Tag> tagsToRemove = Sets.difference(existingTags,
keyTranslator.translateTagsToSdk(desiredResourceTags));
if (!tagsToRemove.isEmpty()) {
return proxy
.initiate("kms::untag-key", proxyClient, model, callbackContext)
.translateToServiceRequest(
(m) -> keyTranslator.untagResourceRequest(m, tagsToRemove))
.makeServiceCall(keyApiHelper::untagResource)
.progress();
}
return progressEvent;
})
.then(progressEvent -> {
final Set<Tag> existingTags =
Optional.ofNullable(callbackContext.getExistingTags())
.orElse(new HashSet<>());
final Set<Tag> tagsToAdd =
Sets.difference(keyTranslator.translateTagsToSdk(desiredResourceTags),
existingTags);
if (!tagsToAdd.isEmpty()) {
return proxy
.initiate("kms::tag-key", proxyClient, model, callbackContext)
.translateToServiceRequest(
(m) -> keyTranslator.tagResourceRequest(m, tagsToAdd))
.makeServiceCall(keyApiHelper::tagResource)
.progress();
}
return progressEvent;
});
}