in codegen/src/main/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderClass.java [535:699]
private void mergeServiceConfiguration(MethodSpec.Builder builder, String clientConfigClassName) {
ClassName clientConfigClass = ClassName.bestGuess(clientConfigClassName);
builder.addCode("$1T.Builder serviceConfigBuilder = (($1T) config.option($2T.SERVICE_CONFIGURATION)).toBuilder();"
+ "serviceConfigBuilder.profileFile(serviceConfigBuilder.profileFileSupplier() != null ? "
+ "serviceConfigBuilder.profileFileSupplier() : config.option($2T.PROFILE_FILE_SUPPLIER));"
+ "serviceConfigBuilder.profileName(serviceConfigBuilder.profileName() "
+ "!= null ? serviceConfigBuilder.profileName() : config.option($2T.PROFILE_NAME));",
clientConfigClass, SdkClientOption.class);
if (model.getCustomizationConfig().getServiceConfig().hasDualstackProperty()) {
builder.addCode("if (serviceConfigBuilder.dualstackEnabled() != null) {")
.addCode(" $T.validState(config.option($T.DUALSTACK_ENDPOINT_ENABLED) == null, \"Dualstack has been "
+ "configured on both $L and the client/global level. Please limit dualstack configuration to "
+ "one location.\");",
Validate.class, AwsClientOption.class, clientConfigClassName)
.addCode("} else {")
.addCode(" serviceConfigBuilder.dualstackEnabled(config.option($T.DUALSTACK_ENDPOINT_ENABLED));",
AwsClientOption.class)
.addCode("}");
}
if (model.getCustomizationConfig().getServiceConfig().hasFipsProperty()) {
builder.addCode("if (serviceConfigBuilder.fipsModeEnabled() != null) {")
.addCode(" $T.validState(config.option($T.FIPS_ENDPOINT_ENABLED) == null, \"Fips has been "
+ "configured on both $L and the client/global level. Please limit fips configuration to "
+ "one location.\");",
Validate.class, AwsClientOption.class, clientConfigClassName)
.addCode("} else {")
.addCode(" serviceConfigBuilder.fipsModeEnabled(config.option($T.FIPS_ENDPOINT_ENABLED));",
AwsClientOption.class)
.addCode("}");
}
if (model.getCustomizationConfig().getServiceConfig().hasUseArnRegionProperty()) {
builder.addCode("if (serviceConfigBuilder.useArnRegionEnabled() != null) {")
.addCode(" $T.validState(clientContextParams.get($T.USE_ARN_REGION) == null, \"UseArnRegion has been "
+ "configured on both $L and the client/global level. Please limit UseArnRegion configuration to "
+ "one location.\");",
Validate.class, endpointRulesSpecUtils.clientContextParamsName(), clientConfigClassName)
.addCode("} else {")
.addCode(" serviceConfigBuilder.useArnRegionEnabled(clientContextParams.get($T.USE_ARN_REGION));",
endpointRulesSpecUtils.clientContextParamsName())
.addCode("}");
}
if (model.getCustomizationConfig().getServiceConfig().hasMultiRegionEnabledProperty()) {
builder.addCode("if (serviceConfigBuilder.multiRegionEnabled() != null) {")
.addCode(" $T.validState(clientContextParams.get($T.DISABLE_MULTI_REGION_ACCESS_POINTS) == null, "
+ "\"DisableMultiRegionAccessPoints has been configured on both $L and the client/global level. "
+ "Please limit DisableMultiRegionAccessPoints configuration to one location.\");",
Validate.class, endpointRulesSpecUtils.clientContextParamsName(), clientConfigClassName)
.addCode("} else if (clientContextParams.get($T.DISABLE_MULTI_REGION_ACCESS_POINTS) != null) {",
endpointRulesSpecUtils.clientContextParamsName())
.addCode(" serviceConfigBuilder.multiRegionEnabled(!clientContextParams.get($T"
+ ".DISABLE_MULTI_REGION_ACCESS_POINTS));",
endpointRulesSpecUtils.clientContextParamsName())
.addCode("}");
}
if (model.getCustomizationConfig().getServiceConfig().hasForcePathTypeEnabledProperty()) {
builder.addCode("if (serviceConfigBuilder.pathStyleAccessEnabled() != null) {")
.addCode(" $T.validState(clientContextParams.get($T.FORCE_PATH_STYLE) == null, "
+ "\"ForcePathStyle has been configured on both $L and the client/global level. "
+ "Please limit ForcePathStyle configuration to one location.\");",
Validate.class, endpointRulesSpecUtils.clientContextParamsName(), clientConfigClassName)
.addCode("} else {")
.addCode(" serviceConfigBuilder.pathStyleAccessEnabled(clientContextParams.get($T"
+ ".FORCE_PATH_STYLE));",
endpointRulesSpecUtils.clientContextParamsName())
.addCode("}");
}
if (model.getCustomizationConfig().getServiceConfig().hasAccelerateModeEnabledProperty()) {
builder.addCode("if (serviceConfigBuilder.accelerateModeEnabled() != null) {")
.addCode(" $T.validState(clientContextParams.get($T.ACCELERATE) == null, "
+ "\"Accelerate has been configured on both $L and the client/global level. "
+ "Please limit Accelerate configuration to one location.\");",
Validate.class, endpointRulesSpecUtils.clientContextParamsName(), clientConfigClassName)
.addCode("} else {")
.addCode(" serviceConfigBuilder.accelerateModeEnabled(clientContextParams.get($T"
+ ".ACCELERATE));",
endpointRulesSpecUtils.clientContextParamsName())
.addCode("}");
}
boolean hasRequestAlgorithmMember = hasRequestAlgorithmMember(model);
boolean hasResponseAlgorithms = hasResponseAlgorithms(model);
if (model.getCustomizationConfig().getServiceConfig().hasChecksumValidationEnabledProperty()
&& (hasRequestAlgorithmMember || hasResponseAlgorithms)) {
builder.addStatement("$T checksumValidationEnabled = serviceConfigBuilder.checksumValidationEnabled()", Boolean.class)
.beginControlFlow("if (checksumValidationEnabled != null)");
if (hasRequestAlgorithmMember) {
builder.addCode("$T.validState(config.option($T.REQUEST_CHECKSUM_CALCULATION) == null, ",
Validate.class, SdkClientOption.class)
.addStatement("\"Checksum behavior has been configured on both $L and the client/global level. Please "
+ "limit checksum behavior configuration to one location.\")", clientConfigClassName);
}
if (hasResponseAlgorithms) {
builder.addCode("$T.validState(config.option($T.RESPONSE_CHECKSUM_VALIDATION) == null, ",
Validate.class, SdkClientOption.class)
.addStatement("\"Checksum behavior has been configured on both $L and the client/global level. Please "
+ "limit checksum behavior configuration to one location.\")", clientConfigClassName);
}
builder.beginControlFlow("if (checksumValidationEnabled)")
.addCode("config = config.toBuilder()");
if (hasRequestAlgorithmMember) {
builder.addCode(".option($T.REQUEST_CHECKSUM_CALCULATION, $T.WHEN_SUPPORTED)",
SdkClientOption.class, RequestChecksumCalculation.class);
}
if (hasResponseAlgorithms) {
builder.addCode(".option($T.RESPONSE_CHECKSUM_VALIDATION, $T.WHEN_SUPPORTED)",
SdkClientOption.class, ResponseChecksumValidation.class);
}
builder.addStatement(".build()")
.nextControlFlow("else")
.addCode("config = config.toBuilder()");
if (hasRequestAlgorithmMember) {
builder.addCode(".option($T.REQUEST_CHECKSUM_CALCULATION, $T.WHEN_REQUIRED)",
SdkClientOption.class, RequestChecksumCalculation.class);
}
if (hasResponseAlgorithms) {
builder.addCode(".option($T.RESPONSE_CHECKSUM_VALIDATION, $T.WHEN_REQUIRED)",
SdkClientOption.class, ResponseChecksumValidation.class);
}
builder.addStatement(".build()")
.endControlFlow()
.endControlFlow();
}
builder.addStatement("$T finalServiceConfig = serviceConfigBuilder.build()", clientConfigClass);
if (model.getCustomizationConfig().getServiceConfig().hasUseArnRegionProperty()) {
builder.addCode(
CodeBlock.builder()
.addStatement("clientContextParams.put($T.USE_ARN_REGION, finalServiceConfig.useArnRegionEnabled())",
endpointRulesSpecUtils.clientContextParamsName())
.build());
}
if (model.getCustomizationConfig().getServiceConfig().hasMultiRegionEnabledProperty()) {
builder.addCode(
CodeBlock.builder()
.addStatement("clientContextParams.put($T.DISABLE_MULTI_REGION_ACCESS_POINTS, !finalServiceConfig"
+ ".multiRegionEnabled())",
endpointRulesSpecUtils.clientContextParamsName())
.build());
}
if (model.getCustomizationConfig().getServiceConfig().hasForcePathTypeEnabledProperty()) {
builder.addCode(CodeBlock.builder()
.addStatement("clientContextParams.put($T.FORCE_PATH_STYLE, finalServiceConfig"
+ ".pathStyleAccessEnabled())",
endpointRulesSpecUtils.clientContextParamsName())
.build());
}
if (model.getCustomizationConfig().getServiceConfig().hasAccelerateModeEnabledProperty()) {
builder.addCode(CodeBlock.builder()
.addStatement("clientContextParams.put($T.ACCELERATE, finalServiceConfig"
+ ".accelerateModeEnabled())",
endpointRulesSpecUtils.clientContextParamsName())
.build());
}
}