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.compute.v1.stub; 18 19 import static com.google.cloud.compute.v1.RegionsClient.ListPagedResponse; 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.httpjson.GaxHttpJsonProperties; 28 import com.google.api.gax.httpjson.HttpJsonTransportChannel; 29 import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; 30 import com.google.api.gax.retrying.RetrySettings; 31 import com.google.api.gax.rpc.ApiCallContext; 32 import com.google.api.gax.rpc.ApiClientHeaderProvider; 33 import com.google.api.gax.rpc.ClientContext; 34 import com.google.api.gax.rpc.PageContext; 35 import com.google.api.gax.rpc.PagedCallSettings; 36 import com.google.api.gax.rpc.PagedListDescriptor; 37 import com.google.api.gax.rpc.PagedListResponseFactory; 38 import com.google.api.gax.rpc.StatusCode; 39 import com.google.api.gax.rpc.StubSettings; 40 import com.google.api.gax.rpc.TransportChannelProvider; 41 import com.google.api.gax.rpc.UnaryCallSettings; 42 import com.google.api.gax.rpc.UnaryCallable; 43 import com.google.cloud.compute.v1.GetRegionRequest; 44 import com.google.cloud.compute.v1.ListRegionsRequest; 45 import com.google.cloud.compute.v1.Region; 46 import com.google.cloud.compute.v1.RegionList; 47 import com.google.common.collect.ImmutableList; 48 import com.google.common.collect.ImmutableMap; 49 import com.google.common.collect.ImmutableSet; 50 import com.google.common.collect.Lists; 51 import java.io.IOException; 52 import java.util.List; 53 import javax.annotation.Generated; 54 import org.threeten.bp.Duration; 55 56 // AUTO-GENERATED DOCUMENTATION AND CLASS. 57 /** 58 * Settings class to configure an instance of {@link RegionsStub}. 59 * 60 * <p>The default instance has everything set to sensible defaults: 61 * 62 * <ul> 63 * <li>The default service address (compute.googleapis.com) and default port (443) are used. 64 * <li>Credentials are acquired automatically through Application Default Credentials. 65 * <li>Retries are configured for idempotent methods but not for non-idempotent methods. 66 * </ul> 67 * 68 * <p>The builder of this class is recursive, so contained classes are themselves builders. When 69 * build() is called, the tree of builders is called to create the complete settings object. 70 * 71 * <p>For example, to set the total timeout of get to 30 seconds: 72 * 73 * <pre>{@code 74 * // This snippet has been automatically generated and should be regarded as a code template only. 75 * // It will require modifications to work: 76 * // - It may require correct/in-range values for request initialization. 77 * // - It may require specifying regional endpoints when creating the service client as shown in 78 * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library 79 * RegionsStubSettings.Builder regionsSettingsBuilder = RegionsStubSettings.newBuilder(); 80 * regionsSettingsBuilder 81 * .getSettings() 82 * .setRetrySettings( 83 * regionsSettingsBuilder 84 * .getSettings() 85 * .getRetrySettings() 86 * .toBuilder() 87 * .setTotalTimeout(Duration.ofSeconds(30)) 88 * .build()); 89 * RegionsStubSettings regionsSettings = regionsSettingsBuilder.build(); 90 * }</pre> 91 */ 92 @Generated("by gapic-generator-java") 93 public class RegionsStubSettings extends StubSettings<RegionsStubSettings> { 94 /** The default scopes of the service. */ 95 private static final ImmutableList<String> DEFAULT_SERVICE_SCOPES = 96 ImmutableList.<String>builder() 97 .add("https://www.googleapis.com/auth/compute.readonly") 98 .add("https://www.googleapis.com/auth/compute") 99 .add("https://www.googleapis.com/auth/cloud-platform") 100 .build(); 101 102 private final UnaryCallSettings<GetRegionRequest, Region> getSettings; 103 private final PagedCallSettings<ListRegionsRequest, RegionList, ListPagedResponse> listSettings; 104 105 private static final PagedListDescriptor<ListRegionsRequest, RegionList, Region> 106 LIST_PAGE_STR_DESC = 107 new PagedListDescriptor<ListRegionsRequest, RegionList, Region>() { 108 @Override 109 public String emptyToken() { 110 return ""; 111 } 112 113 @Override 114 public ListRegionsRequest injectToken(ListRegionsRequest payload, String token) { 115 return ListRegionsRequest.newBuilder(payload).setPageToken(token).build(); 116 } 117 118 @Override 119 public ListRegionsRequest injectPageSize(ListRegionsRequest payload, int pageSize) { 120 return ListRegionsRequest.newBuilder(payload).setMaxResults(pageSize).build(); 121 } 122 123 @Override 124 public Integer extractPageSize(ListRegionsRequest payload) { 125 return payload.getMaxResults(); 126 } 127 128 @Override 129 public String extractNextToken(RegionList payload) { 130 return payload.getNextPageToken(); 131 } 132 133 @Override 134 public Iterable<Region> extractResources(RegionList payload) { 135 return payload.getItemsList() == null 136 ? ImmutableList.<Region>of() 137 : payload.getItemsList(); 138 } 139 }; 140 141 private static final PagedListResponseFactory<ListRegionsRequest, RegionList, ListPagedResponse> 142 LIST_PAGE_STR_FACT = 143 new PagedListResponseFactory<ListRegionsRequest, RegionList, ListPagedResponse>() { 144 @Override 145 public ApiFuture<ListPagedResponse> getFuturePagedResponse( 146 UnaryCallable<ListRegionsRequest, RegionList> callable, 147 ListRegionsRequest request, 148 ApiCallContext context, 149 ApiFuture<RegionList> futureResponse) { 150 PageContext<ListRegionsRequest, RegionList, Region> pageContext = 151 PageContext.create(callable, LIST_PAGE_STR_DESC, request, context); 152 return ListPagedResponse.createAsync(pageContext, futureResponse); 153 } 154 }; 155 156 /** Returns the object with the settings used for calls to get. */ getSettings()157 public UnaryCallSettings<GetRegionRequest, Region> getSettings() { 158 return getSettings; 159 } 160 161 /** Returns the object with the settings used for calls to list. */ listSettings()162 public PagedCallSettings<ListRegionsRequest, RegionList, ListPagedResponse> listSettings() { 163 return listSettings; 164 } 165 createStub()166 public RegionsStub createStub() throws IOException { 167 if (getTransportChannelProvider() 168 .getTransportName() 169 .equals(HttpJsonTransportChannel.getHttpJsonTransportName())) { 170 return HttpJsonRegionsStub.create(this); 171 } 172 throw new UnsupportedOperationException( 173 String.format( 174 "Transport not supported: %s", getTransportChannelProvider().getTransportName())); 175 } 176 177 /** Returns a builder for the default ExecutorProvider for this service. */ defaultExecutorProviderBuilder()178 public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() { 179 return InstantiatingExecutorProvider.newBuilder(); 180 } 181 182 /** Returns the default service endpoint. */ getDefaultEndpoint()183 public static String getDefaultEndpoint() { 184 return "compute.googleapis.com:443"; 185 } 186 187 /** Returns the default mTLS service endpoint. */ getDefaultMtlsEndpoint()188 public static String getDefaultMtlsEndpoint() { 189 return "compute.mtls.googleapis.com:443"; 190 } 191 192 /** Returns the default service scopes. */ getDefaultServiceScopes()193 public static List<String> getDefaultServiceScopes() { 194 return DEFAULT_SERVICE_SCOPES; 195 } 196 197 /** Returns a builder for the default credentials for this service. */ defaultCredentialsProviderBuilder()198 public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() { 199 return GoogleCredentialsProvider.newBuilder() 200 .setScopesToApply(DEFAULT_SERVICE_SCOPES) 201 .setUseJwtAccessWithScope(true); 202 } 203 204 /** Returns a builder for the default ChannelProvider for this service. */ 205 public static InstantiatingHttpJsonChannelProvider.Builder defaultHttpJsonTransportProviderBuilder()206 defaultHttpJsonTransportProviderBuilder() { 207 return InstantiatingHttpJsonChannelProvider.newBuilder(); 208 } 209 defaultTransportChannelProvider()210 public static TransportChannelProvider defaultTransportChannelProvider() { 211 return defaultHttpJsonTransportProviderBuilder().build(); 212 } 213 214 @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") defaultApiClientHeaderProviderBuilder()215 public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { 216 return ApiClientHeaderProvider.newBuilder() 217 .setGeneratedLibToken("gapic", GaxProperties.getLibraryVersion(RegionsStubSettings.class)) 218 .setTransportToken( 219 GaxHttpJsonProperties.getHttpJsonTokenName(), 220 GaxHttpJsonProperties.getHttpJsonVersion()); 221 } 222 223 /** Returns a new builder for this class. */ newBuilder()224 public static Builder newBuilder() { 225 return Builder.createDefault(); 226 } 227 228 /** Returns a new builder for this class. */ newBuilder(ClientContext clientContext)229 public static Builder newBuilder(ClientContext clientContext) { 230 return new Builder(clientContext); 231 } 232 233 /** Returns a builder containing all the values of this settings class. */ toBuilder()234 public Builder toBuilder() { 235 return new Builder(this); 236 } 237 RegionsStubSettings(Builder settingsBuilder)238 protected RegionsStubSettings(Builder settingsBuilder) throws IOException { 239 super(settingsBuilder); 240 241 getSettings = settingsBuilder.getSettings().build(); 242 listSettings = settingsBuilder.listSettings().build(); 243 } 244 245 /** Builder for RegionsStubSettings. */ 246 public static class Builder extends StubSettings.Builder<RegionsStubSettings, Builder> { 247 private final ImmutableList<UnaryCallSettings.Builder<?, ?>> unaryMethodSettingsBuilders; 248 private final UnaryCallSettings.Builder<GetRegionRequest, Region> getSettings; 249 private final PagedCallSettings.Builder<ListRegionsRequest, RegionList, ListPagedResponse> 250 listSettings; 251 private static final ImmutableMap<String, ImmutableSet<StatusCode.Code>> 252 RETRYABLE_CODE_DEFINITIONS; 253 254 static { 255 ImmutableMap.Builder<String, ImmutableSet<StatusCode.Code>> definitions = 256 ImmutableMap.builder(); 257 definitions.put( 258 "retry_policy_0_codes", 259 ImmutableSet.copyOf( 260 Lists.<StatusCode.Code>newArrayList( 261 StatusCode.Code.DEADLINE_EXCEEDED, StatusCode.Code.UNAVAILABLE))); 262 RETRYABLE_CODE_DEFINITIONS = definitions.build(); 263 } 264 265 private static final ImmutableMap<String, RetrySettings> RETRY_PARAM_DEFINITIONS; 266 267 static { 268 ImmutableMap.Builder<String, RetrySettings> definitions = ImmutableMap.builder(); 269 RetrySettings settings = null; 270 settings = 271 RetrySettings.newBuilder() 272 .setInitialRetryDelay(Duration.ofMillis(100L)) 273 .setRetryDelayMultiplier(1.3) 274 .setMaxRetryDelay(Duration.ofMillis(60000L)) 275 .setInitialRpcTimeout(Duration.ofMillis(600000L)) 276 .setRpcTimeoutMultiplier(1.0) 277 .setMaxRpcTimeout(Duration.ofMillis(600000L)) 278 .setTotalTimeout(Duration.ofMillis(600000L)) 279 .build(); 280 definitions.put("retry_policy_0_params", settings); 281 RETRY_PARAM_DEFINITIONS = definitions.build(); 282 } 283 Builder()284 protected Builder() { 285 this(((ClientContext) null)); 286 } 287 Builder(ClientContext clientContext)288 protected Builder(ClientContext clientContext) { 289 super(clientContext); 290 291 getSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); 292 listSettings = PagedCallSettings.newBuilder(LIST_PAGE_STR_FACT); 293 294 unaryMethodSettingsBuilders = 295 ImmutableList.<UnaryCallSettings.Builder<?, ?>>of(getSettings, listSettings); 296 initDefaults(this); 297 } 298 Builder(RegionsStubSettings settings)299 protected Builder(RegionsStubSettings settings) { 300 super(settings); 301 302 getSettings = settings.getSettings.toBuilder(); 303 listSettings = settings.listSettings.toBuilder(); 304 305 unaryMethodSettingsBuilders = 306 ImmutableList.<UnaryCallSettings.Builder<?, ?>>of(getSettings, listSettings); 307 } 308 createDefault()309 private static Builder createDefault() { 310 Builder builder = new Builder(((ClientContext) null)); 311 312 builder.setTransportChannelProvider(defaultTransportChannelProvider()); 313 builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); 314 builder.setInternalHeaderProvider(defaultApiClientHeaderProviderBuilder().build()); 315 builder.setEndpoint(getDefaultEndpoint()); 316 builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); 317 builder.setSwitchToMtlsEndpointAllowed(true); 318 319 return initDefaults(builder); 320 } 321 initDefaults(Builder builder)322 private static Builder initDefaults(Builder builder) { 323 builder 324 .getSettings() 325 .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) 326 .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); 327 328 builder 329 .listSettings() 330 .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) 331 .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); 332 333 return builder; 334 } 335 336 /** 337 * Applies the given settings updater function to all of the unary API methods in this service. 338 * 339 * <p>Note: This method does not support applying settings to streaming methods. 340 */ applyToAllUnaryMethods( ApiFunction<UnaryCallSettings.Builder<?, ?>, Void> settingsUpdater)341 public Builder applyToAllUnaryMethods( 342 ApiFunction<UnaryCallSettings.Builder<?, ?>, Void> settingsUpdater) { 343 super.applyToAllUnaryMethods(unaryMethodSettingsBuilders, settingsUpdater); 344 return this; 345 } 346 unaryMethodSettingsBuilders()347 public ImmutableList<UnaryCallSettings.Builder<?, ?>> unaryMethodSettingsBuilders() { 348 return unaryMethodSettingsBuilders; 349 } 350 351 /** Returns the builder for the settings used for calls to get. */ getSettings()352 public UnaryCallSettings.Builder<GetRegionRequest, Region> getSettings() { 353 return getSettings; 354 } 355 356 /** Returns the builder for the settings used for calls to list. */ 357 public PagedCallSettings.Builder<ListRegionsRequest, RegionList, ListPagedResponse> listSettings()358 listSettings() { 359 return listSettings; 360 } 361 362 @Override build()363 public RegionsStubSettings build() throws IOException { 364 return new RegionsStubSettings(this); 365 } 366 } 367 } 368