• 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.SnapshotsClient.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.DeleteSnapshotRequest;
36 import com.google.cloud.compute.v1.GetIamPolicySnapshotRequest;
37 import com.google.cloud.compute.v1.GetSnapshotRequest;
38 import com.google.cloud.compute.v1.InsertSnapshotRequest;
39 import com.google.cloud.compute.v1.ListSnapshotsRequest;
40 import com.google.cloud.compute.v1.Operation;
41 import com.google.cloud.compute.v1.Operation.Status;
42 import com.google.cloud.compute.v1.Policy;
43 import com.google.cloud.compute.v1.SetIamPolicySnapshotRequest;
44 import com.google.cloud.compute.v1.SetLabelsSnapshotRequest;
45 import com.google.cloud.compute.v1.Snapshot;
46 import com.google.cloud.compute.v1.SnapshotList;
47 import com.google.cloud.compute.v1.TestIamPermissionsSnapshotRequest;
48 import com.google.cloud.compute.v1.TestPermissionsResponse;
49 import com.google.protobuf.TypeRegistry;
50 import java.io.IOException;
51 import java.util.ArrayList;
52 import java.util.HashMap;
53 import java.util.List;
54 import java.util.Map;
55 import java.util.concurrent.TimeUnit;
56 import javax.annotation.Generated;
57 
58 // AUTO-GENERATED DOCUMENTATION AND CLASS.
59 /**
60  * REST stub implementation for the Snapshots service API.
61  *
62  * <p>This class is for advanced usage and reflects the underlying API directly.
63  */
64 @Generated("by gapic-generator-java")
65 @BetaApi
66 public class HttpJsonSnapshotsStub extends SnapshotsStub {
67   private static final TypeRegistry typeRegistry =
68       TypeRegistry.newBuilder().add(Operation.getDescriptor()).build();
69 
70   private static final ApiMethodDescriptor<DeleteSnapshotRequest, Operation>
71       deleteMethodDescriptor =
72           ApiMethodDescriptor.<DeleteSnapshotRequest, Operation>newBuilder()
73               .setFullMethodName("google.cloud.compute.v1.Snapshots/Delete")
74               .setHttpMethod("DELETE")
75               .setType(ApiMethodDescriptor.MethodType.UNARY)
76               .setRequestFormatter(
77                   ProtoMessageRequestFormatter.<DeleteSnapshotRequest>newBuilder()
78                       .setPath(
79                           "/compute/v1/projects/{project}/global/snapshots/{snapshot}",
80                           request -> {
81                             Map<String, String> fields = new HashMap<>();
82                             ProtoRestSerializer<DeleteSnapshotRequest> serializer =
83                                 ProtoRestSerializer.create();
84                             serializer.putPathParam(fields, "project", request.getProject());
85                             serializer.putPathParam(fields, "snapshot", request.getSnapshot());
86                             return fields;
87                           })
88                       .setQueryParamsExtractor(
89                           request -> {
90                             Map<String, List<String>> fields = new HashMap<>();
91                             ProtoRestSerializer<DeleteSnapshotRequest> serializer =
92                                 ProtoRestSerializer.create();
93                             if (request.hasRequestId()) {
94                               serializer.putQueryParam(fields, "requestId", request.getRequestId());
95                             }
96                             return fields;
97                           })
98                       .setRequestBodyExtractor(request -> null)
99                       .build())
100               .setResponseParser(
101                   ProtoMessageResponseParser.<Operation>newBuilder()
102                       .setDefaultInstance(Operation.getDefaultInstance())
103                       .setDefaultTypeRegistry(typeRegistry)
104                       .build())
105               .setOperationSnapshotFactory(
106                   (DeleteSnapshotRequest request, Operation response) -> {
107                     StringBuilder opName = new StringBuilder(response.getName());
108                     opName.append(":").append(request.getProject());
109                     return HttpJsonOperationSnapshot.newBuilder()
110                         .setName(opName.toString())
111                         .setMetadata(response)
112                         .setDone(Status.DONE.equals(response.getStatus()))
113                         .setResponse(response)
114                         .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage())
115                         .build();
116                   })
117               .build();
118 
119   private static final ApiMethodDescriptor<GetSnapshotRequest, Snapshot> getMethodDescriptor =
120       ApiMethodDescriptor.<GetSnapshotRequest, Snapshot>newBuilder()
121           .setFullMethodName("google.cloud.compute.v1.Snapshots/Get")
122           .setHttpMethod("GET")
123           .setType(ApiMethodDescriptor.MethodType.UNARY)
124           .setRequestFormatter(
125               ProtoMessageRequestFormatter.<GetSnapshotRequest>newBuilder()
126                   .setPath(
127                       "/compute/v1/projects/{project}/global/snapshots/{snapshot}",
128                       request -> {
129                         Map<String, String> fields = new HashMap<>();
130                         ProtoRestSerializer<GetSnapshotRequest> serializer =
131                             ProtoRestSerializer.create();
132                         serializer.putPathParam(fields, "project", request.getProject());
133                         serializer.putPathParam(fields, "snapshot", request.getSnapshot());
134                         return fields;
135                       })
136                   .setQueryParamsExtractor(
137                       request -> {
138                         Map<String, List<String>> fields = new HashMap<>();
139                         ProtoRestSerializer<GetSnapshotRequest> serializer =
140                             ProtoRestSerializer.create();
141                         return fields;
142                       })
143                   .setRequestBodyExtractor(request -> null)
144                   .build())
145           .setResponseParser(
146               ProtoMessageResponseParser.<Snapshot>newBuilder()
147                   .setDefaultInstance(Snapshot.getDefaultInstance())
148                   .setDefaultTypeRegistry(typeRegistry)
149                   .build())
150           .build();
151 
152   private static final ApiMethodDescriptor<GetIamPolicySnapshotRequest, Policy>
153       getIamPolicyMethodDescriptor =
154           ApiMethodDescriptor.<GetIamPolicySnapshotRequest, Policy>newBuilder()
155               .setFullMethodName("google.cloud.compute.v1.Snapshots/GetIamPolicy")
156               .setHttpMethod("GET")
157               .setType(ApiMethodDescriptor.MethodType.UNARY)
158               .setRequestFormatter(
159                   ProtoMessageRequestFormatter.<GetIamPolicySnapshotRequest>newBuilder()
160                       .setPath(
161                           "/compute/v1/projects/{project}/global/snapshots/{resource}/getIamPolicy",
162                           request -> {
163                             Map<String, String> fields = new HashMap<>();
164                             ProtoRestSerializer<GetIamPolicySnapshotRequest> serializer =
165                                 ProtoRestSerializer.create();
166                             serializer.putPathParam(fields, "project", request.getProject());
167                             serializer.putPathParam(fields, "resource", request.getResource());
168                             return fields;
169                           })
170                       .setQueryParamsExtractor(
171                           request -> {
172                             Map<String, List<String>> fields = new HashMap<>();
173                             ProtoRestSerializer<GetIamPolicySnapshotRequest> serializer =
174                                 ProtoRestSerializer.create();
175                             if (request.hasOptionsRequestedPolicyVersion()) {
176                               serializer.putQueryParam(
177                                   fields,
178                                   "optionsRequestedPolicyVersion",
179                                   request.getOptionsRequestedPolicyVersion());
180                             }
181                             return fields;
182                           })
183                       .setRequestBodyExtractor(request -> null)
184                       .build())
185               .setResponseParser(
186                   ProtoMessageResponseParser.<Policy>newBuilder()
187                       .setDefaultInstance(Policy.getDefaultInstance())
188                       .setDefaultTypeRegistry(typeRegistry)
189                       .build())
190               .build();
191 
192   private static final ApiMethodDescriptor<InsertSnapshotRequest, Operation>
193       insertMethodDescriptor =
194           ApiMethodDescriptor.<InsertSnapshotRequest, Operation>newBuilder()
195               .setFullMethodName("google.cloud.compute.v1.Snapshots/Insert")
196               .setHttpMethod("POST")
197               .setType(ApiMethodDescriptor.MethodType.UNARY)
198               .setRequestFormatter(
199                   ProtoMessageRequestFormatter.<InsertSnapshotRequest>newBuilder()
200                       .setPath(
201                           "/compute/v1/projects/{project}/global/snapshots",
202                           request -> {
203                             Map<String, String> fields = new HashMap<>();
204                             ProtoRestSerializer<InsertSnapshotRequest> serializer =
205                                 ProtoRestSerializer.create();
206                             serializer.putPathParam(fields, "project", request.getProject());
207                             return fields;
208                           })
209                       .setQueryParamsExtractor(
210                           request -> {
211                             Map<String, List<String>> fields = new HashMap<>();
212                             ProtoRestSerializer<InsertSnapshotRequest> serializer =
213                                 ProtoRestSerializer.create();
214                             if (request.hasRequestId()) {
215                               serializer.putQueryParam(fields, "requestId", request.getRequestId());
216                             }
217                             return fields;
218                           })
219                       .setRequestBodyExtractor(
220                           request ->
221                               ProtoRestSerializer.create()
222                                   .toBody("snapshotResource", request.getSnapshotResource(), false))
223                       .build())
224               .setResponseParser(
225                   ProtoMessageResponseParser.<Operation>newBuilder()
226                       .setDefaultInstance(Operation.getDefaultInstance())
227                       .setDefaultTypeRegistry(typeRegistry)
228                       .build())
229               .setOperationSnapshotFactory(
230                   (InsertSnapshotRequest request, Operation response) -> {
231                     StringBuilder opName = new StringBuilder(response.getName());
232                     opName.append(":").append(request.getProject());
233                     return HttpJsonOperationSnapshot.newBuilder()
234                         .setName(opName.toString())
235                         .setMetadata(response)
236                         .setDone(Status.DONE.equals(response.getStatus()))
237                         .setResponse(response)
238                         .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage())
239                         .build();
240                   })
241               .build();
242 
243   private static final ApiMethodDescriptor<ListSnapshotsRequest, SnapshotList>
244       listMethodDescriptor =
245           ApiMethodDescriptor.<ListSnapshotsRequest, SnapshotList>newBuilder()
246               .setFullMethodName("google.cloud.compute.v1.Snapshots/List")
247               .setHttpMethod("GET")
248               .setType(ApiMethodDescriptor.MethodType.UNARY)
249               .setRequestFormatter(
250                   ProtoMessageRequestFormatter.<ListSnapshotsRequest>newBuilder()
251                       .setPath(
252                           "/compute/v1/projects/{project}/global/snapshots",
253                           request -> {
254                             Map<String, String> fields = new HashMap<>();
255                             ProtoRestSerializer<ListSnapshotsRequest> serializer =
256                                 ProtoRestSerializer.create();
257                             serializer.putPathParam(fields, "project", request.getProject());
258                             return fields;
259                           })
260                       .setQueryParamsExtractor(
261                           request -> {
262                             Map<String, List<String>> fields = new HashMap<>();
263                             ProtoRestSerializer<ListSnapshotsRequest> serializer =
264                                 ProtoRestSerializer.create();
265                             if (request.hasFilter()) {
266                               serializer.putQueryParam(fields, "filter", request.getFilter());
267                             }
268                             if (request.hasMaxResults()) {
269                               serializer.putQueryParam(
270                                   fields, "maxResults", request.getMaxResults());
271                             }
272                             if (request.hasOrderBy()) {
273                               serializer.putQueryParam(fields, "orderBy", request.getOrderBy());
274                             }
275                             if (request.hasPageToken()) {
276                               serializer.putQueryParam(fields, "pageToken", request.getPageToken());
277                             }
278                             if (request.hasReturnPartialSuccess()) {
279                               serializer.putQueryParam(
280                                   fields,
281                                   "returnPartialSuccess",
282                                   request.getReturnPartialSuccess());
283                             }
284                             return fields;
285                           })
286                       .setRequestBodyExtractor(request -> null)
287                       .build())
288               .setResponseParser(
289                   ProtoMessageResponseParser.<SnapshotList>newBuilder()
290                       .setDefaultInstance(SnapshotList.getDefaultInstance())
291                       .setDefaultTypeRegistry(typeRegistry)
292                       .build())
293               .build();
294 
295   private static final ApiMethodDescriptor<SetIamPolicySnapshotRequest, Policy>
296       setIamPolicyMethodDescriptor =
297           ApiMethodDescriptor.<SetIamPolicySnapshotRequest, Policy>newBuilder()
298               .setFullMethodName("google.cloud.compute.v1.Snapshots/SetIamPolicy")
299               .setHttpMethod("POST")
300               .setType(ApiMethodDescriptor.MethodType.UNARY)
301               .setRequestFormatter(
302                   ProtoMessageRequestFormatter.<SetIamPolicySnapshotRequest>newBuilder()
303                       .setPath(
304                           "/compute/v1/projects/{project}/global/snapshots/{resource}/setIamPolicy",
305                           request -> {
306                             Map<String, String> fields = new HashMap<>();
307                             ProtoRestSerializer<SetIamPolicySnapshotRequest> serializer =
308                                 ProtoRestSerializer.create();
309                             serializer.putPathParam(fields, "project", request.getProject());
310                             serializer.putPathParam(fields, "resource", request.getResource());
311                             return fields;
312                           })
313                       .setQueryParamsExtractor(
314                           request -> {
315                             Map<String, List<String>> fields = new HashMap<>();
316                             ProtoRestSerializer<SetIamPolicySnapshotRequest> serializer =
317                                 ProtoRestSerializer.create();
318                             return fields;
319                           })
320                       .setRequestBodyExtractor(
321                           request ->
322                               ProtoRestSerializer.create()
323                                   .toBody(
324                                       "globalSetPolicyRequestResource",
325                                       request.getGlobalSetPolicyRequestResource(),
326                                       false))
327                       .build())
328               .setResponseParser(
329                   ProtoMessageResponseParser.<Policy>newBuilder()
330                       .setDefaultInstance(Policy.getDefaultInstance())
331                       .setDefaultTypeRegistry(typeRegistry)
332                       .build())
333               .build();
334 
335   private static final ApiMethodDescriptor<SetLabelsSnapshotRequest, Operation>
336       setLabelsMethodDescriptor =
337           ApiMethodDescriptor.<SetLabelsSnapshotRequest, Operation>newBuilder()
338               .setFullMethodName("google.cloud.compute.v1.Snapshots/SetLabels")
339               .setHttpMethod("POST")
340               .setType(ApiMethodDescriptor.MethodType.UNARY)
341               .setRequestFormatter(
342                   ProtoMessageRequestFormatter.<SetLabelsSnapshotRequest>newBuilder()
343                       .setPath(
344                           "/compute/v1/projects/{project}/global/snapshots/{resource}/setLabels",
345                           request -> {
346                             Map<String, String> fields = new HashMap<>();
347                             ProtoRestSerializer<SetLabelsSnapshotRequest> serializer =
348                                 ProtoRestSerializer.create();
349                             serializer.putPathParam(fields, "project", request.getProject());
350                             serializer.putPathParam(fields, "resource", request.getResource());
351                             return fields;
352                           })
353                       .setQueryParamsExtractor(
354                           request -> {
355                             Map<String, List<String>> fields = new HashMap<>();
356                             ProtoRestSerializer<SetLabelsSnapshotRequest> serializer =
357                                 ProtoRestSerializer.create();
358                             return fields;
359                           })
360                       .setRequestBodyExtractor(
361                           request ->
362                               ProtoRestSerializer.create()
363                                   .toBody(
364                                       "globalSetLabelsRequestResource",
365                                       request.getGlobalSetLabelsRequestResource(),
366                                       false))
367                       .build())
368               .setResponseParser(
369                   ProtoMessageResponseParser.<Operation>newBuilder()
370                       .setDefaultInstance(Operation.getDefaultInstance())
371                       .setDefaultTypeRegistry(typeRegistry)
372                       .build())
373               .setOperationSnapshotFactory(
374                   (SetLabelsSnapshotRequest request, Operation response) -> {
375                     StringBuilder opName = new StringBuilder(response.getName());
376                     opName.append(":").append(request.getProject());
377                     return HttpJsonOperationSnapshot.newBuilder()
378                         .setName(opName.toString())
379                         .setMetadata(response)
380                         .setDone(Status.DONE.equals(response.getStatus()))
381                         .setResponse(response)
382                         .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage())
383                         .build();
384                   })
385               .build();
386 
387   private static final ApiMethodDescriptor<
388           TestIamPermissionsSnapshotRequest, TestPermissionsResponse>
389       testIamPermissionsMethodDescriptor =
390           ApiMethodDescriptor
391               .<TestIamPermissionsSnapshotRequest, TestPermissionsResponse>newBuilder()
392               .setFullMethodName("google.cloud.compute.v1.Snapshots/TestIamPermissions")
393               .setHttpMethod("POST")
394               .setType(ApiMethodDescriptor.MethodType.UNARY)
395               .setRequestFormatter(
396                   ProtoMessageRequestFormatter.<TestIamPermissionsSnapshotRequest>newBuilder()
397                       .setPath(
398                           "/compute/v1/projects/{project}/global/snapshots/{resource}/testIamPermissions",
399                           request -> {
400                             Map<String, String> fields = new HashMap<>();
401                             ProtoRestSerializer<TestIamPermissionsSnapshotRequest> serializer =
402                                 ProtoRestSerializer.create();
403                             serializer.putPathParam(fields, "project", request.getProject());
404                             serializer.putPathParam(fields, "resource", request.getResource());
405                             return fields;
406                           })
407                       .setQueryParamsExtractor(
408                           request -> {
409                             Map<String, List<String>> fields = new HashMap<>();
410                             ProtoRestSerializer<TestIamPermissionsSnapshotRequest> serializer =
411                                 ProtoRestSerializer.create();
412                             return fields;
413                           })
414                       .setRequestBodyExtractor(
415                           request ->
416                               ProtoRestSerializer.create()
417                                   .toBody(
418                                       "testPermissionsRequestResource",
419                                       request.getTestPermissionsRequestResource(),
420                                       false))
421                       .build())
422               .setResponseParser(
423                   ProtoMessageResponseParser.<TestPermissionsResponse>newBuilder()
424                       .setDefaultInstance(TestPermissionsResponse.getDefaultInstance())
425                       .setDefaultTypeRegistry(typeRegistry)
426                       .build())
427               .build();
428 
429   private final UnaryCallable<DeleteSnapshotRequest, Operation> deleteCallable;
430   private final OperationCallable<DeleteSnapshotRequest, Operation, Operation>
431       deleteOperationCallable;
432   private final UnaryCallable<GetSnapshotRequest, Snapshot> getCallable;
433   private final UnaryCallable<GetIamPolicySnapshotRequest, Policy> getIamPolicyCallable;
434   private final UnaryCallable<InsertSnapshotRequest, Operation> insertCallable;
435   private final OperationCallable<InsertSnapshotRequest, Operation, Operation>
436       insertOperationCallable;
437   private final UnaryCallable<ListSnapshotsRequest, SnapshotList> listCallable;
438   private final UnaryCallable<ListSnapshotsRequest, ListPagedResponse> listPagedCallable;
439   private final UnaryCallable<SetIamPolicySnapshotRequest, Policy> setIamPolicyCallable;
440   private final UnaryCallable<SetLabelsSnapshotRequest, Operation> setLabelsCallable;
441   private final OperationCallable<SetLabelsSnapshotRequest, Operation, Operation>
442       setLabelsOperationCallable;
443   private final UnaryCallable<TestIamPermissionsSnapshotRequest, TestPermissionsResponse>
444       testIamPermissionsCallable;
445 
446   private final BackgroundResource backgroundResources;
447   private final HttpJsonGlobalOperationsStub httpJsonOperationsStub;
448   private final HttpJsonStubCallableFactory callableFactory;
449 
create(SnapshotsStubSettings settings)450   public static final HttpJsonSnapshotsStub create(SnapshotsStubSettings settings)
451       throws IOException {
452     return new HttpJsonSnapshotsStub(settings, ClientContext.create(settings));
453   }
454 
create(ClientContext clientContext)455   public static final HttpJsonSnapshotsStub create(ClientContext clientContext) throws IOException {
456     return new HttpJsonSnapshotsStub(SnapshotsStubSettings.newBuilder().build(), clientContext);
457   }
458 
create( ClientContext clientContext, HttpJsonStubCallableFactory callableFactory)459   public static final HttpJsonSnapshotsStub create(
460       ClientContext clientContext, HttpJsonStubCallableFactory callableFactory) throws IOException {
461     return new HttpJsonSnapshotsStub(
462         SnapshotsStubSettings.newBuilder().build(), clientContext, callableFactory);
463   }
464 
465   /**
466    * Constructs an instance of HttpJsonSnapshotsStub, using the given settings. This is protected so
467    * that it is easy to make a subclass, but otherwise, the static factory methods should be
468    * preferred.
469    */
HttpJsonSnapshotsStub(SnapshotsStubSettings settings, ClientContext clientContext)470   protected HttpJsonSnapshotsStub(SnapshotsStubSettings settings, ClientContext clientContext)
471       throws IOException {
472     this(settings, clientContext, new HttpJsonSnapshotsCallableFactory());
473   }
474 
475   /**
476    * Constructs an instance of HttpJsonSnapshotsStub, using the given settings. This is protected so
477    * that it is easy to make a subclass, but otherwise, the static factory methods should be
478    * preferred.
479    */
HttpJsonSnapshotsStub( SnapshotsStubSettings settings, ClientContext clientContext, HttpJsonStubCallableFactory callableFactory)480   protected HttpJsonSnapshotsStub(
481       SnapshotsStubSettings settings,
482       ClientContext clientContext,
483       HttpJsonStubCallableFactory callableFactory)
484       throws IOException {
485     this.callableFactory = callableFactory;
486     this.httpJsonOperationsStub =
487         HttpJsonGlobalOperationsStub.create(clientContext, callableFactory);
488 
489     HttpJsonCallSettings<DeleteSnapshotRequest, Operation> deleteTransportSettings =
490         HttpJsonCallSettings.<DeleteSnapshotRequest, Operation>newBuilder()
491             .setMethodDescriptor(deleteMethodDescriptor)
492             .setTypeRegistry(typeRegistry)
493             .build();
494     HttpJsonCallSettings<GetSnapshotRequest, Snapshot> getTransportSettings =
495         HttpJsonCallSettings.<GetSnapshotRequest, Snapshot>newBuilder()
496             .setMethodDescriptor(getMethodDescriptor)
497             .setTypeRegistry(typeRegistry)
498             .build();
499     HttpJsonCallSettings<GetIamPolicySnapshotRequest, Policy> getIamPolicyTransportSettings =
500         HttpJsonCallSettings.<GetIamPolicySnapshotRequest, Policy>newBuilder()
501             .setMethodDescriptor(getIamPolicyMethodDescriptor)
502             .setTypeRegistry(typeRegistry)
503             .build();
504     HttpJsonCallSettings<InsertSnapshotRequest, Operation> insertTransportSettings =
505         HttpJsonCallSettings.<InsertSnapshotRequest, Operation>newBuilder()
506             .setMethodDescriptor(insertMethodDescriptor)
507             .setTypeRegistry(typeRegistry)
508             .build();
509     HttpJsonCallSettings<ListSnapshotsRequest, SnapshotList> listTransportSettings =
510         HttpJsonCallSettings.<ListSnapshotsRequest, SnapshotList>newBuilder()
511             .setMethodDescriptor(listMethodDescriptor)
512             .setTypeRegistry(typeRegistry)
513             .build();
514     HttpJsonCallSettings<SetIamPolicySnapshotRequest, Policy> setIamPolicyTransportSettings =
515         HttpJsonCallSettings.<SetIamPolicySnapshotRequest, Policy>newBuilder()
516             .setMethodDescriptor(setIamPolicyMethodDescriptor)
517             .setTypeRegistry(typeRegistry)
518             .build();
519     HttpJsonCallSettings<SetLabelsSnapshotRequest, Operation> setLabelsTransportSettings =
520         HttpJsonCallSettings.<SetLabelsSnapshotRequest, Operation>newBuilder()
521             .setMethodDescriptor(setLabelsMethodDescriptor)
522             .setTypeRegistry(typeRegistry)
523             .build();
524     HttpJsonCallSettings<TestIamPermissionsSnapshotRequest, TestPermissionsResponse>
525         testIamPermissionsTransportSettings =
526             HttpJsonCallSettings
527                 .<TestIamPermissionsSnapshotRequest, TestPermissionsResponse>newBuilder()
528                 .setMethodDescriptor(testIamPermissionsMethodDescriptor)
529                 .setTypeRegistry(typeRegistry)
530                 .build();
531 
532     this.deleteCallable =
533         callableFactory.createUnaryCallable(
534             deleteTransportSettings, settings.deleteSettings(), clientContext);
535     this.deleteOperationCallable =
536         callableFactory.createOperationCallable(
537             deleteTransportSettings,
538             settings.deleteOperationSettings(),
539             clientContext,
540             httpJsonOperationsStub);
541     this.getCallable =
542         callableFactory.createUnaryCallable(
543             getTransportSettings, settings.getSettings(), clientContext);
544     this.getIamPolicyCallable =
545         callableFactory.createUnaryCallable(
546             getIamPolicyTransportSettings, settings.getIamPolicySettings(), clientContext);
547     this.insertCallable =
548         callableFactory.createUnaryCallable(
549             insertTransportSettings, settings.insertSettings(), clientContext);
550     this.insertOperationCallable =
551         callableFactory.createOperationCallable(
552             insertTransportSettings,
553             settings.insertOperationSettings(),
554             clientContext,
555             httpJsonOperationsStub);
556     this.listCallable =
557         callableFactory.createUnaryCallable(
558             listTransportSettings, settings.listSettings(), clientContext);
559     this.listPagedCallable =
560         callableFactory.createPagedCallable(
561             listTransportSettings, settings.listSettings(), clientContext);
562     this.setIamPolicyCallable =
563         callableFactory.createUnaryCallable(
564             setIamPolicyTransportSettings, settings.setIamPolicySettings(), clientContext);
565     this.setLabelsCallable =
566         callableFactory.createUnaryCallable(
567             setLabelsTransportSettings, settings.setLabelsSettings(), clientContext);
568     this.setLabelsOperationCallable =
569         callableFactory.createOperationCallable(
570             setLabelsTransportSettings,
571             settings.setLabelsOperationSettings(),
572             clientContext,
573             httpJsonOperationsStub);
574     this.testIamPermissionsCallable =
575         callableFactory.createUnaryCallable(
576             testIamPermissionsTransportSettings,
577             settings.testIamPermissionsSettings(),
578             clientContext);
579 
580     this.backgroundResources =
581         new BackgroundResourceAggregation(clientContext.getBackgroundResources());
582   }
583 
584   @InternalApi
getMethodDescriptors()585   public static List<ApiMethodDescriptor> getMethodDescriptors() {
586     List<ApiMethodDescriptor> methodDescriptors = new ArrayList<>();
587     methodDescriptors.add(deleteMethodDescriptor);
588     methodDescriptors.add(getMethodDescriptor);
589     methodDescriptors.add(getIamPolicyMethodDescriptor);
590     methodDescriptors.add(insertMethodDescriptor);
591     methodDescriptors.add(listMethodDescriptor);
592     methodDescriptors.add(setIamPolicyMethodDescriptor);
593     methodDescriptors.add(setLabelsMethodDescriptor);
594     methodDescriptors.add(testIamPermissionsMethodDescriptor);
595     return methodDescriptors;
596   }
597 
598   @Override
deleteCallable()599   public UnaryCallable<DeleteSnapshotRequest, Operation> deleteCallable() {
600     return deleteCallable;
601   }
602 
603   @Override
deleteOperationCallable()604   public OperationCallable<DeleteSnapshotRequest, Operation, Operation> deleteOperationCallable() {
605     return deleteOperationCallable;
606   }
607 
608   @Override
getCallable()609   public UnaryCallable<GetSnapshotRequest, Snapshot> getCallable() {
610     return getCallable;
611   }
612 
613   @Override
getIamPolicyCallable()614   public UnaryCallable<GetIamPolicySnapshotRequest, Policy> getIamPolicyCallable() {
615     return getIamPolicyCallable;
616   }
617 
618   @Override
insertCallable()619   public UnaryCallable<InsertSnapshotRequest, Operation> insertCallable() {
620     return insertCallable;
621   }
622 
623   @Override
insertOperationCallable()624   public OperationCallable<InsertSnapshotRequest, Operation, Operation> insertOperationCallable() {
625     return insertOperationCallable;
626   }
627 
628   @Override
listCallable()629   public UnaryCallable<ListSnapshotsRequest, SnapshotList> listCallable() {
630     return listCallable;
631   }
632 
633   @Override
listPagedCallable()634   public UnaryCallable<ListSnapshotsRequest, ListPagedResponse> listPagedCallable() {
635     return listPagedCallable;
636   }
637 
638   @Override
setIamPolicyCallable()639   public UnaryCallable<SetIamPolicySnapshotRequest, Policy> setIamPolicyCallable() {
640     return setIamPolicyCallable;
641   }
642 
643   @Override
setLabelsCallable()644   public UnaryCallable<SetLabelsSnapshotRequest, Operation> setLabelsCallable() {
645     return setLabelsCallable;
646   }
647 
648   @Override
649   public OperationCallable<SetLabelsSnapshotRequest, Operation, Operation>
setLabelsOperationCallable()650       setLabelsOperationCallable() {
651     return setLabelsOperationCallable;
652   }
653 
654   @Override
655   public UnaryCallable<TestIamPermissionsSnapshotRequest, TestPermissionsResponse>
testIamPermissionsCallable()656       testIamPermissionsCallable() {
657     return testIamPermissionsCallable;
658   }
659 
660   @Override
close()661   public final void close() {
662     try {
663       backgroundResources.close();
664     } catch (RuntimeException e) {
665       throw e;
666     } catch (Exception e) {
667       throw new IllegalStateException("Failed to close resource", e);
668     }
669   }
670 
671   @Override
shutdown()672   public void shutdown() {
673     backgroundResources.shutdown();
674   }
675 
676   @Override
isShutdown()677   public boolean isShutdown() {
678     return backgroundResources.isShutdown();
679   }
680 
681   @Override
isTerminated()682   public boolean isTerminated() {
683     return backgroundResources.isTerminated();
684   }
685 
686   @Override
shutdownNow()687   public void shutdownNow() {
688     backgroundResources.shutdownNow();
689   }
690 
691   @Override
awaitTermination(long duration, TimeUnit unit)692   public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException {
693     return backgroundResources.awaitTermination(duration, unit);
694   }
695 }
696