in aws-cloudformation-resourcedefaultversion/src/main/java/software/amazon/cloudformation/resourcedefaultversion/CreateHandler.java [18:52]
public ProgressEvent<ResourceModel, CallbackContext> handleRequest(
final AmazonWebServicesClientProxy proxy,
final ResourceHandlerRequest<ResourceModel> request,
final CallbackContext callbackContext,
final ProxyClient<CloudFormationClient> proxyClient,
final Logger logger) {
final ResourceModel resourceModel = request.getDesiredResourceState();
if (StringUtils.isNullOrEmpty(callbackContext.getArn())) {
String generatedArn = createArn(request);
callbackContext.setArn(generatedArn);
resourceModel.setArn(generatedArn);
return ProgressEvent.progress(resourceModel, callbackContext);
}
return ProgressEvent.progress(resourceModel, callbackContext)
.then(progress -> {
final ResourceModel model = progress.getResourceModel();
logger.log(String.format("Creating [TypeVersionArn: %s | Type: %s | Version: %s]",
model.getTypeVersionArn(), model.getTypeName(), model.getVersionId()));
return proxy.initiate("resourceDefaultVersion::Create", proxyClient, model, progress.getCallbackContext())
.translateToServiceRequest(Translator::translateToUpdateRequest)
.makeServiceCall((setTypeDefaultVersionRequest, client) -> proxyClient.injectCredentialsAndInvokeV2(setTypeDefaultVersionRequest, proxyClient.client()::setTypeDefaultVersion))
.handleError((setTypeDefaultVersionRequest, exception, clientProxy, resourcemodel, context) -> {
if(exception instanceof TypeNotFoundException) {
logger.log(String.format("Failed to set the default version of the resource [%s] as it cannot be found %s", model.getArn(), Arrays.toString(exception.getStackTrace())));
throw new CfnNotFoundException(exception);
}
else {
logger.log(String.format("Failed to set the default version of the resource [%s] and the exception is [%s]", model.getArn(), Arrays.toString(exception.getStackTrace())));
throw exception;
}
})
.progress();
})
.then(progress -> new ReadHandler().handleRequest(proxy, request, callbackContext, proxyClient, logger));
}