• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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