45
45
import com .google .cloud .storage .UnifiedOpts .HmacKeySourceOpt ;
46
46
import com .google .cloud .storage .UnifiedOpts .HmacKeyTargetOpt ;
47
47
import com .google .cloud .storage .UnifiedOpts .NamedField ;
48
+ import com .google .cloud .storage .UnifiedOpts .NestedNamedField ;
48
49
import com .google .cloud .storage .UnifiedOpts .ObjectListOpt ;
49
50
import com .google .cloud .storage .UnifiedOpts .ObjectSourceOpt ;
50
51
import com .google .cloud .storage .UnifiedOpts .ObjectTargetOpt ;
51
52
import com .google .cloud .storage .UnifiedOpts .Opts ;
52
53
import com .google .common .collect .ImmutableList ;
54
+ import com .google .common .collect .ImmutableMap ;
53
55
import com .google .common .collect .ImmutableSet ;
54
56
import com .google .common .collect .Iterables ;
55
57
import com .google .common .collect .Streams ;
62
64
import java .net .URLConnection ;
63
65
import java .nio .file .Path ;
64
66
import java .security .Key ;
67
+ import java .util .ArrayList ;
65
68
import java .util .Arrays ;
66
69
import java .util .Collection ;
67
70
import java .util .Collections ;
71
+ import java .util .HashMap ;
68
72
import java .util .LinkedHashSet ;
69
73
import java .util .LinkedList ;
70
74
import java .util .List ;
73
77
import java .util .concurrent .TimeUnit ;
74
78
import java .util .stream .Stream ;
75
79
import org .checkerframework .checker .nullness .qual .NonNull ;
80
+ import org .checkerframework .checker .nullness .qual .Nullable ;
76
81
77
82
/**
78
83
* An interface for Google Cloud Storage.
@@ -106,80 +111,107 @@ String getEntry() {
106
111
107
112
enum BucketField implements FieldSelector , NamedField {
108
113
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
109
- ID ("id" , "bucket_id" ),
114
+ ID ("id" , "bucket_id" , String . class ),
110
115
@ TransportCompatibility (Transport .HTTP )
111
- SELF_LINK ("selfLink" ),
116
+ SELF_LINK ("selfLink" , String . class ),
112
117
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
113
- NAME ("name" ),
118
+ NAME ("name" , String . class ),
114
119
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
115
- TIME_CREATED ("timeCreated" , "create_time" ),
120
+ TIME_CREATED ("timeCreated" , "create_time" , com . google . api . client . util . DateTime . class ),
116
121
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
117
- METAGENERATION ("metageneration" ),
122
+ METAGENERATION ("metageneration" , Long . class ),
118
123
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
119
- ACL ("acl" ),
124
+ ACL ("acl" , ArrayList . class ),
120
125
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
121
- DEFAULT_OBJECT_ACL ("defaultObjectAcl" , "default_object_acl" ),
126
+ DEFAULT_OBJECT_ACL ("defaultObjectAcl" , "default_object_acl" , ArrayList . class ),
122
127
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
123
- OWNER ("owner" ),
128
+ OWNER ("owner" , com . google . api . services . storage . model . Bucket . Owner . class ),
124
129
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
125
- LABELS ("labels" ),
130
+ LABELS ("labels" , HashMap . class ),
126
131
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
127
- LOCATION ("location" ),
132
+ LOCATION ("location" , String . class ),
128
133
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
129
- LOCATION_TYPE ("locationType" , "location_type" ),
134
+ LOCATION_TYPE ("locationType" , "location_type" , String . class ),
130
135
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
131
- WEBSITE ("website" ),
136
+ WEBSITE ("website" , com . google . api . services . storage . model . Bucket . Website . class ),
132
137
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
133
- VERSIONING ("versioning" ),
138
+ VERSIONING ("versioning" , com . google . api . services . storage . model . Bucket . Versioning . class ),
134
139
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
135
- CORS ("cors" ),
140
+ CORS ("cors" , ArrayList . class ),
136
141
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
137
- LIFECYCLE ("lifecycle" ),
142
+ LIFECYCLE ("lifecycle" , com . google . api . services . storage . model . Bucket . Lifecycle . class ),
138
143
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
139
- STORAGE_CLASS ("storageClass" , "storage_class" ),
144
+ STORAGE_CLASS ("storageClass" , "storage_class" , String . class ),
140
145
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
141
- ETAG ("etag" ),
146
+ ETAG ("etag" , String . class ),
142
147
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
143
- ENCRYPTION ("encryption" ),
148
+ ENCRYPTION ("encryption" , com . google . api . services . storage . model . Bucket . Encryption . class ),
144
149
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
145
- BILLING ("billing" ),
150
+ BILLING ("billing" , com . google . api . services . storage . model . Bucket . Billing . class ),
146
151
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
147
- DEFAULT_EVENT_BASED_HOLD ("defaultEventBasedHold" , "default_event_based_hold" ),
152
+ DEFAULT_EVENT_BASED_HOLD ("defaultEventBasedHold" , "default_event_based_hold" , Boolean . class ),
148
153
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
149
- RETENTION_POLICY ("retentionPolicy" , "retention_policy" ),
154
+ RETENTION_POLICY (
155
+ "retentionPolicy" ,
156
+ "retention_policy" ,
157
+ com .google .api .services .storage .model .Bucket .RetentionPolicy .class ),
150
158
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
151
- IAMCONFIGURATION ("iamConfiguration" , "iam_config" ),
159
+ IAMCONFIGURATION (
160
+ "iamConfiguration" ,
161
+ "iam_config" ,
162
+ com .google .api .services .storage .model .Bucket .IamConfiguration .class ),
152
163
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
153
- LOGGING ("logging" ),
164
+ LOGGING ("logging" , com . google . api . services . storage . model . Bucket . Logging . class ),
154
165
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
155
- UPDATED ("updated" , "update_time" ),
166
+ UPDATED ("updated" , "update_time" , com . google . api . client . util . DateTime . class ),
156
167
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
157
- RPO ("rpo" ),
168
+ RPO ("rpo" , String . class ),
158
169
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
159
- CUSTOM_PLACEMENT_CONFIG ("customPlacementConfig" , "custom_placement_config" ),
170
+ CUSTOM_PLACEMENT_CONFIG (
171
+ "customPlacementConfig" ,
172
+ "custom_placement_config" ,
173
+ com .google .api .services .storage .model .Bucket .CustomPlacementConfig .class ),
160
174
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
161
- AUTOCLASS ("autoclass" ),
175
+ AUTOCLASS ("autoclass" , com . google . api . services . storage . model . Bucket . Autoclass . class ),
162
176
163
177
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
164
- HIERARCHICAL_NAMESPACE ("hierarchicalNamespace" , "hierarchical_namespace" ),
178
+ HIERARCHICAL_NAMESPACE (
179
+ "hierarchicalNamespace" ,
180
+ "hierarchical_namespace" ,
181
+ com .google .api .services .storage .model .Bucket .HierarchicalNamespace .class ),
165
182
@ TransportCompatibility ({Transport .HTTP })
166
- OBJECT_RETENTION ("objectRetention" ),
183
+ OBJECT_RETENTION (
184
+ "objectRetention" , com .google .api .services .storage .model .Bucket .ObjectRetention .class ),
167
185
168
186
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
169
- SOFT_DELETE_POLICY ("softDeletePolicy" , "soft_delete_policy" );
187
+ SOFT_DELETE_POLICY (
188
+ "softDeletePolicy" ,
189
+ "soft_delete_policy" ,
190
+ com .google .api .services .storage .model .Bucket .SoftDeletePolicy .class );
170
191
171
192
static final List <BucketField > REQUIRED_FIELDS = ImmutableList .of (NAME );
193
+ private static final Map <String , BucketField > JSON_FIELD_NAME_INDEX ;
194
+
195
+ static {
196
+ ImmutableMap .Builder <String , BucketField > tmp = ImmutableMap .builder ();
197
+ for (BucketField field : values ()) {
198
+ tmp .put (field .selector , field );
199
+ }
200
+ JSON_FIELD_NAME_INDEX = Utils .mapBuild (tmp );
201
+ }
172
202
173
203
private final String selector ;
174
204
private final String grpcFieldName ;
205
+ private final Class <?> jsonClass ;
175
206
176
- BucketField (String selector ) {
177
- this (selector , selector );
207
+ BucketField (String selector , Class <?> jsonClass ) {
208
+ this (selector , selector , jsonClass );
178
209
}
179
210
180
- BucketField (String selector , String grpcFieldName ) {
211
+ BucketField (String selector , String grpcFieldName , Class <?> jsonClass ) {
181
212
this .selector = selector ;
182
213
this .grpcFieldName = grpcFieldName ;
214
+ this .jsonClass = jsonClass ;
183
215
}
184
216
185
217
@ Override
@@ -196,96 +228,129 @@ public String getApiaryName() {
196
228
public String getGrpcName () {
197
229
return grpcFieldName ;
198
230
}
231
+
232
+ Class <?> getJsonClass () {
233
+ return jsonClass ;
234
+ }
235
+
236
+ @ Nullable
237
+ static BucketField lookup (NamedField nf ) {
238
+ NamedField lookup = nf ;
239
+ if (nf instanceof NestedNamedField ) {
240
+ NestedNamedField nested = (NestedNamedField ) nf ;
241
+ lookup = nested .getParent ();
242
+ }
243
+ return JSON_FIELD_NAME_INDEX .get (lookup .getApiaryName ());
244
+ }
199
245
}
200
246
201
247
enum BlobField implements FieldSelector , NamedField {
202
248
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
203
- ACL ("acl" ),
249
+ ACL ("acl" , com . google . api . services . storage . model . ObjectAccessControl . class ),
204
250
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
205
- BUCKET ("bucket" ),
251
+ BUCKET ("bucket" , String . class ),
206
252
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
207
- CACHE_CONTROL ("cacheControl" , "cache_control" ),
253
+ CACHE_CONTROL ("cacheControl" , "cache_control" , String . class ),
208
254
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
209
- COMPONENT_COUNT ("componentCount" , "component_count" ),
255
+ COMPONENT_COUNT ("componentCount" , "component_count" , Integer . class ),
210
256
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
211
- CONTENT_DISPOSITION ("contentDisposition" , "content_disposition" ),
257
+ CONTENT_DISPOSITION ("contentDisposition" , "content_disposition" , String . class ),
212
258
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
213
- CONTENT_ENCODING ("contentEncoding" , "content_encoding" ),
259
+ CONTENT_ENCODING ("contentEncoding" , "content_encoding" , String . class ),
214
260
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
215
- CONTENT_LANGUAGE ("contentLanguage" , "content_language" ),
261
+ CONTENT_LANGUAGE ("contentLanguage" , "content_language" , String . class ),
216
262
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
217
- CONTENT_TYPE ("contentType" , "content_type" ),
263
+ CONTENT_TYPE ("contentType" , "content_type" , String . class ),
218
264
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
219
- CRC32C ("crc32c" , "checksums.crc32c" ),
265
+ CRC32C ("crc32c" , "checksums.crc32c" , String . class ),
220
266
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
221
- ETAG ("etag" ),
267
+ ETAG ("etag" , String . class ),
222
268
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
223
- GENERATION ("generation" ),
269
+ GENERATION ("generation" , Long . class ),
224
270
@ TransportCompatibility (Transport .HTTP )
225
- ID ("id" ),
271
+ ID ("id" , String . class ),
226
272
/** {@code kind} is not exposed in {@link BlobInfo} or {@link Blob} no need to select it */
227
273
@ Deprecated
228
274
@ TransportCompatibility (Transport .HTTP )
229
- KIND ("kind" ),
275
+ KIND ("kind" , String . class ),
230
276
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
231
- MD5HASH ("md5Hash" , "checksums.md5_hash" ),
277
+ MD5HASH ("md5Hash" , "checksums.md5_hash" , String . class ),
232
278
@ TransportCompatibility (Transport .HTTP )
233
- MEDIA_LINK ("mediaLink" ),
279
+ MEDIA_LINK ("mediaLink" , String . class ),
234
280
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
235
- METADATA ("metadata" ),
281
+ METADATA ("metadata" , HashMap . class ),
236
282
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
237
- METAGENERATION ("metageneration" ),
283
+ METAGENERATION ("metageneration" , Long . class ),
238
284
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
239
- NAME ("name" ),
285
+ NAME ("name" , String . class ),
240
286
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
241
- OWNER ("owner" ),
287
+ OWNER ("owner" , com . google . api . services . storage . model . StorageObject . Owner . class ),
242
288
@ TransportCompatibility (Transport .HTTP )
243
- SELF_LINK ("selfLink" ),
289
+ SELF_LINK ("selfLink" , String . class ),
244
290
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
245
- SIZE ("size" ),
291
+ SIZE ("size" , java . math . BigInteger . class ),
246
292
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
247
- STORAGE_CLASS ("storageClass" , "storage_class" ),
293
+ STORAGE_CLASS ("storageClass" , "storage_class" , String . class ),
248
294
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
249
- TIME_DELETED ("timeDeleted" , "delete_time" ),
295
+ TIME_DELETED ("timeDeleted" , "delete_time" , com . google . api . client . util . DateTime . class ),
250
296
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
251
- TIME_CREATED ("timeCreated" , "create_time" ),
297
+ TIME_CREATED ("timeCreated" , "create_time" , com . google . api . client . util . DateTime . class ),
252
298
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
253
- KMS_KEY_NAME ("kmsKeyName" , "kms_key" ),
299
+ KMS_KEY_NAME ("kmsKeyName" , "kms_key" , String . class ),
254
300
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
255
- EVENT_BASED_HOLD ("eventBasedHold" , "event_based_hold" ),
301
+ EVENT_BASED_HOLD ("eventBasedHold" , "event_based_hold" , String . class ),
256
302
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
257
- TEMPORARY_HOLD ("temporaryHold" , "temporary_hold" ),
303
+ TEMPORARY_HOLD ("temporaryHold" , "temporary_hold" , String . class ),
258
304
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
259
- RETENTION_EXPIRATION_TIME ("retentionExpirationTime" , "retention_expire_time" ),
305
+ RETENTION_EXPIRATION_TIME (
306
+ "retentionExpirationTime" ,
307
+ "retention_expire_time" ,
308
+ com .google .api .client .util .DateTime .class ),
260
309
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
261
- UPDATED ("updated" , "update_time" ),
310
+ UPDATED ("updated" , "update_time" , com . google . api . client . util . DateTime . class ),
262
311
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
263
- CUSTOM_TIME ("customTime" , "custom_time" ),
312
+ CUSTOM_TIME ("customTime" , "custom_time" , com . google . api . client . util . DateTime . class ),
264
313
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
265
- TIME_STORAGE_CLASS_UPDATED ("timeStorageClassUpdated" , "update_storage_class_time" ),
314
+ TIME_STORAGE_CLASS_UPDATED (
315
+ "timeStorageClassUpdated" ,
316
+ "update_storage_class_time" ,
317
+ com .google .api .client .util .DateTime .class ),
266
318
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
267
- CUSTOMER_ENCRYPTION ("customerEncryption" , "customer_encryption" ),
319
+ CUSTOMER_ENCRYPTION ("customerEncryption" , "customer_encryption" , String . class ),
268
320
@ TransportCompatibility ({Transport .HTTP })
269
- RETENTION ("retention" ),
321
+ RETENTION ("retention" , com . google . api . services . storage . model . StorageObject . Retention . class ),
270
322
271
323
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
272
- SOFT_DELETE_TIME ("softDeleteTime" , "soft_delete_time" ),
324
+ SOFT_DELETE_TIME (
325
+ "softDeleteTime" , "soft_delete_time" , com .google .api .client .util .DateTime .class ),
273
326
274
327
@ TransportCompatibility ({Transport .HTTP , Transport .GRPC })
275
- HARD_DELETE_TIME ("hardDeleteTime" , "hard_delete_time" );
328
+ HARD_DELETE_TIME (
329
+ "hardDeleteTime" , "hard_delete_time" , com .google .api .client .util .DateTime .class );
276
330
277
331
static final List <NamedField > REQUIRED_FIELDS = ImmutableList .of (BUCKET , NAME );
332
+ private static final Map <String , BlobField > JSON_FIELD_NAME_INDEX ;
333
+
334
+ static {
335
+ ImmutableMap .Builder <String , BlobField > tmp = ImmutableMap .builder ();
336
+ for (BlobField field : values ()) {
337
+ tmp .put (field .selector , field );
338
+ }
339
+ JSON_FIELD_NAME_INDEX = Utils .mapBuild (tmp );
340
+ }
278
341
279
342
private final String selector ;
280
343
private final String grpcFieldName ;
344
+ private final Class <?> jsonClass ;
281
345
282
- BlobField (String selector ) {
283
- this (selector , selector );
346
+ BlobField (String selector , Class <?> jsonClass ) {
347
+ this (selector , selector , jsonClass );
284
348
}
285
349
286
- BlobField (String selector , String grpcFieldName ) {
350
+ BlobField (String selector , String grpcFieldName , Class <?> jsonClass ) {
287
351
this .selector = selector ;
288
352
this .grpcFieldName = grpcFieldName ;
353
+ this .jsonClass = jsonClass ;
289
354
}
290
355
291
356
@ Override
@@ -302,6 +367,20 @@ public String getApiaryName() {
302
367
public String getGrpcName () {
303
368
return grpcFieldName ;
304
369
}
370
+
371
+ Class <?> getJsonClass () {
372
+ return jsonClass ;
373
+ }
374
+
375
+ @ Nullable
376
+ static BlobField lookup (NamedField nf ) {
377
+ NamedField lookup = nf ;
378
+ if (nf instanceof NestedNamedField ) {
379
+ NestedNamedField nested = (NestedNamedField ) nf ;
380
+ lookup = nested .getParent ();
381
+ }
382
+ return JSON_FIELD_NAME_INDEX .get (lookup .getApiaryName ());
383
+ }
305
384
}
306
385
307
386
enum UriScheme {
0 commit comments