Skip to content

Commit 2f291d3

Browse files
author
Frank Natividad
committed
Add support for defaultEventBasedHold
1 parent edc7aff commit 2f291d3

6 files changed

Lines changed: 65 additions & 1 deletion

File tree

google-cloud-clients/google-cloud-storage/src/main/java/com/google/cloud/storage/Bucket.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,12 @@ public Builder setDefaultKmsKeyName(String defaultKmsKeyName) {
635635
return this;
636636
}
637637

638+
@Override
639+
public Builder setDefaultEventBasedHold(Boolean defaultEventBasedHold) {
640+
infoBuilder.setDefaultEventBasedHold(defaultEventBasedHold);
641+
return this;
642+
}
643+
638644
@Override
639645
public Bucket build() {
640646
return new Bucket(storage, infoBuilder);

google-cloud-clients/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ public com.google.api.services.storage.model.Bucket apply(BucketInfo bucketInfo)
8888
private final StorageClass storageClass;
8989
private final Map<String, String> labels;
9090
private final String defaultKmsKeyName;
91+
private final Boolean defaultEventBasedHold;
9192

9293
/**
9394
* Base class for bucket's delete rules. Allows to configure automatic deletion of blobs and blobs
@@ -432,6 +433,11 @@ public abstract static class Builder {
432433
@GcpLaunchStage.Beta
433434
public abstract Builder setDefaultKmsKeyName(String defaultKmsKeyName);
434435

436+
/**
437+
* Sets the default Event Based Hold for this bucket.
438+
*/
439+
public abstract Builder setDefaultEventBasedHold(Boolean defaultEventBasedHold);
440+
435441
/**
436442
* Creates a {@code BucketInfo} object.
437443
*/
@@ -459,6 +465,7 @@ static final class BuilderImpl extends Builder {
459465
private List<Acl> defaultAcl;
460466
private Map<String, String> labels;
461467
private String defaultKmsKeyName;
468+
private Boolean defaultEventBasedHold;
462469

463470
BuilderImpl(String name) {
464471
this.name = name;
@@ -484,6 +491,7 @@ static final class BuilderImpl extends Builder {
484491
labels = bucketInfo.labels;
485492
requesterPays = bucketInfo.requesterPays;
486493
defaultKmsKeyName = bucketInfo.defaultKmsKeyName;
494+
defaultEventBasedHold = bucketInfo.defaultEventBasedHold;
487495
}
488496

489497
@Override
@@ -603,6 +611,12 @@ public Builder setDefaultKmsKeyName(String defaultKmsKeyName) {
603611
return this;
604612
}
605613

614+
@Override
615+
public Builder setDefaultEventBasedHold(Boolean defaultEventBasedHold) {
616+
this.defaultEventBasedHold = firstNonNull(defaultEventBasedHold, Data.<Boolean>nullOf(Boolean.class));
617+
return this;
618+
}
619+
606620
@Override
607621
public BucketInfo build() {
608622
checkNotNull(name);
@@ -630,6 +644,7 @@ public BucketInfo build() {
630644
labels = builder.labels;
631645
requesterPays = builder.requesterPays;
632646
defaultKmsKeyName = builder.defaultKmsKeyName;
647+
defaultEventBasedHold = builder.defaultEventBasedHold;
633648
}
634649

635650
/**
@@ -790,6 +805,11 @@ public String getDefaultKmsKeyName() {
790805
return defaultKmsKeyName;
791806
}
792807

808+
/**
809+
* Returns the default Event Based Hold to be applied to newly inserted objects in this bucket.
810+
*/
811+
public Boolean getDefaultEventBasedHold() { return defaultEventBasedHold; }
812+
793813
/**
794814
* Returns a builder for the current bucket.
795815
*/
@@ -888,6 +908,10 @@ public Rule apply(DeleteRule deleteRule) {
888908
if (defaultKmsKeyName != null) {
889909
bucketPb.setEncryption(new Encryption().setDefaultKmsKeyName(defaultKmsKeyName));
890910
}
911+
if (defaultEventBasedHold != null) {
912+
bucketPb.setDefaultEventBasedHold(defaultEventBasedHold);
913+
}
914+
891915
return bucketPb;
892916
}
893917

@@ -979,6 +1003,9 @@ public DeleteRule apply(Rule rule) {
9791003
if (encryption != null && encryption.getDefaultKmsKeyName() != null && !encryption.getDefaultKmsKeyName().isEmpty()) {
9801004
builder.setDefaultKmsKeyName(encryption.getDefaultKmsKeyName());
9811005
}
1006+
if (bucketPb.getDefaultEventBasedHold() != null) {
1007+
builder.setDefaultEventBasedHold(bucketPb.getDefaultEventBasedHold());
1008+
}
9821009
return builder.build();
9831010
}
9841011
}

google-cloud-clients/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ enum BucketField implements FieldSelector {
9595
ETAG("etag"),
9696
@GcpLaunchStage.Beta
9797
ENCRYPTION("encryption"),
98-
BILLING("billing");
98+
BILLING("billing"),
99+
DEFAULT_EVENT_BASED_HOLD("defaultEventBasedHold");
99100

100101
static final List<? extends FieldSelector> REQUIRED_FIELDS = ImmutableList.of(NAME);
101102

google-cloud-clients/google-cloud-storage/src/test/java/com/google/cloud/storage/BucketInfoTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public class BucketInfoTest {
6464
private static final Boolean VERSIONING_ENABLED = true;
6565
private static final Map<String, String> BUCKET_LABELS = ImmutableMap.of("label1", "value1");
6666
private static final Boolean REQUESTER_PAYS = true;
67+
private static final Boolean DEFAULT_EVENT_BASED_HOLD = true;
6768
private static final BucketInfo BUCKET_INFO = BucketInfo.newBuilder("b")
6869
.setAcl(ACL)
6970
.setEtag(ETAG)
@@ -83,6 +84,7 @@ public class BucketInfoTest {
8384
.setLabels(BUCKET_LABELS)
8485
.setRequesterPays(REQUESTER_PAYS)
8586
.setDefaultKmsKeyName(DEFAULT_KMS_KEY_NAME)
87+
.setDefaultEventBasedHold(DEFAULT_EVENT_BASED_HOLD)
8688
.build();
8789

8890
@Test
@@ -128,6 +130,7 @@ public void testBuilder() {
128130
assertEquals(VERSIONING_ENABLED, BUCKET_INFO.versioningEnabled());
129131
assertEquals(BUCKET_LABELS, BUCKET_INFO.getLabels());
130132
assertEquals(REQUESTER_PAYS, BUCKET_INFO.requesterPays());
133+
assertEquals(DEFAULT_EVENT_BASED_HOLD, BUCKET_INFO.getDefaultEventBasedHold());
131134
}
132135

133136
@Test
@@ -158,6 +161,7 @@ private void compareBuckets(BucketInfo expected, BucketInfo value) {
158161
assertEquals(expected.versioningEnabled(), value.versioningEnabled());
159162
assertEquals(expected.getLabels(), value.getLabels());
160163
assertEquals(expected.requesterPays(), value.requesterPays());
164+
assertEquals(expected.getDefaultEventBasedHold(), value.getDefaultEventBasedHold());
161165
}
162166

163167
@Test

google-cloud-clients/google-cloud-storage/src/test/java/com/google/cloud/storage/BucketTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public class BucketTest {
8282
private static final Map<String, String> BUCKET_LABELS = ImmutableMap.of("label1", "value1");
8383
private static final Boolean REQUESTER_PAYS = true;
8484
private static final String USER_PROJECT = "test-project";
85+
private static final Boolean DEFAULT_EVENT_BASED_HOLD = true;
8586
private static final BucketInfo FULL_BUCKET_INFO = BucketInfo.newBuilder("b")
8687
.setAcl(ACLS)
8788
.setEtag(ETAG)
@@ -101,6 +102,7 @@ public class BucketTest {
101102
.setLabels(BUCKET_LABELS)
102103
.setRequesterPays(REQUESTER_PAYS)
103104
.setDefaultKmsKeyName(DEFAULT_KMS_KEY_NAME)
105+
.setDefaultEventBasedHold(DEFAULT_EVENT_BASED_HOLD)
104106
.build();
105107
private static final BucketInfo BUCKET_INFO =
106108
BucketInfo.newBuilder("b").setMetageneration(42L).build();
@@ -694,6 +696,7 @@ public void testBuilder() {
694696
.setLabels(BUCKET_LABELS)
695697
.setRequesterPays(REQUESTER_PAYS)
696698
.setDefaultKmsKeyName(DEFAULT_KMS_KEY_NAME)
699+
.setDefaultEventBasedHold(DEFAULT_EVENT_BASED_HOLD)
697700
.build();
698701
assertEquals("b", bucket.getName());
699702
assertEquals(ACLS, bucket.getAcl());
@@ -714,6 +717,7 @@ public void testBuilder() {
714717
assertEquals(BUCKET_LABELS, bucket.getLabels());
715718
assertEquals(REQUESTER_PAYS, bucket.requesterPays());
716719
assertEquals(DEFAULT_KMS_KEY_NAME, bucket.getDefaultKmsKeyName());
720+
assertEquals(DEFAULT_EVENT_BASED_HOLD, bucket.getDefaultEventBasedHold());
717721
assertEquals(storage.getOptions(), bucket.getStorage().getOptions());
718722
}
719723
}

google-cloud-clients/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,28 @@ public void testUpdateBucketDefaultKmsKeyName() throws ExecutionException, Inter
209209
}
210210
}
211211

212+
@Test
213+
public void testCreateDefaultEventBasedHoldBucket() throws ExecutionException, InterruptedException {
214+
String bucketName = RemoteStorageHelper.generateBucketName();
215+
Bucket remoteBucket = storage.create(BucketInfo.newBuilder(bucketName).setDefaultEventBasedHold(true).build());
216+
217+
try {
218+
assertTrue(remoteBucket.getDefaultEventBasedHold());
219+
} finally {
220+
RemoteStorageHelper.forceDelete(storage, bucketName, 5, TimeUnit.SECONDS);
221+
}
222+
}
223+
224+
@Test
225+
public void testEnableDisableBucketDefaultEventBasedHold() {
226+
Bucket remoteBucket = storage.get(BUCKET, Storage.BucketGetOption.fields(BucketField.DEFAULT_EVENT_BASED_HOLD, BucketField.BILLING));
227+
assertNull(remoteBucket.getDefaultEventBasedHold());
228+
Bucket updatedBucket = remoteBucket.toBuilder().setDefaultEventBasedHold(true).build().update();
229+
assertTrue(updatedBucket.getDefaultEventBasedHold());
230+
updatedBucket = remoteBucket.toBuilder().setDefaultEventBasedHold(false).build().update().reload();
231+
assertFalse(updatedBucket.getDefaultEventBasedHold());
232+
}
233+
212234
@Test
213235
public void testCreateBlob() {
214236
String blobName = "test-create-blob";

0 commit comments

Comments
 (0)