Provides auto-configuration for Spring Boot + * + *
The default instance has everything set to sensible defaults: + * + *
Retry settings are also configured from service-level and method-level properties specified + * in EchoSpringProperties. Method-level properties will take precedence over service-level + * properties if available, and client library defaults will be used if neither are specified. + * + * @param defaultTransportChannelProvider TransportChannelProvider to use in the settings. + * @return a {@link EchoSettings} bean configured with {@link TransportChannelProvider} bean. + */ + @Bean + @ConditionalOnMissingBean + public EchoSettings echoSettings( + @Qualifier("defaultEchoTransportChannelProvider") + TransportChannelProvider defaultTransportChannelProvider) + throws IOException { + EchoSettings.Builder clientSettingsBuilder = EchoSettings.newBuilder(); + clientSettingsBuilder + .setCredentialsProvider(this.credentialsProvider) + .setTransportChannelProvider(defaultTransportChannelProvider) + .setHeaderProvider(this.userAgentHeaderProvider()); + if (this.clientProperties.getQuotaProjectId() != null) { + clientSettingsBuilder.setQuotaProjectId(this.clientProperties.getQuotaProjectId()); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace( + "Quota project id set to " + + this.clientProperties.getQuotaProjectId() + + ", this overrides project id from credentials."); + } + } + if (this.clientProperties.getExecutorThreadCount() != null) { + ExecutorProvider executorProvider = + EchoSettings.defaultExecutorProviderBuilder() + .setExecutorThreadCount(this.clientProperties.getExecutorThreadCount()) + .build(); + clientSettingsBuilder.setBackgroundExecutorProvider(executorProvider); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace( + "Background executor thread count is " + + this.clientProperties.getExecutorThreadCount()); + } + } + Retry serviceRetry = clientProperties.getRetry(); + if (serviceRetry != null) { + RetrySettings echoRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.echoSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder.echoSettings().setRetrySettings(echoRetrySettings); + + RetrySettings pagedExpandRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.pagedExpandSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder.pagedExpandSettings().setRetrySettings(pagedExpandRetrySettings); + + RetrySettings simplePagedExpandRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.simplePagedExpandSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder + .simplePagedExpandSettings() + .setRetrySettings(simplePagedExpandRetrySettings); + + RetrySettings blockRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.blockSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder.blockSettings().setRetrySettings(blockRetrySettings); + + RetrySettings collideNameRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.collideNameSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder.collideNameSettings().setRetrySettings(collideNameRetrySettings); + + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured service-level retry settings from properties."); + } + } + Retry echoRetry = clientProperties.getEchoRetry(); + if (echoRetry != null) { + RetrySettings echoRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.echoSettings().getRetrySettings(), echoRetry); + clientSettingsBuilder.echoSettings().setRetrySettings(echoRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured method-level retry settings for echo from properties."); + } + } + Retry pagedExpandRetry = clientProperties.getPagedExpandRetry(); + if (pagedExpandRetry != null) { + RetrySettings pagedExpandRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.pagedExpandSettings().getRetrySettings(), pagedExpandRetry); + clientSettingsBuilder.pagedExpandSettings().setRetrySettings(pagedExpandRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured method-level retry settings for pagedExpand from properties."); + } + } + Retry simplePagedExpandRetry = clientProperties.getSimplePagedExpandRetry(); + if (simplePagedExpandRetry != null) { + RetrySettings simplePagedExpandRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.simplePagedExpandSettings().getRetrySettings(), + simplePagedExpandRetry); + clientSettingsBuilder + .simplePagedExpandSettings() + .setRetrySettings(simplePagedExpandRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace( + "Configured method-level retry settings for simplePagedExpand from properties."); + } + } + Retry blockRetry = clientProperties.getBlockRetry(); + if (blockRetry != null) { + RetrySettings blockRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.blockSettings().getRetrySettings(), blockRetry); + clientSettingsBuilder.blockSettings().setRetrySettings(blockRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured method-level retry settings for block from properties."); + } + } + Retry collideNameRetry = clientProperties.getCollideNameRetry(); + if (collideNameRetry != null) { + RetrySettings collideNameRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.collideNameSettings().getRetrySettings(), collideNameRetry); + clientSettingsBuilder.collideNameSettings().setRetrySettings(collideNameRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured method-level retry settings for collideName from properties."); + } + } + return clientSettingsBuilder.build(); + } + + /** + * Provides a EchoClient bean configured with EchoSettings. + * + * @param echoSettings settings to configure an instance of client bean. + * @return a {@link EchoClient} bean configured with {@link EchoSettings} + */ + @Bean + @ConditionalOnMissingBean + public EchoClient echoClient(EchoSettings echoSettings) throws IOException { + return EchoClient.create(echoSettings); + } + + private HeaderProvider userAgentHeaderProvider() { + String springLibrary = "spring-autogen-echo"; + String version = this.getClass().getPackage().getImplementationVersion(); + return () -> Collections.singletonMap("user-agent", springLibrary + "/" + version); + } +} diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpc.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpc.golden new file mode 100644 index 0000000000..c3b708b68b --- /dev/null +++ b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpc.golden @@ -0,0 +1,230 @@ +package com.google.showcase.v1beta1.spring; + +import com.google.api.gax.core.CredentialsProvider; +import com.google.api.gax.core.ExecutorProvider; +import com.google.api.gax.retrying.RetrySettings; +import com.google.api.gax.rpc.HeaderProvider; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.cloud.spring.autoconfigure.core.GcpContextAutoConfiguration; +import com.google.cloud.spring.core.Credentials; +import com.google.cloud.spring.core.DefaultCredentialsProvider; +import com.google.cloud.spring.core.Retry; +import com.google.cloud.spring.core.util.RetryUtil; +import com.google.showcase.v1beta1.EchoClient; +import com.google.showcase.v1beta1.EchoSettings; +import java.io.IOException; +import java.util.Collections; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Auto-configuration for {@link EchoClient}. + * + *
Provides auto-configuration for Spring Boot + * + *
The default instance has everything set to sensible defaults: + * + *
Retry settings are also configured from service-level and method-level properties specified + * in EchoSpringProperties. Method-level properties will take precedence over service-level + * properties if available, and client library defaults will be used if neither are specified. + * + * @param defaultTransportChannelProvider TransportChannelProvider to use in the settings. + * @return a {@link EchoSettings} bean configured with {@link TransportChannelProvider} bean. + */ + @Bean + @ConditionalOnMissingBean + public EchoSettings echoSettings( + @Qualifier("defaultEchoTransportChannelProvider") + TransportChannelProvider defaultTransportChannelProvider) + throws IOException { + EchoSettings.Builder clientSettingsBuilder = EchoSettings.newBuilder(); + clientSettingsBuilder + .setCredentialsProvider(this.credentialsProvider) + .setTransportChannelProvider(defaultTransportChannelProvider) + .setHeaderProvider(this.userAgentHeaderProvider()); + if (this.clientProperties.getQuotaProjectId() != null) { + clientSettingsBuilder.setQuotaProjectId(this.clientProperties.getQuotaProjectId()); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace( + "Quota project id set to " + + this.clientProperties.getQuotaProjectId() + + ", this overrides project id from credentials."); + } + } + if (this.clientProperties.getExecutorThreadCount() != null) { + ExecutorProvider executorProvider = + EchoSettings.defaultExecutorProviderBuilder() + .setExecutorThreadCount(this.clientProperties.getExecutorThreadCount()) + .build(); + clientSettingsBuilder.setBackgroundExecutorProvider(executorProvider); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace( + "Background executor thread count is " + + this.clientProperties.getExecutorThreadCount()); + } + } + Retry serviceRetry = clientProperties.getRetry(); + if (serviceRetry != null) { + RetrySettings echoRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.echoSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder.echoSettings().setRetrySettings(echoRetrySettings); + + RetrySettings pagedExpandRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.pagedExpandSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder.pagedExpandSettings().setRetrySettings(pagedExpandRetrySettings); + + RetrySettings simplePagedExpandRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.simplePagedExpandSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder + .simplePagedExpandSettings() + .setRetrySettings(simplePagedExpandRetrySettings); + + RetrySettings blockRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.blockSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder.blockSettings().setRetrySettings(blockRetrySettings); + + RetrySettings collideNameRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.collideNameSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder.collideNameSettings().setRetrySettings(collideNameRetrySettings); + + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured service-level retry settings from properties."); + } + } + Retry echoRetry = clientProperties.getEchoRetry(); + if (echoRetry != null) { + RetrySettings echoRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.echoSettings().getRetrySettings(), echoRetry); + clientSettingsBuilder.echoSettings().setRetrySettings(echoRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured method-level retry settings for echo from properties."); + } + } + Retry pagedExpandRetry = clientProperties.getPagedExpandRetry(); + if (pagedExpandRetry != null) { + RetrySettings pagedExpandRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.pagedExpandSettings().getRetrySettings(), pagedExpandRetry); + clientSettingsBuilder.pagedExpandSettings().setRetrySettings(pagedExpandRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured method-level retry settings for pagedExpand from properties."); + } + } + Retry simplePagedExpandRetry = clientProperties.getSimplePagedExpandRetry(); + if (simplePagedExpandRetry != null) { + RetrySettings simplePagedExpandRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.simplePagedExpandSettings().getRetrySettings(), + simplePagedExpandRetry); + clientSettingsBuilder + .simplePagedExpandSettings() + .setRetrySettings(simplePagedExpandRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace( + "Configured method-level retry settings for simplePagedExpand from properties."); + } + } + Retry blockRetry = clientProperties.getBlockRetry(); + if (blockRetry != null) { + RetrySettings blockRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.blockSettings().getRetrySettings(), blockRetry); + clientSettingsBuilder.blockSettings().setRetrySettings(blockRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured method-level retry settings for block from properties."); + } + } + Retry collideNameRetry = clientProperties.getCollideNameRetry(); + if (collideNameRetry != null) { + RetrySettings collideNameRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.collideNameSettings().getRetrySettings(), collideNameRetry); + clientSettingsBuilder.collideNameSettings().setRetrySettings(collideNameRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured method-level retry settings for collideName from properties."); + } + } + return clientSettingsBuilder.build(); + } + + /** + * Provides a EchoClient bean configured with EchoSettings. + * + * @param echoSettings settings to configure an instance of client bean. + * @return a {@link EchoClient} bean configured with {@link EchoSettings} + */ + @Bean + @ConditionalOnMissingBean + public EchoClient echoClient(EchoSettings echoSettings) throws IOException { + return EchoClient.create(echoSettings); + } + + private HeaderProvider userAgentHeaderProvider() { + String springLibrary = "spring-autogen-echo"; + String version = this.getClass().getPackage().getImplementationVersion(); + return () -> Collections.singletonMap("user-agent", springLibrary + "/" + version); + } +} diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpcRest.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpcRest.golden new file mode 100644 index 0000000000..50fd2c2bef --- /dev/null +++ b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpcRest.golden @@ -0,0 +1,242 @@ +package com.google.showcase.v1beta1.spring; + +import com.google.api.gax.core.CredentialsProvider; +import com.google.api.gax.core.ExecutorProvider; +import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; +import com.google.api.gax.retrying.RetrySettings; +import com.google.api.gax.rpc.HeaderProvider; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.cloud.spring.autoconfigure.core.GcpContextAutoConfiguration; +import com.google.cloud.spring.core.Credentials; +import com.google.cloud.spring.core.DefaultCredentialsProvider; +import com.google.cloud.spring.core.Retry; +import com.google.cloud.spring.core.util.RetryUtil; +import com.google.showcase.v1beta1.EchoClient; +import com.google.showcase.v1beta1.EchoSettings; +import java.io.IOException; +import java.util.Collections; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Auto-configuration for {@link EchoClient}. + * + *
Provides auto-configuration for Spring Boot + * + *
The default instance has everything set to sensible defaults: + * + *
Retry settings are also configured from service-level and method-level properties specified + * in EchoSpringProperties. Method-level properties will take precedence over service-level + * properties if available, and client library defaults will be used if neither are specified. + * + * @param defaultTransportChannelProvider TransportChannelProvider to use in the settings. + * @return a {@link EchoSettings} bean configured with {@link TransportChannelProvider} bean. + */ + @Bean + @ConditionalOnMissingBean + public EchoSettings echoSettings( + @Qualifier("defaultEchoTransportChannelProvider") + TransportChannelProvider defaultTransportChannelProvider) + throws IOException { + EchoSettings.Builder clientSettingsBuilder; + if (this.clientProperties.getUseRest()) { + clientSettingsBuilder = EchoSettings.newHttpJsonBuilder(); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Using REST (HTTP/JSON) transport."); + } + } else { + clientSettingsBuilder = EchoSettings.newBuilder(); + } + clientSettingsBuilder + .setCredentialsProvider(this.credentialsProvider) + .setTransportChannelProvider(defaultTransportChannelProvider) + .setHeaderProvider(this.userAgentHeaderProvider()); + if (this.clientProperties.getQuotaProjectId() != null) { + clientSettingsBuilder.setQuotaProjectId(this.clientProperties.getQuotaProjectId()); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace( + "Quota project id set to " + + this.clientProperties.getQuotaProjectId() + + ", this overrides project id from credentials."); + } + } + if (this.clientProperties.getExecutorThreadCount() != null) { + ExecutorProvider executorProvider = + EchoSettings.defaultExecutorProviderBuilder() + .setExecutorThreadCount(this.clientProperties.getExecutorThreadCount()) + .build(); + clientSettingsBuilder.setBackgroundExecutorProvider(executorProvider); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace( + "Background executor thread count is " + + this.clientProperties.getExecutorThreadCount()); + } + } + Retry serviceRetry = clientProperties.getRetry(); + if (serviceRetry != null) { + RetrySettings echoRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.echoSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder.echoSettings().setRetrySettings(echoRetrySettings); + + RetrySettings pagedExpandRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.pagedExpandSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder.pagedExpandSettings().setRetrySettings(pagedExpandRetrySettings); + + RetrySettings simplePagedExpandRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.simplePagedExpandSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder + .simplePagedExpandSettings() + .setRetrySettings(simplePagedExpandRetrySettings); + + RetrySettings blockRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.blockSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder.blockSettings().setRetrySettings(blockRetrySettings); + + RetrySettings collideNameRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.collideNameSettings().getRetrySettings(), serviceRetry); + clientSettingsBuilder.collideNameSettings().setRetrySettings(collideNameRetrySettings); + + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured service-level retry settings from properties."); + } + } + Retry echoRetry = clientProperties.getEchoRetry(); + if (echoRetry != null) { + RetrySettings echoRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.echoSettings().getRetrySettings(), echoRetry); + clientSettingsBuilder.echoSettings().setRetrySettings(echoRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured method-level retry settings for echo from properties."); + } + } + Retry pagedExpandRetry = clientProperties.getPagedExpandRetry(); + if (pagedExpandRetry != null) { + RetrySettings pagedExpandRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.pagedExpandSettings().getRetrySettings(), pagedExpandRetry); + clientSettingsBuilder.pagedExpandSettings().setRetrySettings(pagedExpandRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured method-level retry settings for pagedExpand from properties."); + } + } + Retry simplePagedExpandRetry = clientProperties.getSimplePagedExpandRetry(); + if (simplePagedExpandRetry != null) { + RetrySettings simplePagedExpandRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.simplePagedExpandSettings().getRetrySettings(), + simplePagedExpandRetry); + clientSettingsBuilder + .simplePagedExpandSettings() + .setRetrySettings(simplePagedExpandRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace( + "Configured method-level retry settings for simplePagedExpand from properties."); + } + } + Retry blockRetry = clientProperties.getBlockRetry(); + if (blockRetry != null) { + RetrySettings blockRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.blockSettings().getRetrySettings(), blockRetry); + clientSettingsBuilder.blockSettings().setRetrySettings(blockRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured method-level retry settings for block from properties."); + } + } + Retry collideNameRetry = clientProperties.getCollideNameRetry(); + if (collideNameRetry != null) { + RetrySettings collideNameRetrySettings = + RetryUtil.updateRetrySettings( + clientSettingsBuilder.collideNameSettings().getRetrySettings(), collideNameRetry); + clientSettingsBuilder.collideNameSettings().setRetrySettings(collideNameRetrySettings); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Configured method-level retry settings for collideName from properties."); + } + } + return clientSettingsBuilder.build(); + } + + /** + * Provides a EchoClient bean configured with EchoSettings. + * + * @param echoSettings settings to configure an instance of client bean. + * @return a {@link EchoClient} bean configured with {@link EchoSettings} + */ + @Bean + @ConditionalOnMissingBean + public EchoClient echoClient(EchoSettings echoSettings) throws IOException { + return EchoClient.create(echoSettings); + } + + private HeaderProvider userAgentHeaderProvider() { + String springLibrary = "spring-autogen-echo"; + String version = this.getClass().getPackage().getImplementationVersion(); + return () -> Collections.singletonMap("user-agent", springLibrary + "/" + version); + } +} diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringPropertiesFull.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringPropertiesFull.golden new file mode 100644 index 0000000000..37755e6cb4 --- /dev/null +++ b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringPropertiesFull.golden @@ -0,0 +1,137 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.showcase.v1beta1.spring; + +import com.google.api.core.BetaApi; +import com.google.cloud.spring.core.Credentials; +import com.google.cloud.spring.core.CredentialsSupplier; +import com.google.cloud.spring.core.Retry; +import javax.annotation.Generated; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** Provides default property values for Echo client bean */ +@Generated("by google-cloud-spring-generator") +@BetaApi("Autogenerated Spring autoconfiguration is not yet stable") +@ConfigurationProperties("com.google.showcase.v1beta1.echo") +public class EchoSpringProperties implements CredentialsSupplier { + /** OAuth2 credentials to authenticate and authorize calls to Google Cloud Client Libraries. */ + @NestedConfigurationProperty + private final Credentials credentials = + new Credentials("https://www.googleapis.com/auth/cloud-platform"); + /** Quota project to use for billing. */ + private String quotaProjectId; + /** Number of threads used for executors. */ + private Integer executorThreadCount; + /** Allow override of retry settings at service level, applying to all of its RPC methods. */ + @NestedConfigurationProperty private Retry retry; + /** + * Allow override of retry settings at method-level for echo. If defined, this takes precedence + * over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry echoRetry; + /** + * Allow override of retry settings at method-level for pagedExpand. If defined, this takes + * precedence over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry pagedExpandRetry; + /** + * Allow override of retry settings at method-level for simplePagedExpand. If defined, this takes + * precedence over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry simplePagedExpandRetry; + /** + * Allow override of retry settings at method-level for block. If defined, this takes precedence + * over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry blockRetry; + /** + * Allow override of retry settings at method-level for collideName. If defined, this takes + * precedence over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry collideNameRetry; + + @Override + public Credentials getCredentials() { + return this.credentials; + } + + public String getQuotaProjectId() { + return this.quotaProjectId; + } + + public void setQuotaProjectId(String quotaProjectId) { + this.quotaProjectId = quotaProjectId; + } + + public Integer getExecutorThreadCount() { + return this.executorThreadCount; + } + + public void setExecutorThreadCount(Integer executorThreadCount) { + this.executorThreadCount = executorThreadCount; + } + + public Retry getRetry() { + return this.retry; + } + + public void setRetry(Retry retry) { + this.retry = retry; + } + + public Retry getEchoRetry() { + return this.echoRetry; + } + + public void setEchoRetry(Retry echoRetry) { + this.echoRetry = echoRetry; + } + + public Retry getPagedExpandRetry() { + return this.pagedExpandRetry; + } + + public void setPagedExpandRetry(Retry pagedExpandRetry) { + this.pagedExpandRetry = pagedExpandRetry; + } + + public Retry getSimplePagedExpandRetry() { + return this.simplePagedExpandRetry; + } + + public void setSimplePagedExpandRetry(Retry simplePagedExpandRetry) { + this.simplePagedExpandRetry = simplePagedExpandRetry; + } + + public Retry getBlockRetry() { + return this.blockRetry; + } + + public void setBlockRetry(Retry blockRetry) { + this.blockRetry = blockRetry; + } + + public Retry getCollideNameRetry() { + return this.collideNameRetry; + } + + public void setCollideNameRetry(Retry collideNameRetry) { + this.collideNameRetry = collideNameRetry; + } +} diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringPropertiesGrpc.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringPropertiesGrpc.golden new file mode 100644 index 0000000000..6b53f4ac6a --- /dev/null +++ b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringPropertiesGrpc.golden @@ -0,0 +1,117 @@ +package com.google.showcase.v1beta1.spring; + +import com.google.cloud.spring.core.Credentials; +import com.google.cloud.spring.core.CredentialsSupplier; +import com.google.cloud.spring.core.Retry; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** Provides default property values for Echo client bean */ +@ConfigurationProperties("com.google.showcase.v1beta1.echo") +public class EchoSpringProperties implements CredentialsSupplier { + /** OAuth2 credentials to authenticate and authorize calls to Google Cloud Client Libraries. */ + @NestedConfigurationProperty + private final Credentials credentials = + new Credentials("https://www.googleapis.com/auth/cloud-platform"); + /** Quota project to use for billing. */ + private String quotaProjectId; + /** Number of threads used for executors. */ + private Integer executorThreadCount; + /** Allow override of retry settings at service level, applying to all of its RPC methods. */ + @NestedConfigurationProperty private Retry retry; + /** + * Allow override of retry settings at method-level for echo. If defined, this takes precedence + * over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry echoRetry; + /** + * Allow override of retry settings at method-level for pagedExpand. If defined, this takes + * precedence over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry pagedExpandRetry; + /** + * Allow override of retry settings at method-level for simplePagedExpand. If defined, this takes + * precedence over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry simplePagedExpandRetry; + /** + * Allow override of retry settings at method-level for block. If defined, this takes precedence + * over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry blockRetry; + /** + * Allow override of retry settings at method-level for collideName. If defined, this takes + * precedence over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry collideNameRetry; + + @Override + public Credentials getCredentials() { + return this.credentials; + } + + public String getQuotaProjectId() { + return this.quotaProjectId; + } + + public void setQuotaProjectId(String quotaProjectId) { + this.quotaProjectId = quotaProjectId; + } + + public Integer getExecutorThreadCount() { + return this.executorThreadCount; + } + + public void setExecutorThreadCount(Integer executorThreadCount) { + this.executorThreadCount = executorThreadCount; + } + + public Retry getRetry() { + return this.retry; + } + + public void setRetry(Retry retry) { + this.retry = retry; + } + + public Retry getEchoRetry() { + return this.echoRetry; + } + + public void setEchoRetry(Retry echoRetry) { + this.echoRetry = echoRetry; + } + + public Retry getPagedExpandRetry() { + return this.pagedExpandRetry; + } + + public void setPagedExpandRetry(Retry pagedExpandRetry) { + this.pagedExpandRetry = pagedExpandRetry; + } + + public Retry getSimplePagedExpandRetry() { + return this.simplePagedExpandRetry; + } + + public void setSimplePagedExpandRetry(Retry simplePagedExpandRetry) { + this.simplePagedExpandRetry = simplePagedExpandRetry; + } + + public Retry getBlockRetry() { + return this.blockRetry; + } + + public void setBlockRetry(Retry blockRetry) { + this.blockRetry = blockRetry; + } + + public Retry getCollideNameRetry() { + return this.collideNameRetry; + } + + public void setCollideNameRetry(Retry collideNameRetry) { + this.collideNameRetry = collideNameRetry; + } +} diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringPropertiesGrpcRest.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringPropertiesGrpcRest.golden new file mode 100644 index 0000000000..86de23b342 --- /dev/null +++ b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringPropertiesGrpcRest.golden @@ -0,0 +1,127 @@ +package com.google.showcase.v1beta1.spring; + +import com.google.cloud.spring.core.Credentials; +import com.google.cloud.spring.core.CredentialsSupplier; +import com.google.cloud.spring.core.Retry; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** Provides default property values for Echo client bean */ +@ConfigurationProperties("com.google.showcase.v1beta1.echo") +public class EchoSpringProperties implements CredentialsSupplier { + /** OAuth2 credentials to authenticate and authorize calls to Google Cloud Client Libraries. */ + @NestedConfigurationProperty + private final Credentials credentials = + new Credentials("https://www.googleapis.com/auth/cloud-platform"); + /** Quota project to use for billing. */ + private String quotaProjectId; + /** Number of threads used for executors. */ + private Integer executorThreadCount; + /** Allow override of default transport channel provider to use REST instead of gRPC. */ + private boolean useRest = false; + /** Allow override of retry settings at service level, applying to all of its RPC methods. */ + @NestedConfigurationProperty private Retry retry; + /** + * Allow override of retry settings at method-level for echo. If defined, this takes precedence + * over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry echoRetry; + /** + * Allow override of retry settings at method-level for pagedExpand. If defined, this takes + * precedence over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry pagedExpandRetry; + /** + * Allow override of retry settings at method-level for simplePagedExpand. If defined, this takes + * precedence over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry simplePagedExpandRetry; + /** + * Allow override of retry settings at method-level for block. If defined, this takes precedence + * over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry blockRetry; + /** + * Allow override of retry settings at method-level for collideName. If defined, this takes + * precedence over service-level retry configurations for that RPC method. + */ + @NestedConfigurationProperty private Retry collideNameRetry; + + @Override + public Credentials getCredentials() { + return this.credentials; + } + + public String getQuotaProjectId() { + return this.quotaProjectId; + } + + public void setQuotaProjectId(String quotaProjectId) { + this.quotaProjectId = quotaProjectId; + } + + public boolean getUseRest() { + return this.useRest; + } + + public void setUseRest(boolean useRest) { + this.useRest = useRest; + } + + public Integer getExecutorThreadCount() { + return this.executorThreadCount; + } + + public void setExecutorThreadCount(Integer executorThreadCount) { + this.executorThreadCount = executorThreadCount; + } + + public Retry getRetry() { + return this.retry; + } + + public void setRetry(Retry retry) { + this.retry = retry; + } + + public Retry getEchoRetry() { + return this.echoRetry; + } + + public void setEchoRetry(Retry echoRetry) { + this.echoRetry = echoRetry; + } + + public Retry getPagedExpandRetry() { + return this.pagedExpandRetry; + } + + public void setPagedExpandRetry(Retry pagedExpandRetry) { + this.pagedExpandRetry = pagedExpandRetry; + } + + public Retry getSimplePagedExpandRetry() { + return this.simplePagedExpandRetry; + } + + public void setSimplePagedExpandRetry(Retry simplePagedExpandRetry) { + this.simplePagedExpandRetry = simplePagedExpandRetry; + } + + public Retry getBlockRetry() { + return this.blockRetry; + } + + public void setBlockRetry(Retry blockRetry) { + this.blockRetry = blockRetry; + } + + public Retry getCollideNameRetry() { + return this.collideNameRetry; + } + + public void setCollideNameRetry(Retry collideNameRetry) { + this.collideNameRetry = collideNameRetry; + } +} diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/SpringPackageInfo.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/SpringPackageInfo.golden new file mode 100644 index 0000000000..acbc3206cd --- /dev/null +++ b/src/test/java/com/google/api/generator/spring/composer/goldens/SpringPackageInfo.golden @@ -0,0 +1,2 @@ +/** Spring Boot auto-configurations for localhost:7469. */ +package com.google.showcase.v1beta1.spring; diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/SpringPackageInfoFull.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/SpringPackageInfoFull.golden new file mode 100644 index 0000000000..711231fe5f --- /dev/null +++ b/src/test/java/com/google/api/generator/spring/composer/goldens/SpringPackageInfoFull.golden @@ -0,0 +1,23 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** Spring Boot auto-configurations for localhost:7469. */ +@Generated("by google-cloud-spring-generator") +@BetaApi("Autogenerated Spring autoconfiguration is not yet stable") +package com.google.showcase.v1beta1.spring; + +import com.google.api.core.BetaApi; +import javax.annotation.Generated; diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/WickedSpringAutoConfigurationNoRestRpcs.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/WickedSpringAutoConfigurationNoRestRpcs.golden new file mode 100644 index 0000000000..9ee75624d0 --- /dev/null +++ b/src/test/java/com/google/api/generator/spring/composer/goldens/WickedSpringAutoConfigurationNoRestRpcs.golden @@ -0,0 +1,164 @@ +package com.google.showcase.v1beta1.spring; + +import com.google.api.gax.core.CredentialsProvider; +import com.google.api.gax.core.ExecutorProvider; +import com.google.api.gax.retrying.RetrySettings; +import com.google.api.gax.rpc.HeaderProvider; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.cloud.spring.autoconfigure.core.GcpContextAutoConfiguration; +import com.google.cloud.spring.core.Credentials; +import com.google.cloud.spring.core.DefaultCredentialsProvider; +import com.google.cloud.spring.core.Retry; +import com.google.cloud.spring.core.util.RetryUtil; +import com.google.showcase.v1beta1.WickedClient; +import com.google.showcase.v1beta1.WickedSettings; +import java.io.IOException; +import java.util.Collections; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Auto-configuration for {@link WickedClient}. + * + *
Provides auto-configuration for Spring Boot + * + *
The default instance has everything set to sensible defaults: + * + *
Retry settings are also configured from service-level and method-level properties specified
+ * in WickedSpringProperties. Method-level properties will take precedence over service-level
+ * properties if available, and client library defaults will be used if neither are specified.
+ *
+ * @param defaultTransportChannelProvider TransportChannelProvider to use in the settings.
+ * @return a {@link WickedSettings} bean configured with {@link TransportChannelProvider} bean.
+ */
+ @Bean
+ @ConditionalOnMissingBean
+ public WickedSettings wickedSettings(
+ @Qualifier("defaultWickedTransportChannelProvider")
+ TransportChannelProvider defaultTransportChannelProvider)
+ throws IOException {
+ WickedSettings.Builder clientSettingsBuilder = WickedSettings.newBuilder();
+ clientSettingsBuilder
+ .setCredentialsProvider(this.credentialsProvider)
+ .setTransportChannelProvider(defaultTransportChannelProvider)
+ .setHeaderProvider(this.userAgentHeaderProvider());
+ if (this.clientProperties.getQuotaProjectId() != null) {
+ clientSettingsBuilder.setQuotaProjectId(this.clientProperties.getQuotaProjectId());
+ if (LOGGER.isTraceEnabled()) {
+ LOGGER.trace(
+ "Quota project id set to "
+ + this.clientProperties.getQuotaProjectId()
+ + ", this overrides project id from credentials.");
+ }
+ }
+ if (this.clientProperties.getExecutorThreadCount() != null) {
+ ExecutorProvider executorProvider =
+ WickedSettings.defaultExecutorProviderBuilder()
+ .setExecutorThreadCount(this.clientProperties.getExecutorThreadCount())
+ .build();
+ clientSettingsBuilder.setBackgroundExecutorProvider(executorProvider);
+ if (LOGGER.isTraceEnabled()) {
+ LOGGER.trace(
+ "Background executor thread count is "
+ + this.clientProperties.getExecutorThreadCount());
+ }
+ }
+ Retry serviceRetry = clientProperties.getRetry();
+ if (serviceRetry != null) {
+ RetrySettings craftEvilPlanRetrySettings =
+ RetryUtil.updateRetrySettings(
+ clientSettingsBuilder.craftEvilPlanSettings().getRetrySettings(), serviceRetry);
+ clientSettingsBuilder.craftEvilPlanSettings().setRetrySettings(craftEvilPlanRetrySettings);
+
+ if (LOGGER.isTraceEnabled()) {
+ LOGGER.trace("Configured service-level retry settings from properties.");
+ }
+ }
+ Retry craftEvilPlanRetry = clientProperties.getCraftEvilPlanRetry();
+ if (craftEvilPlanRetry != null) {
+ RetrySettings craftEvilPlanRetrySettings =
+ RetryUtil.updateRetrySettings(
+ clientSettingsBuilder.craftEvilPlanSettings().getRetrySettings(), craftEvilPlanRetry);
+ clientSettingsBuilder.craftEvilPlanSettings().setRetrySettings(craftEvilPlanRetrySettings);
+ if (LOGGER.isTraceEnabled()) {
+ LOGGER.trace("Configured method-level retry settings for craftEvilPlan from properties.");
+ }
+ }
+ return clientSettingsBuilder.build();
+ }
+
+ /**
+ * Provides a WickedClient bean configured with WickedSettings.
+ *
+ * @param wickedSettings settings to configure an instance of client bean.
+ * @return a {@link WickedClient} bean configured with {@link WickedSettings}
+ */
+ @Bean
+ @ConditionalOnMissingBean
+ public WickedClient wickedClient(WickedSettings wickedSettings) throws IOException {
+ return WickedClient.create(wickedSettings);
+ }
+
+ private HeaderProvider userAgentHeaderProvider() {
+ String springLibrary = "spring-autogen-wicked";
+ String version = this.getClass().getPackage().getImplementationVersion();
+ return () -> Collections.singletonMap("user-agent", springLibrary + "/" + version);
+ }
+}
diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/WickedSpringPropertiesNoRestRpcs.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/WickedSpringPropertiesNoRestRpcs.golden
new file mode 100644
index 0000000000..1efaf25408
--- /dev/null
+++ b/src/test/java/com/google/api/generator/spring/composer/goldens/WickedSpringPropertiesNoRestRpcs.golden
@@ -0,0 +1,63 @@
+package com.google.showcase.v1beta1.spring;
+
+import com.google.cloud.spring.core.Credentials;
+import com.google.cloud.spring.core.CredentialsSupplier;
+import com.google.cloud.spring.core.Retry;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.NestedConfigurationProperty;
+
+// AUTO-GENERATED DOCUMENTATION AND CLASS.
+/** Provides default property values for Wicked client bean */
+@ConfigurationProperties("com.google.showcase.v1beta1.wicked")
+public class WickedSpringProperties implements CredentialsSupplier {
+ /** OAuth2 credentials to authenticate and authorize calls to Google Cloud Client Libraries. */
+ @NestedConfigurationProperty private final Credentials credentials = new Credentials();
+ /** Quota project to use for billing. */
+ private String quotaProjectId;
+ /** Number of threads used for executors. */
+ private Integer executorThreadCount;
+ /** Allow override of retry settings at service level, applying to all of its RPC methods. */
+ @NestedConfigurationProperty private Retry retry;
+ /**
+ * Allow override of retry settings at method-level for craftEvilPlan. If defined, this takes
+ * precedence over service-level retry configurations for that RPC method.
+ */
+ @NestedConfigurationProperty private Retry craftEvilPlanRetry;
+
+ @Override
+ public Credentials getCredentials() {
+ return this.credentials;
+ }
+
+ public String getQuotaProjectId() {
+ return this.quotaProjectId;
+ }
+
+ public void setQuotaProjectId(String quotaProjectId) {
+ this.quotaProjectId = quotaProjectId;
+ }
+
+ public Integer getExecutorThreadCount() {
+ return this.executorThreadCount;
+ }
+
+ public void setExecutorThreadCount(Integer executorThreadCount) {
+ this.executorThreadCount = executorThreadCount;
+ }
+
+ public Retry getRetry() {
+ return this.retry;
+ }
+
+ public void setRetry(Retry retry) {
+ this.retry = retry;
+ }
+
+ public Retry getCraftEvilPlanRetry() {
+ return this.craftEvilPlanRetry;
+ }
+
+ public void setCraftEvilPlanRetry(Retry craftEvilPlanRetry) {
+ this.craftEvilPlanRetry = craftEvilPlanRetry;
+ }
+}
diff --git a/src/test/java/com/google/api/generator/spring/goldens/SpringAdditionalMetadataJson.golden b/src/test/java/com/google/api/generator/spring/goldens/SpringAdditionalMetadataJson.golden
new file mode 100644
index 0000000000..4e42cb414c
--- /dev/null
+++ b/src/test/java/com/google/api/generator/spring/goldens/SpringAdditionalMetadataJson.golden
@@ -0,0 +1,10 @@
+{
+ "properties": [
+ {
+ "name": "com.google.showcase.v1beta1.echo.enabled",
+ "type": "java.lang.Boolean",
+ "description": "Auto-configure Google Cloud localhost:7469/Echo components.",
+ "defaultValue": true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/test/java/com/google/api/generator/spring/goldens/SpringPackagePom.golden b/src/test/java/com/google/api/generator/spring/goldens/SpringPackagePom.golden
new file mode 100644
index 0000000000..6d583c2b5a
--- /dev/null
+++ b/src/test/java/com/google/api/generator/spring/goldens/SpringPackagePom.golden
@@ -0,0 +1,35 @@
+
+