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