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.ZoneOperationsClient.ListPagedResponse; 20 21 import com.google.api.core.BetaApi; 22 import com.google.api.core.InternalApi; 23 import com.google.api.gax.core.BackgroundResource; 24 import com.google.api.gax.core.BackgroundResourceAggregation; 25 import com.google.api.gax.httpjson.ApiMethodDescriptor; 26 import com.google.api.gax.httpjson.HttpJsonCallSettings; 27 import com.google.api.gax.httpjson.HttpJsonLongRunningClient; 28 import com.google.api.gax.httpjson.HttpJsonOperationSnapshot; 29 import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; 30 import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; 31 import com.google.api.gax.httpjson.ProtoMessageResponseParser; 32 import com.google.api.gax.httpjson.ProtoRestSerializer; 33 import com.google.api.gax.rpc.ClientContext; 34 import com.google.api.gax.rpc.LongRunningClient; 35 import com.google.api.gax.rpc.UnaryCallable; 36 import com.google.cloud.compute.v1.DeleteZoneOperationRequest; 37 import com.google.cloud.compute.v1.DeleteZoneOperationResponse; 38 import com.google.cloud.compute.v1.GetZoneOperationRequest; 39 import com.google.cloud.compute.v1.ListZoneOperationsRequest; 40 import com.google.cloud.compute.v1.Operation; 41 import com.google.cloud.compute.v1.Operation.Status; 42 import com.google.cloud.compute.v1.OperationList; 43 import com.google.cloud.compute.v1.WaitZoneOperationRequest; 44 import com.google.protobuf.TypeRegistry; 45 import java.io.IOException; 46 import java.util.ArrayList; 47 import java.util.Arrays; 48 import java.util.HashMap; 49 import java.util.List; 50 import java.util.Map; 51 import java.util.concurrent.TimeUnit; 52 import javax.annotation.Generated; 53 54 // AUTO-GENERATED DOCUMENTATION AND CLASS. 55 /** 56 * REST stub implementation for the ZoneOperations service API. 57 * 58 * <p>This class is for advanced usage and reflects the underlying API directly. 59 */ 60 @Generated("by gapic-generator-java") 61 @BetaApi 62 public class HttpJsonZoneOperationsStub extends ZoneOperationsStub { 63 private static final TypeRegistry typeRegistry = TypeRegistry.newBuilder().build(); 64 65 private static final ApiMethodDescriptor<DeleteZoneOperationRequest, DeleteZoneOperationResponse> 66 deleteMethodDescriptor = 67 ApiMethodDescriptor.<DeleteZoneOperationRequest, DeleteZoneOperationResponse>newBuilder() 68 .setFullMethodName("google.cloud.compute.v1.ZoneOperations/Delete") 69 .setHttpMethod("DELETE") 70 .setType(ApiMethodDescriptor.MethodType.UNARY) 71 .setRequestFormatter( 72 ProtoMessageRequestFormatter.<DeleteZoneOperationRequest>newBuilder() 73 .setPath( 74 "/compute/v1/projects/{project}/zones/{zone}/operations/{operation}", 75 request -> { 76 Map<String, String> fields = new HashMap<>(); 77 ProtoRestSerializer<DeleteZoneOperationRequest> serializer = 78 ProtoRestSerializer.create(); 79 serializer.putPathParam(fields, "operation", request.getOperation()); 80 serializer.putPathParam(fields, "project", request.getProject()); 81 serializer.putPathParam(fields, "zone", request.getZone()); 82 return fields; 83 }) 84 .setQueryParamsExtractor( 85 request -> { 86 Map<String, List<String>> fields = new HashMap<>(); 87 ProtoRestSerializer<DeleteZoneOperationRequest> serializer = 88 ProtoRestSerializer.create(); 89 return fields; 90 }) 91 .setRequestBodyExtractor(request -> null) 92 .build()) 93 .setResponseParser( 94 ProtoMessageResponseParser.<DeleteZoneOperationResponse>newBuilder() 95 .setDefaultInstance(DeleteZoneOperationResponse.getDefaultInstance()) 96 .setDefaultTypeRegistry(typeRegistry) 97 .build()) 98 .build(); 99 100 private static final ApiMethodDescriptor<GetZoneOperationRequest, Operation> getMethodDescriptor = 101 ApiMethodDescriptor.<GetZoneOperationRequest, Operation>newBuilder() 102 .setFullMethodName("google.cloud.compute.v1.ZoneOperations/Get") 103 .setHttpMethod("GET") 104 .setType(ApiMethodDescriptor.MethodType.UNARY) 105 .setRequestFormatter( 106 ProtoMessageRequestFormatter.<GetZoneOperationRequest>newBuilder() 107 .setPath( 108 "/compute/v1/projects/{project}/zones/{zone}/operations/{operation}", 109 request -> { 110 Map<String, String> fields = new HashMap<>(); 111 ProtoRestSerializer<GetZoneOperationRequest> serializer = 112 ProtoRestSerializer.create(); 113 serializer.putPathParam(fields, "operation", request.getOperation()); 114 serializer.putPathParam(fields, "project", request.getProject()); 115 serializer.putPathParam(fields, "zone", request.getZone()); 116 return fields; 117 }) 118 .setQueryParamsExtractor( 119 request -> { 120 Map<String, List<String>> fields = new HashMap<>(); 121 ProtoRestSerializer<GetZoneOperationRequest> serializer = 122 ProtoRestSerializer.create(); 123 return fields; 124 }) 125 .setRequestBodyExtractor(request -> null) 126 .build()) 127 .setResponseParser( 128 ProtoMessageResponseParser.<Operation>newBuilder() 129 .setDefaultInstance(Operation.getDefaultInstance()) 130 .setDefaultTypeRegistry(typeRegistry) 131 .build()) 132 .setOperationSnapshotFactory( 133 (GetZoneOperationRequest request, Operation response) -> { 134 StringBuilder opName = new StringBuilder(response.getName()); 135 return HttpJsonOperationSnapshot.newBuilder() 136 .setName(opName.toString()) 137 .setMetadata(response) 138 .setDone(Status.DONE.equals(response.getStatus())) 139 .setResponse(response) 140 .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) 141 .build(); 142 }) 143 .setPollingRequestFactory( 144 compoundOperationId -> { 145 List<String> idComponents = Arrays.asList(compoundOperationId.split(":")); 146 return GetZoneOperationRequest.newBuilder() 147 .setOperation(idComponents.get(0)) 148 .setProject(idComponents.get(1)) 149 .setZone(idComponents.get(2)) 150 .build(); 151 }) 152 .build(); 153 154 private static final ApiMethodDescriptor<ListZoneOperationsRequest, OperationList> 155 listMethodDescriptor = 156 ApiMethodDescriptor.<ListZoneOperationsRequest, OperationList>newBuilder() 157 .setFullMethodName("google.cloud.compute.v1.ZoneOperations/List") 158 .setHttpMethod("GET") 159 .setType(ApiMethodDescriptor.MethodType.UNARY) 160 .setRequestFormatter( 161 ProtoMessageRequestFormatter.<ListZoneOperationsRequest>newBuilder() 162 .setPath( 163 "/compute/v1/projects/{project}/zones/{zone}/operations", 164 request -> { 165 Map<String, String> fields = new HashMap<>(); 166 ProtoRestSerializer<ListZoneOperationsRequest> serializer = 167 ProtoRestSerializer.create(); 168 serializer.putPathParam(fields, "project", request.getProject()); 169 serializer.putPathParam(fields, "zone", request.getZone()); 170 return fields; 171 }) 172 .setQueryParamsExtractor( 173 request -> { 174 Map<String, List<String>> fields = new HashMap<>(); 175 ProtoRestSerializer<ListZoneOperationsRequest> serializer = 176 ProtoRestSerializer.create(); 177 if (request.hasFilter()) { 178 serializer.putQueryParam(fields, "filter", request.getFilter()); 179 } 180 if (request.hasMaxResults()) { 181 serializer.putQueryParam( 182 fields, "maxResults", request.getMaxResults()); 183 } 184 if (request.hasOrderBy()) { 185 serializer.putQueryParam(fields, "orderBy", request.getOrderBy()); 186 } 187 if (request.hasPageToken()) { 188 serializer.putQueryParam(fields, "pageToken", request.getPageToken()); 189 } 190 if (request.hasReturnPartialSuccess()) { 191 serializer.putQueryParam( 192 fields, 193 "returnPartialSuccess", 194 request.getReturnPartialSuccess()); 195 } 196 return fields; 197 }) 198 .setRequestBodyExtractor(request -> null) 199 .build()) 200 .setResponseParser( 201 ProtoMessageResponseParser.<OperationList>newBuilder() 202 .setDefaultInstance(OperationList.getDefaultInstance()) 203 .setDefaultTypeRegistry(typeRegistry) 204 .build()) 205 .build(); 206 207 private static final ApiMethodDescriptor<WaitZoneOperationRequest, Operation> 208 waitMethodDescriptor = 209 ApiMethodDescriptor.<WaitZoneOperationRequest, Operation>newBuilder() 210 .setFullMethodName("google.cloud.compute.v1.ZoneOperations/Wait") 211 .setHttpMethod("POST") 212 .setType(ApiMethodDescriptor.MethodType.UNARY) 213 .setRequestFormatter( 214 ProtoMessageRequestFormatter.<WaitZoneOperationRequest>newBuilder() 215 .setPath( 216 "/compute/v1/projects/{project}/zones/{zone}/operations/{operation}/wait", 217 request -> { 218 Map<String, String> fields = new HashMap<>(); 219 ProtoRestSerializer<WaitZoneOperationRequest> serializer = 220 ProtoRestSerializer.create(); 221 serializer.putPathParam(fields, "operation", request.getOperation()); 222 serializer.putPathParam(fields, "project", request.getProject()); 223 serializer.putPathParam(fields, "zone", request.getZone()); 224 return fields; 225 }) 226 .setQueryParamsExtractor( 227 request -> { 228 Map<String, List<String>> fields = new HashMap<>(); 229 ProtoRestSerializer<WaitZoneOperationRequest> serializer = 230 ProtoRestSerializer.create(); 231 return fields; 232 }) 233 .setRequestBodyExtractor(request -> null) 234 .build()) 235 .setResponseParser( 236 ProtoMessageResponseParser.<Operation>newBuilder() 237 .setDefaultInstance(Operation.getDefaultInstance()) 238 .setDefaultTypeRegistry(typeRegistry) 239 .build()) 240 .build(); 241 242 private final UnaryCallable<DeleteZoneOperationRequest, DeleteZoneOperationResponse> 243 deleteCallable; 244 private final UnaryCallable<GetZoneOperationRequest, Operation> getCallable; 245 private final UnaryCallable<ListZoneOperationsRequest, OperationList> listCallable; 246 private final UnaryCallable<ListZoneOperationsRequest, ListPagedResponse> listPagedCallable; 247 private final UnaryCallable<WaitZoneOperationRequest, Operation> waitCallable; 248 249 private final BackgroundResource backgroundResources; 250 private final LongRunningClient longRunningClient; 251 private final HttpJsonStubCallableFactory callableFactory; 252 create(ZoneOperationsStubSettings settings)253 public static final HttpJsonZoneOperationsStub create(ZoneOperationsStubSettings settings) 254 throws IOException { 255 return new HttpJsonZoneOperationsStub(settings, ClientContext.create(settings)); 256 } 257 create(ClientContext clientContext)258 public static final HttpJsonZoneOperationsStub create(ClientContext clientContext) 259 throws IOException { 260 return new HttpJsonZoneOperationsStub( 261 ZoneOperationsStubSettings.newBuilder().build(), clientContext); 262 } 263 create( ClientContext clientContext, HttpJsonStubCallableFactory callableFactory)264 public static final HttpJsonZoneOperationsStub create( 265 ClientContext clientContext, HttpJsonStubCallableFactory callableFactory) throws IOException { 266 return new HttpJsonZoneOperationsStub( 267 ZoneOperationsStubSettings.newBuilder().build(), clientContext, callableFactory); 268 } 269 270 /** 271 * Constructs an instance of HttpJsonZoneOperationsStub, using the given settings. This is 272 * protected so that it is easy to make a subclass, but otherwise, the static factory methods 273 * should be preferred. 274 */ HttpJsonZoneOperationsStub( ZoneOperationsStubSettings settings, ClientContext clientContext)275 protected HttpJsonZoneOperationsStub( 276 ZoneOperationsStubSettings settings, ClientContext clientContext) throws IOException { 277 this(settings, clientContext, new HttpJsonZoneOperationsCallableFactory()); 278 } 279 280 /** 281 * Constructs an instance of HttpJsonZoneOperationsStub, using the given settings. This is 282 * protected so that it is easy to make a subclass, but otherwise, the static factory methods 283 * should be preferred. 284 */ HttpJsonZoneOperationsStub( ZoneOperationsStubSettings settings, ClientContext clientContext, HttpJsonStubCallableFactory callableFactory)285 protected HttpJsonZoneOperationsStub( 286 ZoneOperationsStubSettings settings, 287 ClientContext clientContext, 288 HttpJsonStubCallableFactory callableFactory) 289 throws IOException { 290 this.callableFactory = callableFactory; 291 292 HttpJsonCallSettings<DeleteZoneOperationRequest, DeleteZoneOperationResponse> 293 deleteTransportSettings = 294 HttpJsonCallSettings 295 .<DeleteZoneOperationRequest, DeleteZoneOperationResponse>newBuilder() 296 .setMethodDescriptor(deleteMethodDescriptor) 297 .setTypeRegistry(typeRegistry) 298 .build(); 299 HttpJsonCallSettings<GetZoneOperationRequest, Operation> getTransportSettings = 300 HttpJsonCallSettings.<GetZoneOperationRequest, Operation>newBuilder() 301 .setMethodDescriptor(getMethodDescriptor) 302 .setTypeRegistry(typeRegistry) 303 .build(); 304 HttpJsonCallSettings<ListZoneOperationsRequest, OperationList> listTransportSettings = 305 HttpJsonCallSettings.<ListZoneOperationsRequest, OperationList>newBuilder() 306 .setMethodDescriptor(listMethodDescriptor) 307 .setTypeRegistry(typeRegistry) 308 .build(); 309 HttpJsonCallSettings<WaitZoneOperationRequest, Operation> waitTransportSettings = 310 HttpJsonCallSettings.<WaitZoneOperationRequest, Operation>newBuilder() 311 .setMethodDescriptor(waitMethodDescriptor) 312 .setTypeRegistry(typeRegistry) 313 .build(); 314 315 this.deleteCallable = 316 callableFactory.createUnaryCallable( 317 deleteTransportSettings, settings.deleteSettings(), clientContext); 318 this.getCallable = 319 callableFactory.createUnaryCallable( 320 getTransportSettings, settings.getSettings(), clientContext); 321 this.listCallable = 322 callableFactory.createUnaryCallable( 323 listTransportSettings, settings.listSettings(), clientContext); 324 this.listPagedCallable = 325 callableFactory.createPagedCallable( 326 listTransportSettings, settings.listSettings(), clientContext); 327 this.waitCallable = 328 callableFactory.createUnaryCallable( 329 waitTransportSettings, settings.waitSettings(), clientContext); 330 331 this.longRunningClient = 332 new HttpJsonLongRunningClient<GetZoneOperationRequest, Operation>( 333 getCallable, 334 getMethodDescriptor.getOperationSnapshotFactory(), 335 getMethodDescriptor.getPollingRequestFactory()); 336 this.backgroundResources = 337 new BackgroundResourceAggregation(clientContext.getBackgroundResources()); 338 } 339 340 @InternalApi getMethodDescriptors()341 public static List<ApiMethodDescriptor> getMethodDescriptors() { 342 List<ApiMethodDescriptor> methodDescriptors = new ArrayList<>(); 343 methodDescriptors.add(deleteMethodDescriptor); 344 methodDescriptors.add(getMethodDescriptor); 345 methodDescriptors.add(listMethodDescriptor); 346 methodDescriptors.add(waitMethodDescriptor); 347 return methodDescriptors; 348 } 349 350 @Override deleteCallable()351 public UnaryCallable<DeleteZoneOperationRequest, DeleteZoneOperationResponse> deleteCallable() { 352 return deleteCallable; 353 } 354 355 @Override getCallable()356 public UnaryCallable<GetZoneOperationRequest, Operation> getCallable() { 357 return getCallable; 358 } 359 360 @Override listCallable()361 public UnaryCallable<ListZoneOperationsRequest, OperationList> listCallable() { 362 return listCallable; 363 } 364 365 @Override listPagedCallable()366 public UnaryCallable<ListZoneOperationsRequest, ListPagedResponse> listPagedCallable() { 367 return listPagedCallable; 368 } 369 370 @Override waitCallable()371 public UnaryCallable<WaitZoneOperationRequest, Operation> waitCallable() { 372 return waitCallable; 373 } 374 375 @Override longRunningClient()376 public LongRunningClient longRunningClient() { 377 return longRunningClient; 378 } 379 380 @Override close()381 public final void close() { 382 try { 383 backgroundResources.close(); 384 } catch (RuntimeException e) { 385 throw e; 386 } catch (Exception e) { 387 throw new IllegalStateException("Failed to close resource", e); 388 } 389 } 390 391 @Override shutdown()392 public void shutdown() { 393 backgroundResources.shutdown(); 394 } 395 396 @Override isShutdown()397 public boolean isShutdown() { 398 return backgroundResources.isShutdown(); 399 } 400 401 @Override isTerminated()402 public boolean isTerminated() { 403 return backgroundResources.isTerminated(); 404 } 405 406 @Override shutdownNow()407 public void shutdownNow() { 408 backgroundResources.shutdownNow(); 409 } 410 411 @Override awaitTermination(long duration, TimeUnit unit)412 public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { 413 return backgroundResources.awaitTermination(duration, unit); 414 } 415 } 416