in aws-iotfleethub-application/src/main/java/software/amazon/iotfleethub/application/UpdateHandler.java [36:106]
public ProgressEvent<ResourceModel, CallbackContext> handleRequest(
final AmazonWebServicesClientProxy proxy,
final ResourceHandlerRequest<ResourceModel> request,
final CallbackContext callbackContext,
final Logger logger) {
ResourceModel prevModel = request.getPreviousResourceState();
ResourceModel model = request.getDesiredResourceState();
// UpdateHandler must return a NotFound error if the ApplicationId is not provided
if (model.getApplicationId() == null) {
logger.log(String.format("ApplicationId was not provided."));
return ProgressEvent.failed(model, callbackContext, HandlerErrorCode.NotFound, "ApplicationId was not provided.");
}
if (StringUtils.isEmpty(request.getClientRequestToken())) {
logger.log(String.format("ClientToken is Required, but a client request token was not provided."));
return ProgressEvent.failed(model, callbackContext, HandlerErrorCode.InvalidRequest, "ClientToken was not provided.");
}
if (Objects.isNull(prevModel)) {
logger.log(String.format("Previous Resource State not found."));
} else if (Translator.isReadOnlyFieldChanged(logger, "ApplicationArn", prevModel.getApplicationArn(), model.getApplicationArn())
|| Translator.isReadOnlyFieldChanged(logger, "ApplicationUrl", prevModel.getApplicationUrl(), model.getApplicationUrl())
|| Translator.isReadOnlyFieldChanged(logger, "ApplicationState", prevModel.getApplicationState(), model.getApplicationState())
|| Translator.isReadOnlyFieldChanged(logger, "SsoClientId", prevModel.getSsoClientId(), model.getSsoClientId())
|| Translator.isReadOnlyFieldChanged(logger, "ErrorMessage", prevModel.getErrorMessage(), model.getErrorMessage())) {
return ProgressEvent.failed(model, callbackContext, HandlerErrorCode.InvalidRequest,
"Can only update ApplicationName, ApplicationDescription, or Tags.");
}
UpdateApplicationRequest updateRequest = Translator.translateToUpdateRequest(request, model);
try {
proxy.injectCredentialsAndInvokeV2(updateRequest, iotFleetHubClient::updateApplication);
} catch (ResourceNotFoundException e) {
logger.log(String.format("Application with Id %s was not found", model.getApplicationId()));
} catch (RuntimeException e) {
HandlerErrorCode err = Translator.translateExceptionToErrorCode(e, logger);
return ProgressEvent.failed(model, callbackContext, err, e.getMessage());
}
// Retrieving applicationArn to update tags
DescribeApplicationRequest describeRequest = DescribeApplicationRequest.builder()
.applicationId(model.getApplicationId())
.build();
DescribeApplicationResponse describeResponse;
try {
describeResponse = proxy.injectCredentialsAndInvokeV2(describeRequest, iotFleetHubClient::describeApplication);
} catch (ResourceNotFoundException e) {
logger.log(String.format("Application with Id %s was not found", model.getApplicationId()));
return ProgressEvent.failed(model, callbackContext, HandlerErrorCode.NotFound, e.getMessage());
} catch (RuntimeException e) {
HandlerErrorCode err = Translator.translateExceptionToErrorCode(e, logger);
return ProgressEvent.failed(model, callbackContext, err, e.getMessage());
}
String applicationArn = describeResponse.applicationArn();
Map<String, String> currentTags = describeResponse.tags();
try {
updateTags(proxy, request, applicationArn, currentTags, logger);
} catch (RuntimeException e) {
HandlerErrorCode err = Translator.translateExceptionToErrorCode(e, logger);
return ProgressEvent.failed(model, callbackContext, err, e.getMessage());
}
logger.log(String.format("Updated Application with Id %s.", model.getApplicationId()));
return ProgressEvent.defaultSuccessHandler(request.getDesiredResourceState());
}