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