in aws-nimblestudio-studio/src/main/java/software/amazon/nimblestudio/studio/CreateHandler.java [20:100]
public ProgressEvent<ResourceModel, CallbackContext> handleRequest(
final AmazonWebServicesClientProxy proxy,
final ResourceHandlerRequest<ResourceModel> request,
final CallbackContext callbackContext,
final ProxyClient<NimbleClient> proxyClient,
final Logger logger) {
return ProgressEvent.progress(request.getDesiredResourceState(), callbackContext)
.then(progress -> proxy
.initiate(
"AWS-NimbleStudio-Studio::Create",
proxyClient,
progress.getResourceModel(),
progress.getCallbackContext()
)
.translateToServiceRequest(model -> {
final CreateStudioRequest.Builder createStudioRequestBuilder = CreateStudioRequest.builder()
.clientToken(request.getClientRequestToken())
.studioName(model.getStudioName())
.displayName(model.getDisplayName())
.adminRoleArn(model.getAdminRoleArn())
.userRoleArn(model.getUserRoleArn())
.tags(model.getTags());
if (model.getStudioEncryptionConfiguration() != null) {
createStudioRequestBuilder.studioEncryptionConfiguration(
Translator.toModelStudioEncryptionConfiguration(model.getStudioEncryptionConfiguration())
);
}
return createStudioRequestBuilder.build();
})
.makeServiceCall((awsRequest, client) -> {
try {
final CreateStudioResponse createStudioResponse = client
.injectCredentialsAndInvokeV2(awsRequest, client.client()::createStudio);
logger.log(String.format("%s [%s] creation requested successfully", ResourceModel.TYPE_NAME,
createStudioResponse.studio().studioName()));
return createStudioResponse;
} catch (final NimbleException e) {
logger.log(String.format("Exception during creation: %s.", ResourceModel.TYPE_NAME));
throw Translator.translateToCfnException(e);
}
})
.stabilize((awsRequest, awsResponse, client, model, context) -> {
final String studioId = awsResponse.studio().studioId();
model.setStudioId(studioId);
GetStudioResponse getStudioResponse;
try {
getStudioResponse = client.injectCredentialsAndInvokeV2(
GetStudioRequest.builder().studioId(studioId).build(), client.client()::getStudio);
} catch (final NimbleException e) {
logger.log(String.format("%s [%s] exception during creation", ResourceModel.TYPE_NAME,
studioId));
throw Translator.translateToCfnException(e);
}
if (StudioState.CREATE_IN_PROGRESS.equals(getStudioResponse.studio().state())) {
logger.log(String.format("%s [%s] is in state CREATE_IN_PROGRESS, creation in progress", ResourceModel.TYPE_NAME,
studioId));
return false;
}
if (StudioState.READY.equals(getStudioResponse.studio().state())) {
logger.log(String.format("%s [%s] is in state READY, creation succeeded", ResourceModel.TYPE_NAME,
studioId));
return true;
}
logger.log(String.format("%s [%s] is in error state %s, creation failed", ResourceModel.TYPE_NAME,
studioId, getStudioResponse.studio().state()));
throw new CfnGeneralServiceException(String.format("Unexpected state %s: %s - %s",
getStudioResponse.studio().stateAsString(),
getStudioResponse.studio().statusCodeAsString(),
getStudioResponse.studio().statusMessage()));
})
.progress())
.then((r) -> new ReadHandler().handleRequest(proxy, request, callbackContext, proxyClient, logger));
}