in aws-sns-topic/src/main/java/software/amazon/sns/topic/CreateHandler.java [15:46]
protected ProgressEvent<ResourceModel, CallbackContext> handleRequest(
final AmazonWebServicesClientProxy proxy,
final ResourceHandlerRequest<ResourceModel> request,
final CallbackContext callbackContext,
final ProxyClient<SnsClient> proxyClient,
final Logger logger) {
this.logger = logger;
final ResourceModel model = request.getDesiredResourceState();
final Map<String, String> desiredResourceTags = request.getDesiredResourceTags();
if (StringUtils.isNotEmpty(model.getTopicArn())) {
return ProgressEvent.failed(model, callbackContext, HandlerErrorCode.InvalidRequest, "TopicArn is a read-only property.");
}
if (StringUtils.isBlank(model.getTopicName())) {
String randomTopicName = IdentifierUtils.generateResourceIdentifier(request.getLogicalResourceIdentifier(), request.getClientRequestToken(), TOPIC_NAME_MAX_LENGTH);
if (Boolean.TRUE.equals(model.getFifoTopic())) {
randomTopicName = IdentifierUtils.generateResourceIdentifier(request.getLogicalResourceIdentifier(), request.getClientRequestToken(), TOPIC_NAME_MAX_LENGTH - FIFO_TOPIC_EXTENSION.length());
randomTopicName += FIFO_TOPIC_EXTENSION;
}
model.setTopicName(randomTopicName.toLowerCase());
}
return ProgressEvent.progress(request.getDesiredResourceState(), callbackContext)
.then(progress -> checkForPreCreateResourceExistence(request, proxyClient, progress))
.then(progress -> createTopicWithTags(proxy, model, desiredResourceTags, callbackContext, proxyClient))
.then(progress -> retryCreateTopicWithoutTags(proxy, model, callbackContext, proxyClient))
.then(progress -> addSubscription(proxy, proxyClient, progress, model.getSubscription(), logger))
.then(progress -> new ReadHandler().handleRequest(proxy, request, callbackContext, proxyClient, logger));
}