• 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.ReservationsClient.AggregatedListPagedResponse;
20 import static com.google.cloud.compute.v1.ReservationsClient.ListPagedResponse;
21 
22 import com.google.api.core.BetaApi;
23 import com.google.api.core.InternalApi;
24 import com.google.api.gax.core.BackgroundResource;
25 import com.google.api.gax.core.BackgroundResourceAggregation;
26 import com.google.api.gax.httpjson.ApiMethodDescriptor;
27 import com.google.api.gax.httpjson.HttpJsonCallSettings;
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.OperationCallable;
35 import com.google.api.gax.rpc.UnaryCallable;
36 import com.google.cloud.compute.v1.AggregatedListReservationsRequest;
37 import com.google.cloud.compute.v1.DeleteReservationRequest;
38 import com.google.cloud.compute.v1.GetIamPolicyReservationRequest;
39 import com.google.cloud.compute.v1.GetReservationRequest;
40 import com.google.cloud.compute.v1.InsertReservationRequest;
41 import com.google.cloud.compute.v1.ListReservationsRequest;
42 import com.google.cloud.compute.v1.Operation;
43 import com.google.cloud.compute.v1.Operation.Status;
44 import com.google.cloud.compute.v1.Policy;
45 import com.google.cloud.compute.v1.Reservation;
46 import com.google.cloud.compute.v1.ReservationAggregatedList;
47 import com.google.cloud.compute.v1.ReservationList;
48 import com.google.cloud.compute.v1.ResizeReservationRequest;
49 import com.google.cloud.compute.v1.SetIamPolicyReservationRequest;
50 import com.google.cloud.compute.v1.TestIamPermissionsReservationRequest;
51 import com.google.cloud.compute.v1.TestPermissionsResponse;
52 import com.google.cloud.compute.v1.UpdateReservationRequest;
53 import com.google.protobuf.TypeRegistry;
54 import java.io.IOException;
55 import java.util.ArrayList;
56 import java.util.HashMap;
57 import java.util.List;
58 import java.util.Map;
59 import java.util.concurrent.TimeUnit;
60 import javax.annotation.Generated;
61 
62 // AUTO-GENERATED DOCUMENTATION AND CLASS.
63 /**
64  * REST stub implementation for the Reservations service API.
65  *
66  * <p>This class is for advanced usage and reflects the underlying API directly.
67  */
68 @Generated("by gapic-generator-java")
69 @BetaApi
70 public class HttpJsonReservationsStub extends ReservationsStub {
71   private static final TypeRegistry typeRegistry =
72       TypeRegistry.newBuilder().add(Operation.getDescriptor()).build();
73 
74   private static final ApiMethodDescriptor<
75           AggregatedListReservationsRequest, ReservationAggregatedList>
76       aggregatedListMethodDescriptor =
77           ApiMethodDescriptor
78               .<AggregatedListReservationsRequest, ReservationAggregatedList>newBuilder()
79               .setFullMethodName("google.cloud.compute.v1.Reservations/AggregatedList")
80               .setHttpMethod("GET")
81               .setType(ApiMethodDescriptor.MethodType.UNARY)
82               .setRequestFormatter(
83                   ProtoMessageRequestFormatter.<AggregatedListReservationsRequest>newBuilder()
84                       .setPath(
85                           "/compute/v1/projects/{project}/aggregated/reservations",
86                           request -> {
87                             Map<String, String> fields = new HashMap<>();
88                             ProtoRestSerializer<AggregatedListReservationsRequest> serializer =
89                                 ProtoRestSerializer.create();
90                             serializer.putPathParam(fields, "project", request.getProject());
91                             return fields;
92                           })
93                       .setQueryParamsExtractor(
94                           request -> {
95                             Map<String, List<String>> fields = new HashMap<>();
96                             ProtoRestSerializer<AggregatedListReservationsRequest> serializer =
97                                 ProtoRestSerializer.create();
98                             if (request.hasFilter()) {
99                               serializer.putQueryParam(fields, "filter", request.getFilter());
100                             }
101                             if (request.hasIncludeAllScopes()) {
102                               serializer.putQueryParam(
103                                   fields, "includeAllScopes", request.getIncludeAllScopes());
104                             }
105                             if (request.hasMaxResults()) {
106                               serializer.putQueryParam(
107                                   fields, "maxResults", request.getMaxResults());
108                             }
109                             if (request.hasOrderBy()) {
110                               serializer.putQueryParam(fields, "orderBy", request.getOrderBy());
111                             }
112                             if (request.hasPageToken()) {
113                               serializer.putQueryParam(fields, "pageToken", request.getPageToken());
114                             }
115                             if (request.hasReturnPartialSuccess()) {
116                               serializer.putQueryParam(
117                                   fields,
118                                   "returnPartialSuccess",
119                                   request.getReturnPartialSuccess());
120                             }
121                             return fields;
122                           })
123                       .setRequestBodyExtractor(request -> null)
124                       .build())
125               .setResponseParser(
126                   ProtoMessageResponseParser.<ReservationAggregatedList>newBuilder()
127                       .setDefaultInstance(ReservationAggregatedList.getDefaultInstance())
128                       .setDefaultTypeRegistry(typeRegistry)
129                       .build())
130               .build();
131 
132   private static final ApiMethodDescriptor<DeleteReservationRequest, Operation>
133       deleteMethodDescriptor =
134           ApiMethodDescriptor.<DeleteReservationRequest, Operation>newBuilder()
135               .setFullMethodName("google.cloud.compute.v1.Reservations/Delete")
136               .setHttpMethod("DELETE")
137               .setType(ApiMethodDescriptor.MethodType.UNARY)
138               .setRequestFormatter(
139                   ProtoMessageRequestFormatter.<DeleteReservationRequest>newBuilder()
140                       .setPath(
141                           "/compute/v1/projects/{project}/zones/{zone}/reservations/{reservation}",
142                           request -> {
143                             Map<String, String> fields = new HashMap<>();
144                             ProtoRestSerializer<DeleteReservationRequest> serializer =
145                                 ProtoRestSerializer.create();
146                             serializer.putPathParam(fields, "project", request.getProject());
147                             serializer.putPathParam(
148                                 fields, "reservation", request.getReservation());
149                             serializer.putPathParam(fields, "zone", request.getZone());
150                             return fields;
151                           })
152                       .setQueryParamsExtractor(
153                           request -> {
154                             Map<String, List<String>> fields = new HashMap<>();
155                             ProtoRestSerializer<DeleteReservationRequest> serializer =
156                                 ProtoRestSerializer.create();
157                             if (request.hasRequestId()) {
158                               serializer.putQueryParam(fields, "requestId", request.getRequestId());
159                             }
160                             return fields;
161                           })
162                       .setRequestBodyExtractor(request -> null)
163                       .build())
164               .setResponseParser(
165                   ProtoMessageResponseParser.<Operation>newBuilder()
166                       .setDefaultInstance(Operation.getDefaultInstance())
167                       .setDefaultTypeRegistry(typeRegistry)
168                       .build())
169               .setOperationSnapshotFactory(
170                   (DeleteReservationRequest request, Operation response) -> {
171                     StringBuilder opName = new StringBuilder(response.getName());
172                     opName.append(":").append(request.getProject());
173                     opName.append(":").append(request.getZone());
174                     return HttpJsonOperationSnapshot.newBuilder()
175                         .setName(opName.toString())
176                         .setMetadata(response)
177                         .setDone(Status.DONE.equals(response.getStatus()))
178                         .setResponse(response)
179                         .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage())
180                         .build();
181                   })
182               .build();
183 
184   private static final ApiMethodDescriptor<GetReservationRequest, Reservation> getMethodDescriptor =
185       ApiMethodDescriptor.<GetReservationRequest, Reservation>newBuilder()
186           .setFullMethodName("google.cloud.compute.v1.Reservations/Get")
187           .setHttpMethod("GET")
188           .setType(ApiMethodDescriptor.MethodType.UNARY)
189           .setRequestFormatter(
190               ProtoMessageRequestFormatter.<GetReservationRequest>newBuilder()
191                   .setPath(
192                       "/compute/v1/projects/{project}/zones/{zone}/reservations/{reservation}",
193                       request -> {
194                         Map<String, String> fields = new HashMap<>();
195                         ProtoRestSerializer<GetReservationRequest> serializer =
196                             ProtoRestSerializer.create();
197                         serializer.putPathParam(fields, "project", request.getProject());
198                         serializer.putPathParam(fields, "reservation", request.getReservation());
199                         serializer.putPathParam(fields, "zone", request.getZone());
200                         return fields;
201                       })
202                   .setQueryParamsExtractor(
203                       request -> {
204                         Map<String, List<String>> fields = new HashMap<>();
205                         ProtoRestSerializer<GetReservationRequest> serializer =
206                             ProtoRestSerializer.create();
207                         return fields;
208                       })
209                   .setRequestBodyExtractor(request -> null)
210                   .build())
211           .setResponseParser(
212               ProtoMessageResponseParser.<Reservation>newBuilder()
213                   .setDefaultInstance(Reservation.getDefaultInstance())
214                   .setDefaultTypeRegistry(typeRegistry)
215                   .build())
216           .build();
217 
218   private static final ApiMethodDescriptor<GetIamPolicyReservationRequest, Policy>
219       getIamPolicyMethodDescriptor =
220           ApiMethodDescriptor.<GetIamPolicyReservationRequest, Policy>newBuilder()
221               .setFullMethodName("google.cloud.compute.v1.Reservations/GetIamPolicy")
222               .setHttpMethod("GET")
223               .setType(ApiMethodDescriptor.MethodType.UNARY)
224               .setRequestFormatter(
225                   ProtoMessageRequestFormatter.<GetIamPolicyReservationRequest>newBuilder()
226                       .setPath(
227                           "/compute/v1/projects/{project}/zones/{zone}/reservations/{resource}/getIamPolicy",
228                           request -> {
229                             Map<String, String> fields = new HashMap<>();
230                             ProtoRestSerializer<GetIamPolicyReservationRequest> serializer =
231                                 ProtoRestSerializer.create();
232                             serializer.putPathParam(fields, "project", request.getProject());
233                             serializer.putPathParam(fields, "resource", request.getResource());
234                             serializer.putPathParam(fields, "zone", request.getZone());
235                             return fields;
236                           })
237                       .setQueryParamsExtractor(
238                           request -> {
239                             Map<String, List<String>> fields = new HashMap<>();
240                             ProtoRestSerializer<GetIamPolicyReservationRequest> serializer =
241                                 ProtoRestSerializer.create();
242                             if (request.hasOptionsRequestedPolicyVersion()) {
243                               serializer.putQueryParam(
244                                   fields,
245                                   "optionsRequestedPolicyVersion",
246                                   request.getOptionsRequestedPolicyVersion());
247                             }
248                             return fields;
249                           })
250                       .setRequestBodyExtractor(request -> null)
251                       .build())
252               .setResponseParser(
253                   ProtoMessageResponseParser.<Policy>newBuilder()
254                       .setDefaultInstance(Policy.getDefaultInstance())
255                       .setDefaultTypeRegistry(typeRegistry)
256                       .build())
257               .build();
258 
259   private static final ApiMethodDescriptor<InsertReservationRequest, Operation>
260       insertMethodDescriptor =
261           ApiMethodDescriptor.<InsertReservationRequest, Operation>newBuilder()
262               .setFullMethodName("google.cloud.compute.v1.Reservations/Insert")
263               .setHttpMethod("POST")
264               .setType(ApiMethodDescriptor.MethodType.UNARY)
265               .setRequestFormatter(
266                   ProtoMessageRequestFormatter.<InsertReservationRequest>newBuilder()
267                       .setPath(
268                           "/compute/v1/projects/{project}/zones/{zone}/reservations",
269                           request -> {
270                             Map<String, String> fields = new HashMap<>();
271                             ProtoRestSerializer<InsertReservationRequest> serializer =
272                                 ProtoRestSerializer.create();
273                             serializer.putPathParam(fields, "project", request.getProject());
274                             serializer.putPathParam(fields, "zone", request.getZone());
275                             return fields;
276                           })
277                       .setQueryParamsExtractor(
278                           request -> {
279                             Map<String, List<String>> fields = new HashMap<>();
280                             ProtoRestSerializer<InsertReservationRequest> serializer =
281                                 ProtoRestSerializer.create();
282                             if (request.hasRequestId()) {
283                               serializer.putQueryParam(fields, "requestId", request.getRequestId());
284                             }
285                             return fields;
286                           })
287                       .setRequestBodyExtractor(
288                           request ->
289                               ProtoRestSerializer.create()
290                                   .toBody(
291                                       "reservationResource",
292                                       request.getReservationResource(),
293                                       false))
294                       .build())
295               .setResponseParser(
296                   ProtoMessageResponseParser.<Operation>newBuilder()
297                       .setDefaultInstance(Operation.getDefaultInstance())
298                       .setDefaultTypeRegistry(typeRegistry)
299                       .build())
300               .setOperationSnapshotFactory(
301                   (InsertReservationRequest request, Operation response) -> {
302                     StringBuilder opName = new StringBuilder(response.getName());
303                     opName.append(":").append(request.getProject());
304                     opName.append(":").append(request.getZone());
305                     return HttpJsonOperationSnapshot.newBuilder()
306                         .setName(opName.toString())
307                         .setMetadata(response)
308                         .setDone(Status.DONE.equals(response.getStatus()))
309                         .setResponse(response)
310                         .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage())
311                         .build();
312                   })
313               .build();
314 
315   private static final ApiMethodDescriptor<ListReservationsRequest, ReservationList>
316       listMethodDescriptor =
317           ApiMethodDescriptor.<ListReservationsRequest, ReservationList>newBuilder()
318               .setFullMethodName("google.cloud.compute.v1.Reservations/List")
319               .setHttpMethod("GET")
320               .setType(ApiMethodDescriptor.MethodType.UNARY)
321               .setRequestFormatter(
322                   ProtoMessageRequestFormatter.<ListReservationsRequest>newBuilder()
323                       .setPath(
324                           "/compute/v1/projects/{project}/zones/{zone}/reservations",
325                           request -> {
326                             Map<String, String> fields = new HashMap<>();
327                             ProtoRestSerializer<ListReservationsRequest> serializer =
328                                 ProtoRestSerializer.create();
329                             serializer.putPathParam(fields, "project", request.getProject());
330                             serializer.putPathParam(fields, "zone", request.getZone());
331                             return fields;
332                           })
333                       .setQueryParamsExtractor(
334                           request -> {
335                             Map<String, List<String>> fields = new HashMap<>();
336                             ProtoRestSerializer<ListReservationsRequest> serializer =
337                                 ProtoRestSerializer.create();
338                             if (request.hasFilter()) {
339                               serializer.putQueryParam(fields, "filter", request.getFilter());
340                             }
341                             if (request.hasMaxResults()) {
342                               serializer.putQueryParam(
343                                   fields, "maxResults", request.getMaxResults());
344                             }
345                             if (request.hasOrderBy()) {
346                               serializer.putQueryParam(fields, "orderBy", request.getOrderBy());
347                             }
348                             if (request.hasPageToken()) {
349                               serializer.putQueryParam(fields, "pageToken", request.getPageToken());
350                             }
351                             if (request.hasReturnPartialSuccess()) {
352                               serializer.putQueryParam(
353                                   fields,
354                                   "returnPartialSuccess",
355                                   request.getReturnPartialSuccess());
356                             }
357                             return fields;
358                           })
359                       .setRequestBodyExtractor(request -> null)
360                       .build())
361               .setResponseParser(
362                   ProtoMessageResponseParser.<ReservationList>newBuilder()
363                       .setDefaultInstance(ReservationList.getDefaultInstance())
364                       .setDefaultTypeRegistry(typeRegistry)
365                       .build())
366               .build();
367 
368   private static final ApiMethodDescriptor<ResizeReservationRequest, Operation>
369       resizeMethodDescriptor =
370           ApiMethodDescriptor.<ResizeReservationRequest, Operation>newBuilder()
371               .setFullMethodName("google.cloud.compute.v1.Reservations/Resize")
372               .setHttpMethod("POST")
373               .setType(ApiMethodDescriptor.MethodType.UNARY)
374               .setRequestFormatter(
375                   ProtoMessageRequestFormatter.<ResizeReservationRequest>newBuilder()
376                       .setPath(
377                           "/compute/v1/projects/{project}/zones/{zone}/reservations/{reservation}/resize",
378                           request -> {
379                             Map<String, String> fields = new HashMap<>();
380                             ProtoRestSerializer<ResizeReservationRequest> serializer =
381                                 ProtoRestSerializer.create();
382                             serializer.putPathParam(fields, "project", request.getProject());
383                             serializer.putPathParam(
384                                 fields, "reservation", request.getReservation());
385                             serializer.putPathParam(fields, "zone", request.getZone());
386                             return fields;
387                           })
388                       .setQueryParamsExtractor(
389                           request -> {
390                             Map<String, List<String>> fields = new HashMap<>();
391                             ProtoRestSerializer<ResizeReservationRequest> serializer =
392                                 ProtoRestSerializer.create();
393                             if (request.hasRequestId()) {
394                               serializer.putQueryParam(fields, "requestId", request.getRequestId());
395                             }
396                             return fields;
397                           })
398                       .setRequestBodyExtractor(
399                           request ->
400                               ProtoRestSerializer.create()
401                                   .toBody(
402                                       "reservationsResizeRequestResource",
403                                       request.getReservationsResizeRequestResource(),
404                                       false))
405                       .build())
406               .setResponseParser(
407                   ProtoMessageResponseParser.<Operation>newBuilder()
408                       .setDefaultInstance(Operation.getDefaultInstance())
409                       .setDefaultTypeRegistry(typeRegistry)
410                       .build())
411               .setOperationSnapshotFactory(
412                   (ResizeReservationRequest request, Operation response) -> {
413                     StringBuilder opName = new StringBuilder(response.getName());
414                     opName.append(":").append(request.getProject());
415                     opName.append(":").append(request.getZone());
416                     return HttpJsonOperationSnapshot.newBuilder()
417                         .setName(opName.toString())
418                         .setMetadata(response)
419                         .setDone(Status.DONE.equals(response.getStatus()))
420                         .setResponse(response)
421                         .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage())
422                         .build();
423                   })
424               .build();
425 
426   private static final ApiMethodDescriptor<SetIamPolicyReservationRequest, Policy>
427       setIamPolicyMethodDescriptor =
428           ApiMethodDescriptor.<SetIamPolicyReservationRequest, Policy>newBuilder()
429               .setFullMethodName("google.cloud.compute.v1.Reservations/SetIamPolicy")
430               .setHttpMethod("POST")
431               .setType(ApiMethodDescriptor.MethodType.UNARY)
432               .setRequestFormatter(
433                   ProtoMessageRequestFormatter.<SetIamPolicyReservationRequest>newBuilder()
434                       .setPath(
435                           "/compute/v1/projects/{project}/zones/{zone}/reservations/{resource}/setIamPolicy",
436                           request -> {
437                             Map<String, String> fields = new HashMap<>();
438                             ProtoRestSerializer<SetIamPolicyReservationRequest> serializer =
439                                 ProtoRestSerializer.create();
440                             serializer.putPathParam(fields, "project", request.getProject());
441                             serializer.putPathParam(fields, "resource", request.getResource());
442                             serializer.putPathParam(fields, "zone", request.getZone());
443                             return fields;
444                           })
445                       .setQueryParamsExtractor(
446                           request -> {
447                             Map<String, List<String>> fields = new HashMap<>();
448                             ProtoRestSerializer<SetIamPolicyReservationRequest> serializer =
449                                 ProtoRestSerializer.create();
450                             return fields;
451                           })
452                       .setRequestBodyExtractor(
453                           request ->
454                               ProtoRestSerializer.create()
455                                   .toBody(
456                                       "zoneSetPolicyRequestResource",
457                                       request.getZoneSetPolicyRequestResource(),
458                                       false))
459                       .build())
460               .setResponseParser(
461                   ProtoMessageResponseParser.<Policy>newBuilder()
462                       .setDefaultInstance(Policy.getDefaultInstance())
463                       .setDefaultTypeRegistry(typeRegistry)
464                       .build())
465               .build();
466 
467   private static final ApiMethodDescriptor<
468           TestIamPermissionsReservationRequest, TestPermissionsResponse>
469       testIamPermissionsMethodDescriptor =
470           ApiMethodDescriptor
471               .<TestIamPermissionsReservationRequest, TestPermissionsResponse>newBuilder()
472               .setFullMethodName("google.cloud.compute.v1.Reservations/TestIamPermissions")
473               .setHttpMethod("POST")
474               .setType(ApiMethodDescriptor.MethodType.UNARY)
475               .setRequestFormatter(
476                   ProtoMessageRequestFormatter.<TestIamPermissionsReservationRequest>newBuilder()
477                       .setPath(
478                           "/compute/v1/projects/{project}/zones/{zone}/reservations/{resource}/testIamPermissions",
479                           request -> {
480                             Map<String, String> fields = new HashMap<>();
481                             ProtoRestSerializer<TestIamPermissionsReservationRequest> serializer =
482                                 ProtoRestSerializer.create();
483                             serializer.putPathParam(fields, "project", request.getProject());
484                             serializer.putPathParam(fields, "resource", request.getResource());
485                             serializer.putPathParam(fields, "zone", request.getZone());
486                             return fields;
487                           })
488                       .setQueryParamsExtractor(
489                           request -> {
490                             Map<String, List<String>> fields = new HashMap<>();
491                             ProtoRestSerializer<TestIamPermissionsReservationRequest> serializer =
492                                 ProtoRestSerializer.create();
493                             return fields;
494                           })
495                       .setRequestBodyExtractor(
496                           request ->
497                               ProtoRestSerializer.create()
498                                   .toBody(
499                                       "testPermissionsRequestResource",
500                                       request.getTestPermissionsRequestResource(),
501                                       false))
502                       .build())
503               .setResponseParser(
504                   ProtoMessageResponseParser.<TestPermissionsResponse>newBuilder()
505                       .setDefaultInstance(TestPermissionsResponse.getDefaultInstance())
506                       .setDefaultTypeRegistry(typeRegistry)
507                       .build())
508               .build();
509 
510   private static final ApiMethodDescriptor<UpdateReservationRequest, Operation>
511       updateMethodDescriptor =
512           ApiMethodDescriptor.<UpdateReservationRequest, Operation>newBuilder()
513               .setFullMethodName("google.cloud.compute.v1.Reservations/Update")
514               .setHttpMethod("PATCH")
515               .setType(ApiMethodDescriptor.MethodType.UNARY)
516               .setRequestFormatter(
517                   ProtoMessageRequestFormatter.<UpdateReservationRequest>newBuilder()
518                       .setPath(
519                           "/compute/v1/projects/{project}/zones/{zone}/reservations/{reservation}",
520                           request -> {
521                             Map<String, String> fields = new HashMap<>();
522                             ProtoRestSerializer<UpdateReservationRequest> serializer =
523                                 ProtoRestSerializer.create();
524                             serializer.putPathParam(fields, "project", request.getProject());
525                             serializer.putPathParam(
526                                 fields, "reservation", request.getReservation());
527                             serializer.putPathParam(fields, "zone", request.getZone());
528                             return fields;
529                           })
530                       .setQueryParamsExtractor(
531                           request -> {
532                             Map<String, List<String>> fields = new HashMap<>();
533                             ProtoRestSerializer<UpdateReservationRequest> serializer =
534                                 ProtoRestSerializer.create();
535                             if (request.hasPaths()) {
536                               serializer.putQueryParam(fields, "paths", request.getPaths());
537                             }
538                             if (request.hasRequestId()) {
539                               serializer.putQueryParam(fields, "requestId", request.getRequestId());
540                             }
541                             if (request.hasUpdateMask()) {
542                               serializer.putQueryParam(
543                                   fields, "updateMask", request.getUpdateMask());
544                             }
545                             return fields;
546                           })
547                       .setRequestBodyExtractor(
548                           request ->
549                               ProtoRestSerializer.create()
550                                   .toBody(
551                                       "reservationResource",
552                                       request.getReservationResource(),
553                                       false))
554                       .build())
555               .setResponseParser(
556                   ProtoMessageResponseParser.<Operation>newBuilder()
557                       .setDefaultInstance(Operation.getDefaultInstance())
558                       .setDefaultTypeRegistry(typeRegistry)
559                       .build())
560               .setOperationSnapshotFactory(
561                   (UpdateReservationRequest request, Operation response) -> {
562                     StringBuilder opName = new StringBuilder(response.getName());
563                     opName.append(":").append(request.getProject());
564                     opName.append(":").append(request.getZone());
565                     return HttpJsonOperationSnapshot.newBuilder()
566                         .setName(opName.toString())
567                         .setMetadata(response)
568                         .setDone(Status.DONE.equals(response.getStatus()))
569                         .setResponse(response)
570                         .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage())
571                         .build();
572                   })
573               .build();
574 
575   private final UnaryCallable<AggregatedListReservationsRequest, ReservationAggregatedList>
576       aggregatedListCallable;
577   private final UnaryCallable<AggregatedListReservationsRequest, AggregatedListPagedResponse>
578       aggregatedListPagedCallable;
579   private final UnaryCallable<DeleteReservationRequest, Operation> deleteCallable;
580   private final OperationCallable<DeleteReservationRequest, Operation, Operation>
581       deleteOperationCallable;
582   private final UnaryCallable<GetReservationRequest, Reservation> getCallable;
583   private final UnaryCallable<GetIamPolicyReservationRequest, Policy> getIamPolicyCallable;
584   private final UnaryCallable<InsertReservationRequest, Operation> insertCallable;
585   private final OperationCallable<InsertReservationRequest, Operation, Operation>
586       insertOperationCallable;
587   private final UnaryCallable<ListReservationsRequest, ReservationList> listCallable;
588   private final UnaryCallable<ListReservationsRequest, ListPagedResponse> listPagedCallable;
589   private final UnaryCallable<ResizeReservationRequest, Operation> resizeCallable;
590   private final OperationCallable<ResizeReservationRequest, Operation, Operation>
591       resizeOperationCallable;
592   private final UnaryCallable<SetIamPolicyReservationRequest, Policy> setIamPolicyCallable;
593   private final UnaryCallable<TestIamPermissionsReservationRequest, TestPermissionsResponse>
594       testIamPermissionsCallable;
595   private final UnaryCallable<UpdateReservationRequest, Operation> updateCallable;
596   private final OperationCallable<UpdateReservationRequest, Operation, Operation>
597       updateOperationCallable;
598 
599   private final BackgroundResource backgroundResources;
600   private final HttpJsonZoneOperationsStub httpJsonOperationsStub;
601   private final HttpJsonStubCallableFactory callableFactory;
602 
create(ReservationsStubSettings settings)603   public static final HttpJsonReservationsStub create(ReservationsStubSettings settings)
604       throws IOException {
605     return new HttpJsonReservationsStub(settings, ClientContext.create(settings));
606   }
607 
create(ClientContext clientContext)608   public static final HttpJsonReservationsStub create(ClientContext clientContext)
609       throws IOException {
610     return new HttpJsonReservationsStub(
611         ReservationsStubSettings.newBuilder().build(), clientContext);
612   }
613 
create( ClientContext clientContext, HttpJsonStubCallableFactory callableFactory)614   public static final HttpJsonReservationsStub create(
615       ClientContext clientContext, HttpJsonStubCallableFactory callableFactory) throws IOException {
616     return new HttpJsonReservationsStub(
617         ReservationsStubSettings.newBuilder().build(), clientContext, callableFactory);
618   }
619 
620   /**
621    * Constructs an instance of HttpJsonReservationsStub, using the given settings. This is protected
622    * so that it is easy to make a subclass, but otherwise, the static factory methods should be
623    * preferred.
624    */
HttpJsonReservationsStub(ReservationsStubSettings settings, ClientContext clientContext)625   protected HttpJsonReservationsStub(ReservationsStubSettings settings, ClientContext clientContext)
626       throws IOException {
627     this(settings, clientContext, new HttpJsonReservationsCallableFactory());
628   }
629 
630   /**
631    * Constructs an instance of HttpJsonReservationsStub, using the given settings. This is protected
632    * so that it is easy to make a subclass, but otherwise, the static factory methods should be
633    * preferred.
634    */
HttpJsonReservationsStub( ReservationsStubSettings settings, ClientContext clientContext, HttpJsonStubCallableFactory callableFactory)635   protected HttpJsonReservationsStub(
636       ReservationsStubSettings settings,
637       ClientContext clientContext,
638       HttpJsonStubCallableFactory callableFactory)
639       throws IOException {
640     this.callableFactory = callableFactory;
641     this.httpJsonOperationsStub = HttpJsonZoneOperationsStub.create(clientContext, callableFactory);
642 
643     HttpJsonCallSettings<AggregatedListReservationsRequest, ReservationAggregatedList>
644         aggregatedListTransportSettings =
645             HttpJsonCallSettings
646                 .<AggregatedListReservationsRequest, ReservationAggregatedList>newBuilder()
647                 .setMethodDescriptor(aggregatedListMethodDescriptor)
648                 .setTypeRegistry(typeRegistry)
649                 .build();
650     HttpJsonCallSettings<DeleteReservationRequest, Operation> deleteTransportSettings =
651         HttpJsonCallSettings.<DeleteReservationRequest, Operation>newBuilder()
652             .setMethodDescriptor(deleteMethodDescriptor)
653             .setTypeRegistry(typeRegistry)
654             .build();
655     HttpJsonCallSettings<GetReservationRequest, Reservation> getTransportSettings =
656         HttpJsonCallSettings.<GetReservationRequest, Reservation>newBuilder()
657             .setMethodDescriptor(getMethodDescriptor)
658             .setTypeRegistry(typeRegistry)
659             .build();
660     HttpJsonCallSettings<GetIamPolicyReservationRequest, Policy> getIamPolicyTransportSettings =
661         HttpJsonCallSettings.<GetIamPolicyReservationRequest, Policy>newBuilder()
662             .setMethodDescriptor(getIamPolicyMethodDescriptor)
663             .setTypeRegistry(typeRegistry)
664             .build();
665     HttpJsonCallSettings<InsertReservationRequest, Operation> insertTransportSettings =
666         HttpJsonCallSettings.<InsertReservationRequest, Operation>newBuilder()
667             .setMethodDescriptor(insertMethodDescriptor)
668             .setTypeRegistry(typeRegistry)
669             .build();
670     HttpJsonCallSettings<ListReservationsRequest, ReservationList> listTransportSettings =
671         HttpJsonCallSettings.<ListReservationsRequest, ReservationList>newBuilder()
672             .setMethodDescriptor(listMethodDescriptor)
673             .setTypeRegistry(typeRegistry)
674             .build();
675     HttpJsonCallSettings<ResizeReservationRequest, Operation> resizeTransportSettings =
676         HttpJsonCallSettings.<ResizeReservationRequest, Operation>newBuilder()
677             .setMethodDescriptor(resizeMethodDescriptor)
678             .setTypeRegistry(typeRegistry)
679             .build();
680     HttpJsonCallSettings<SetIamPolicyReservationRequest, Policy> setIamPolicyTransportSettings =
681         HttpJsonCallSettings.<SetIamPolicyReservationRequest, Policy>newBuilder()
682             .setMethodDescriptor(setIamPolicyMethodDescriptor)
683             .setTypeRegistry(typeRegistry)
684             .build();
685     HttpJsonCallSettings<TestIamPermissionsReservationRequest, TestPermissionsResponse>
686         testIamPermissionsTransportSettings =
687             HttpJsonCallSettings
688                 .<TestIamPermissionsReservationRequest, TestPermissionsResponse>newBuilder()
689                 .setMethodDescriptor(testIamPermissionsMethodDescriptor)
690                 .setTypeRegistry(typeRegistry)
691                 .build();
692     HttpJsonCallSettings<UpdateReservationRequest, Operation> updateTransportSettings =
693         HttpJsonCallSettings.<UpdateReservationRequest, Operation>newBuilder()
694             .setMethodDescriptor(updateMethodDescriptor)
695             .setTypeRegistry(typeRegistry)
696             .build();
697 
698     this.aggregatedListCallable =
699         callableFactory.createUnaryCallable(
700             aggregatedListTransportSettings, settings.aggregatedListSettings(), clientContext);
701     this.aggregatedListPagedCallable =
702         callableFactory.createPagedCallable(
703             aggregatedListTransportSettings, settings.aggregatedListSettings(), clientContext);
704     this.deleteCallable =
705         callableFactory.createUnaryCallable(
706             deleteTransportSettings, settings.deleteSettings(), clientContext);
707     this.deleteOperationCallable =
708         callableFactory.createOperationCallable(
709             deleteTransportSettings,
710             settings.deleteOperationSettings(),
711             clientContext,
712             httpJsonOperationsStub);
713     this.getCallable =
714         callableFactory.createUnaryCallable(
715             getTransportSettings, settings.getSettings(), clientContext);
716     this.getIamPolicyCallable =
717         callableFactory.createUnaryCallable(
718             getIamPolicyTransportSettings, settings.getIamPolicySettings(), clientContext);
719     this.insertCallable =
720         callableFactory.createUnaryCallable(
721             insertTransportSettings, settings.insertSettings(), clientContext);
722     this.insertOperationCallable =
723         callableFactory.createOperationCallable(
724             insertTransportSettings,
725             settings.insertOperationSettings(),
726             clientContext,
727             httpJsonOperationsStub);
728     this.listCallable =
729         callableFactory.createUnaryCallable(
730             listTransportSettings, settings.listSettings(), clientContext);
731     this.listPagedCallable =
732         callableFactory.createPagedCallable(
733             listTransportSettings, settings.listSettings(), clientContext);
734     this.resizeCallable =
735         callableFactory.createUnaryCallable(
736             resizeTransportSettings, settings.resizeSettings(), clientContext);
737     this.resizeOperationCallable =
738         callableFactory.createOperationCallable(
739             resizeTransportSettings,
740             settings.resizeOperationSettings(),
741             clientContext,
742             httpJsonOperationsStub);
743     this.setIamPolicyCallable =
744         callableFactory.createUnaryCallable(
745             setIamPolicyTransportSettings, settings.setIamPolicySettings(), clientContext);
746     this.testIamPermissionsCallable =
747         callableFactory.createUnaryCallable(
748             testIamPermissionsTransportSettings,
749             settings.testIamPermissionsSettings(),
750             clientContext);
751     this.updateCallable =
752         callableFactory.createUnaryCallable(
753             updateTransportSettings, settings.updateSettings(), clientContext);
754     this.updateOperationCallable =
755         callableFactory.createOperationCallable(
756             updateTransportSettings,
757             settings.updateOperationSettings(),
758             clientContext,
759             httpJsonOperationsStub);
760 
761     this.backgroundResources =
762         new BackgroundResourceAggregation(clientContext.getBackgroundResources());
763   }
764 
765   @InternalApi
getMethodDescriptors()766   public static List<ApiMethodDescriptor> getMethodDescriptors() {
767     List<ApiMethodDescriptor> methodDescriptors = new ArrayList<>();
768     methodDescriptors.add(aggregatedListMethodDescriptor);
769     methodDescriptors.add(deleteMethodDescriptor);
770     methodDescriptors.add(getMethodDescriptor);
771     methodDescriptors.add(getIamPolicyMethodDescriptor);
772     methodDescriptors.add(insertMethodDescriptor);
773     methodDescriptors.add(listMethodDescriptor);
774     methodDescriptors.add(resizeMethodDescriptor);
775     methodDescriptors.add(setIamPolicyMethodDescriptor);
776     methodDescriptors.add(testIamPermissionsMethodDescriptor);
777     methodDescriptors.add(updateMethodDescriptor);
778     return methodDescriptors;
779   }
780 
781   @Override
782   public UnaryCallable<AggregatedListReservationsRequest, ReservationAggregatedList>
aggregatedListCallable()783       aggregatedListCallable() {
784     return aggregatedListCallable;
785   }
786 
787   @Override
788   public UnaryCallable<AggregatedListReservationsRequest, AggregatedListPagedResponse>
aggregatedListPagedCallable()789       aggregatedListPagedCallable() {
790     return aggregatedListPagedCallable;
791   }
792 
793   @Override
deleteCallable()794   public UnaryCallable<DeleteReservationRequest, Operation> deleteCallable() {
795     return deleteCallable;
796   }
797 
798   @Override
799   public OperationCallable<DeleteReservationRequest, Operation, Operation>
deleteOperationCallable()800       deleteOperationCallable() {
801     return deleteOperationCallable;
802   }
803 
804   @Override
getCallable()805   public UnaryCallable<GetReservationRequest, Reservation> getCallable() {
806     return getCallable;
807   }
808 
809   @Override
getIamPolicyCallable()810   public UnaryCallable<GetIamPolicyReservationRequest, Policy> getIamPolicyCallable() {
811     return getIamPolicyCallable;
812   }
813 
814   @Override
insertCallable()815   public UnaryCallable<InsertReservationRequest, Operation> insertCallable() {
816     return insertCallable;
817   }
818 
819   @Override
820   public OperationCallable<InsertReservationRequest, Operation, Operation>
insertOperationCallable()821       insertOperationCallable() {
822     return insertOperationCallable;
823   }
824 
825   @Override
listCallable()826   public UnaryCallable<ListReservationsRequest, ReservationList> listCallable() {
827     return listCallable;
828   }
829 
830   @Override
listPagedCallable()831   public UnaryCallable<ListReservationsRequest, ListPagedResponse> listPagedCallable() {
832     return listPagedCallable;
833   }
834 
835   @Override
resizeCallable()836   public UnaryCallable<ResizeReservationRequest, Operation> resizeCallable() {
837     return resizeCallable;
838   }
839 
840   @Override
841   public OperationCallable<ResizeReservationRequest, Operation, Operation>
resizeOperationCallable()842       resizeOperationCallable() {
843     return resizeOperationCallable;
844   }
845 
846   @Override
setIamPolicyCallable()847   public UnaryCallable<SetIamPolicyReservationRequest, Policy> setIamPolicyCallable() {
848     return setIamPolicyCallable;
849   }
850 
851   @Override
852   public UnaryCallable<TestIamPermissionsReservationRequest, TestPermissionsResponse>
testIamPermissionsCallable()853       testIamPermissionsCallable() {
854     return testIamPermissionsCallable;
855   }
856 
857   @Override
updateCallable()858   public UnaryCallable<UpdateReservationRequest, Operation> updateCallable() {
859     return updateCallable;
860   }
861 
862   @Override
863   public OperationCallable<UpdateReservationRequest, Operation, Operation>
updateOperationCallable()864       updateOperationCallable() {
865     return updateOperationCallable;
866   }
867 
868   @Override
close()869   public final void close() {
870     try {
871       backgroundResources.close();
872     } catch (RuntimeException e) {
873       throw e;
874     } catch (Exception e) {
875       throw new IllegalStateException("Failed to close resource", e);
876     }
877   }
878 
879   @Override
shutdown()880   public void shutdown() {
881     backgroundResources.shutdown();
882   }
883 
884   @Override
isShutdown()885   public boolean isShutdown() {
886     return backgroundResources.isShutdown();
887   }
888 
889   @Override
isTerminated()890   public boolean isTerminated() {
891     return backgroundResources.isTerminated();
892   }
893 
894   @Override
shutdownNow()895   public void shutdownNow() {
896     backgroundResources.shutdownNow();
897   }
898 
899   @Override
awaitTermination(long duration, TimeUnit unit)900   public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException {
901     return backgroundResources.awaitTermination(duration, unit);
902   }
903 }
904