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