1 /* 2 * Copyright 2022 Google LLC 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.google.cloud.retail.v2.stub; 18 19 import static com.google.cloud.retail.v2.SearchServiceClient.SearchPagedResponse; 20 21 import com.google.api.core.ApiFunction; 22 import com.google.api.core.ApiFuture; 23 import com.google.api.core.BetaApi; 24 import com.google.api.gax.core.GaxProperties; 25 import com.google.api.gax.core.GoogleCredentialsProvider; 26 import com.google.api.gax.core.InstantiatingExecutorProvider; 27 import com.google.api.gax.grpc.GaxGrpcProperties; 28 import com.google.api.gax.grpc.GrpcTransportChannel; 29 import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; 30 import com.google.api.gax.httpjson.GaxHttpJsonProperties; 31 import com.google.api.gax.httpjson.HttpJsonTransportChannel; 32 import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; 33 import com.google.api.gax.retrying.RetrySettings; 34 import com.google.api.gax.rpc.ApiCallContext; 35 import com.google.api.gax.rpc.ApiClientHeaderProvider; 36 import com.google.api.gax.rpc.ClientContext; 37 import com.google.api.gax.rpc.PageContext; 38 import com.google.api.gax.rpc.PagedCallSettings; 39 import com.google.api.gax.rpc.PagedListDescriptor; 40 import com.google.api.gax.rpc.PagedListResponseFactory; 41 import com.google.api.gax.rpc.StatusCode; 42 import com.google.api.gax.rpc.StubSettings; 43 import com.google.api.gax.rpc.TransportChannelProvider; 44 import com.google.api.gax.rpc.UnaryCallSettings; 45 import com.google.api.gax.rpc.UnaryCallable; 46 import com.google.cloud.retail.v2.SearchRequest; 47 import com.google.cloud.retail.v2.SearchResponse; 48 import com.google.common.collect.ImmutableList; 49 import com.google.common.collect.ImmutableMap; 50 import com.google.common.collect.ImmutableSet; 51 import com.google.common.collect.Lists; 52 import java.io.IOException; 53 import java.util.List; 54 import javax.annotation.Generated; 55 import org.threeten.bp.Duration; 56 57 // AUTO-GENERATED DOCUMENTATION AND CLASS. 58 /** 59 * Settings class to configure an instance of {@link SearchServiceStub}. 60 * 61 * <p>The default instance has everything set to sensible defaults: 62 * 63 * <ul> 64 * <li>The default service address (retail.googleapis.com) and default port (443) are used. 65 * <li>Credentials are acquired automatically through Application Default Credentials. 66 * <li>Retries are configured for idempotent methods but not for non-idempotent methods. 67 * </ul> 68 * 69 * <p>The builder of this class is recursive, so contained classes are themselves builders. When 70 * build() is called, the tree of builders is called to create the complete settings object. 71 * 72 * <p>For example, to set the total timeout of search to 30 seconds: 73 * 74 * <pre>{@code 75 * // This snippet has been automatically generated and should be regarded as a code template only. 76 * // It will require modifications to work: 77 * // - It may require correct/in-range values for request initialization. 78 * // - It may require specifying regional endpoints when creating the service client as shown in 79 * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library 80 * SearchServiceStubSettings.Builder searchServiceSettingsBuilder = 81 * SearchServiceStubSettings.newBuilder(); 82 * searchServiceSettingsBuilder 83 * .searchSettings() 84 * .setRetrySettings( 85 * searchServiceSettingsBuilder 86 * .searchSettings() 87 * .getRetrySettings() 88 * .toBuilder() 89 * .setTotalTimeout(Duration.ofSeconds(30)) 90 * .build()); 91 * SearchServiceStubSettings searchServiceSettings = searchServiceSettingsBuilder.build(); 92 * }</pre> 93 */ 94 @Generated("by gapic-generator-java") 95 public class SearchServiceStubSettings extends StubSettings<SearchServiceStubSettings> { 96 /** The default scopes of the service. */ 97 private static final ImmutableList<String> DEFAULT_SERVICE_SCOPES = 98 ImmutableList.<String>builder().add("https://www.googleapis.com/auth/cloud-platform").build(); 99 100 private final PagedCallSettings<SearchRequest, SearchResponse, SearchPagedResponse> 101 searchSettings; 102 103 private static final PagedListDescriptor< 104 SearchRequest, SearchResponse, SearchResponse.SearchResult> 105 SEARCH_PAGE_STR_DESC = 106 new PagedListDescriptor<SearchRequest, SearchResponse, SearchResponse.SearchResult>() { 107 @Override 108 public String emptyToken() { 109 return ""; 110 } 111 112 @Override 113 public SearchRequest injectToken(SearchRequest payload, String token) { 114 return SearchRequest.newBuilder(payload).setPageToken(token).build(); 115 } 116 117 @Override 118 public SearchRequest injectPageSize(SearchRequest payload, int pageSize) { 119 return SearchRequest.newBuilder(payload).setPageSize(pageSize).build(); 120 } 121 122 @Override 123 public Integer extractPageSize(SearchRequest payload) { 124 return payload.getPageSize(); 125 } 126 127 @Override 128 public String extractNextToken(SearchResponse payload) { 129 return payload.getNextPageToken(); 130 } 131 132 @Override 133 public Iterable<SearchResponse.SearchResult> extractResources(SearchResponse payload) { 134 return payload.getResultsList() == null 135 ? ImmutableList.<SearchResponse.SearchResult>of() 136 : payload.getResultsList(); 137 } 138 }; 139 140 private static final PagedListResponseFactory<SearchRequest, SearchResponse, SearchPagedResponse> 141 SEARCH_PAGE_STR_FACT = 142 new PagedListResponseFactory<SearchRequest, SearchResponse, SearchPagedResponse>() { 143 @Override 144 public ApiFuture<SearchPagedResponse> getFuturePagedResponse( 145 UnaryCallable<SearchRequest, SearchResponse> callable, 146 SearchRequest request, 147 ApiCallContext context, 148 ApiFuture<SearchResponse> futureResponse) { 149 PageContext<SearchRequest, SearchResponse, SearchResponse.SearchResult> pageContext = 150 PageContext.create(callable, SEARCH_PAGE_STR_DESC, request, context); 151 return SearchPagedResponse.createAsync(pageContext, futureResponse); 152 } 153 }; 154 155 /** Returns the object with the settings used for calls to search. */ searchSettings()156 public PagedCallSettings<SearchRequest, SearchResponse, SearchPagedResponse> searchSettings() { 157 return searchSettings; 158 } 159 createStub()160 public SearchServiceStub createStub() throws IOException { 161 if (getTransportChannelProvider() 162 .getTransportName() 163 .equals(GrpcTransportChannel.getGrpcTransportName())) { 164 return GrpcSearchServiceStub.create(this); 165 } 166 if (getTransportChannelProvider() 167 .getTransportName() 168 .equals(HttpJsonTransportChannel.getHttpJsonTransportName())) { 169 return HttpJsonSearchServiceStub.create(this); 170 } 171 throw new UnsupportedOperationException( 172 String.format( 173 "Transport not supported: %s", getTransportChannelProvider().getTransportName())); 174 } 175 176 /** Returns a builder for the default ExecutorProvider for this service. */ defaultExecutorProviderBuilder()177 public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() { 178 return InstantiatingExecutorProvider.newBuilder(); 179 } 180 181 /** Returns the default service endpoint. */ getDefaultEndpoint()182 public static String getDefaultEndpoint() { 183 return "retail.googleapis.com:443"; 184 } 185 186 /** Returns the default mTLS service endpoint. */ getDefaultMtlsEndpoint()187 public static String getDefaultMtlsEndpoint() { 188 return "retail.mtls.googleapis.com:443"; 189 } 190 191 /** Returns the default service scopes. */ getDefaultServiceScopes()192 public static List<String> getDefaultServiceScopes() { 193 return DEFAULT_SERVICE_SCOPES; 194 } 195 196 /** Returns a builder for the default credentials for this service. */ defaultCredentialsProviderBuilder()197 public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() { 198 return GoogleCredentialsProvider.newBuilder() 199 .setScopesToApply(DEFAULT_SERVICE_SCOPES) 200 .setUseJwtAccessWithScope(true); 201 } 202 203 /** Returns a builder for the default gRPC ChannelProvider for this service. */ defaultGrpcTransportProviderBuilder()204 public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { 205 return InstantiatingGrpcChannelProvider.newBuilder() 206 .setMaxInboundMessageSize(Integer.MAX_VALUE); 207 } 208 209 /** Returns a builder for the default REST ChannelProvider for this service. */ 210 @BetaApi 211 public static InstantiatingHttpJsonChannelProvider.Builder defaultHttpJsonTransportProviderBuilder()212 defaultHttpJsonTransportProviderBuilder() { 213 return InstantiatingHttpJsonChannelProvider.newBuilder(); 214 } 215 defaultTransportChannelProvider()216 public static TransportChannelProvider defaultTransportChannelProvider() { 217 return defaultGrpcTransportProviderBuilder().build(); 218 } 219 220 @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") defaultGrpcApiClientHeaderProviderBuilder()221 public static ApiClientHeaderProvider.Builder defaultGrpcApiClientHeaderProviderBuilder() { 222 return ApiClientHeaderProvider.newBuilder() 223 .setGeneratedLibToken( 224 "gapic", GaxProperties.getLibraryVersion(SearchServiceStubSettings.class)) 225 .setTransportToken( 226 GaxGrpcProperties.getGrpcTokenName(), GaxGrpcProperties.getGrpcVersion()); 227 } 228 229 @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") defaultHttpJsonApiClientHeaderProviderBuilder()230 public static ApiClientHeaderProvider.Builder defaultHttpJsonApiClientHeaderProviderBuilder() { 231 return ApiClientHeaderProvider.newBuilder() 232 .setGeneratedLibToken( 233 "gapic", GaxProperties.getLibraryVersion(SearchServiceStubSettings.class)) 234 .setTransportToken( 235 GaxHttpJsonProperties.getHttpJsonTokenName(), 236 GaxHttpJsonProperties.getHttpJsonVersion()); 237 } 238 defaultApiClientHeaderProviderBuilder()239 public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { 240 return SearchServiceStubSettings.defaultGrpcApiClientHeaderProviderBuilder(); 241 } 242 243 /** Returns a new gRPC builder for this class. */ newBuilder()244 public static Builder newBuilder() { 245 return Builder.createDefault(); 246 } 247 248 /** Returns a new REST builder for this class. */ newHttpJsonBuilder()249 public static Builder newHttpJsonBuilder() { 250 return Builder.createHttpJsonDefault(); 251 } 252 253 /** Returns a new builder for this class. */ newBuilder(ClientContext clientContext)254 public static Builder newBuilder(ClientContext clientContext) { 255 return new Builder(clientContext); 256 } 257 258 /** Returns a builder containing all the values of this settings class. */ toBuilder()259 public Builder toBuilder() { 260 return new Builder(this); 261 } 262 SearchServiceStubSettings(Builder settingsBuilder)263 protected SearchServiceStubSettings(Builder settingsBuilder) throws IOException { 264 super(settingsBuilder); 265 266 searchSettings = settingsBuilder.searchSettings().build(); 267 } 268 269 /** Builder for SearchServiceStubSettings. */ 270 public static class Builder extends StubSettings.Builder<SearchServiceStubSettings, Builder> { 271 private final ImmutableList<UnaryCallSettings.Builder<?, ?>> unaryMethodSettingsBuilders; 272 private final PagedCallSettings.Builder<SearchRequest, SearchResponse, SearchPagedResponse> 273 searchSettings; 274 private static final ImmutableMap<String, ImmutableSet<StatusCode.Code>> 275 RETRYABLE_CODE_DEFINITIONS; 276 277 static { 278 ImmutableMap.Builder<String, ImmutableSet<StatusCode.Code>> definitions = 279 ImmutableMap.builder(); 280 definitions.put( 281 "retry_policy_0_codes", 282 ImmutableSet.copyOf( 283 Lists.<StatusCode.Code>newArrayList( 284 StatusCode.Code.UNAVAILABLE, StatusCode.Code.DEADLINE_EXCEEDED))); 285 RETRYABLE_CODE_DEFINITIONS = definitions.build(); 286 } 287 288 private static final ImmutableMap<String, RetrySettings> RETRY_PARAM_DEFINITIONS; 289 290 static { 291 ImmutableMap.Builder<String, RetrySettings> definitions = ImmutableMap.builder(); 292 RetrySettings settings = null; 293 settings = 294 RetrySettings.newBuilder() 295 .setInitialRetryDelay(Duration.ofMillis(100L)) 296 .setRetryDelayMultiplier(1.3) 297 .setMaxRetryDelay(Duration.ofMillis(5000L)) 298 .setInitialRpcTimeout(Duration.ofMillis(5000L)) 299 .setRpcTimeoutMultiplier(1.0) 300 .setMaxRpcTimeout(Duration.ofMillis(5000L)) 301 .setTotalTimeout(Duration.ofMillis(5000L)) 302 .build(); 303 definitions.put("retry_policy_0_params", settings); 304 RETRY_PARAM_DEFINITIONS = definitions.build(); 305 } 306 Builder()307 protected Builder() { 308 this(((ClientContext) null)); 309 } 310 Builder(ClientContext clientContext)311 protected Builder(ClientContext clientContext) { 312 super(clientContext); 313 314 searchSettings = PagedCallSettings.newBuilder(SEARCH_PAGE_STR_FACT); 315 316 unaryMethodSettingsBuilders = 317 ImmutableList.<UnaryCallSettings.Builder<?, ?>>of(searchSettings); 318 initDefaults(this); 319 } 320 Builder(SearchServiceStubSettings settings)321 protected Builder(SearchServiceStubSettings settings) { 322 super(settings); 323 324 searchSettings = settings.searchSettings.toBuilder(); 325 326 unaryMethodSettingsBuilders = 327 ImmutableList.<UnaryCallSettings.Builder<?, ?>>of(searchSettings); 328 } 329 createDefault()330 private static Builder createDefault() { 331 Builder builder = new Builder(((ClientContext) null)); 332 333 builder.setTransportChannelProvider(defaultTransportChannelProvider()); 334 builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); 335 builder.setInternalHeaderProvider(defaultApiClientHeaderProviderBuilder().build()); 336 builder.setEndpoint(getDefaultEndpoint()); 337 builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); 338 builder.setSwitchToMtlsEndpointAllowed(true); 339 340 return initDefaults(builder); 341 } 342 createHttpJsonDefault()343 private static Builder createHttpJsonDefault() { 344 Builder builder = new Builder(((ClientContext) null)); 345 346 builder.setTransportChannelProvider(defaultHttpJsonTransportProviderBuilder().build()); 347 builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); 348 builder.setInternalHeaderProvider(defaultHttpJsonApiClientHeaderProviderBuilder().build()); 349 builder.setEndpoint(getDefaultEndpoint()); 350 builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); 351 builder.setSwitchToMtlsEndpointAllowed(true); 352 353 return initDefaults(builder); 354 } 355 initDefaults(Builder builder)356 private static Builder initDefaults(Builder builder) { 357 builder 358 .searchSettings() 359 .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) 360 .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); 361 362 return builder; 363 } 364 365 /** 366 * Applies the given settings updater function to all of the unary API methods in this service. 367 * 368 * <p>Note: This method does not support applying settings to streaming methods. 369 */ applyToAllUnaryMethods( ApiFunction<UnaryCallSettings.Builder<?, ?>, Void> settingsUpdater)370 public Builder applyToAllUnaryMethods( 371 ApiFunction<UnaryCallSettings.Builder<?, ?>, Void> settingsUpdater) { 372 super.applyToAllUnaryMethods(unaryMethodSettingsBuilders, settingsUpdater); 373 return this; 374 } 375 unaryMethodSettingsBuilders()376 public ImmutableList<UnaryCallSettings.Builder<?, ?>> unaryMethodSettingsBuilders() { 377 return unaryMethodSettingsBuilders; 378 } 379 380 /** Returns the builder for the settings used for calls to search. */ 381 public PagedCallSettings.Builder<SearchRequest, SearchResponse, SearchPagedResponse> searchSettings()382 searchSettings() { 383 return searchSettings; 384 } 385 386 @Override build()387 public SearchServiceStubSettings build() throws IOException { 388 return new SearchServiceStubSettings(this); 389 } 390 } 391 } 392