Skip to content

Commit 37f08e9

Browse files
committed
POSC support for Storage
1 parent ba10fac commit 37f08e9

4 files changed

Lines changed: 67 additions & 0 deletions

File tree

google-cloud-storage/src/main/java/com/google/cloud/storage/Blob.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,12 @@ public Builder setMetadata(Map<String, String> metadata) {
361361
return this;
362362
}
363363

364+
@Override
365+
public Builder setStorageClass(String storageClass) {
366+
infoBuilder.setStorageClass(storageClass);
367+
return this;
368+
}
369+
364370
@Override
365371
Builder setMetageneration(Long metageneration) {
366372
infoBuilder.setMetageneration(metageneration);

google-cloud-storage/src/main/java/com/google/cloud/storage/BlobInfo.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public StorageObject apply(BlobInfo blobInfo) {
7878
private final String contentEncoding;
7979
private final String contentDisposition;
8080
private final String contentLanguage;
81+
private final String storageClass;
8182
private final Integer componentCount;
8283
private final boolean isDirectory;
8384
private final CustomerEncryption customerEncryption;
@@ -340,6 +341,11 @@ public abstract static class Builder {
340341
@Deprecated
341342
public abstract Builder metadata(Map<String, String> metadata);
342343

344+
/**
345+
* Sets the blob's storage class.
346+
*/
347+
public abstract Builder setStorageClass(String storageClass);
348+
343349
/**
344350
* Sets the blob's user provided metadata.
345351
*/
@@ -357,6 +363,7 @@ public abstract static class Builder {
357363

358364
abstract Builder setCustomerEncryption(CustomerEncryption customerEncryption);
359365

366+
360367
/**
361368
* Creates a {@code BlobInfo} object.
362369
*/
@@ -388,6 +395,7 @@ static final class BuilderImpl extends Builder {
388395
private Long createTime;
389396
private Boolean isDirectory;
390397
private CustomerEncryption customerEncryption;
398+
private String storageClass;
391399

392400
BuilderImpl(BlobId blobId) {
393401
this.blobId = blobId;
@@ -417,6 +425,7 @@ static final class BuilderImpl extends Builder {
417425
updateTime = blobInfo.updateTime;
418426
createTime = blobInfo.createTime;
419427
isDirectory = blobInfo.isDirectory;
428+
storageClass = blobInfo.storageClass;
420429
}
421430

422431
@Override
@@ -582,6 +591,12 @@ public Builder setMetadata(Map<String, String> metadata) {
582591
return this;
583592
}
584593

594+
@Override
595+
public Builder setStorageClass(String storageClass) {
596+
this.storageClass = storageClass;
597+
return this;
598+
}
599+
585600
@Override
586601
Builder setMetageneration(Long metageneration) {
587602
this.metageneration = metageneration;
@@ -649,6 +664,7 @@ public BlobInfo build() {
649664
updateTime = builder.updateTime;
650665
createTime = builder.createTime;
651666
isDirectory = firstNonNull(builder.isDirectory, Boolean.FALSE);
667+
storageClass = builder.storageClass;
652668
}
653669

654670
/**
@@ -1106,6 +1122,13 @@ public CustomerEncryption getCustomerEncryption() {
11061122
return customerEncryption;
11071123
}
11081124

1125+
/**
1126+
* Returns the storage class of the blob.
1127+
*/
1128+
public String getStorageClass() {
1129+
return storageClass;
1130+
}
1131+
11091132
/**
11101133
* Returns a builder for the current blob.
11111134
*/
@@ -1163,6 +1186,10 @@ public ObjectAccessControl apply(Acl acl) {
11631186
if (owner != null) {
11641187
storageObject.setOwner(new Owner().setEntity(owner.toPb()));
11651188
}
1189+
if (storageClass != null) {
1190+
storageObject.setStorageClass(storageClass);
1191+
}
1192+
11661193
Map<String, String> pbMetadata = metadata;
11671194
if (metadata != null && !Data.isNull(metadata)) {
11681195
pbMetadata = Maps.newHashMapWithExpectedSize(metadata.size());
@@ -1341,6 +1368,9 @@ public Acl apply(ObjectAccessControl objectAccessControl) {
13411368
builder.setCustomerEncryption(
13421369
CustomerEncryption.fromPb(storageObject.getCustomerEncryption()));
13431370
}
1371+
if (storageObject.getStorageClass() != null) {
1372+
builder.setStorageClass(storageObject.getStorageClass());
1373+
}
13441374
return builder.build();
13451375
}
13461376
}

google-cloud-storage/src/test/java/com/google/cloud/storage/BlobInfoTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ public class BlobInfoTest {
6666
private static final String KEY_SHA256 = "keySha";
6767
private static final CustomerEncryption CUSTOMER_ENCRYPTION =
6868
new CustomerEncryption(ENCRYPTION_ALGORITHM, KEY_SHA256);
69+
private static final String STORAGE_CLASS = "COLDLINE";
70+
6971
private static final BlobInfo BLOB_INFO = BlobInfo.newBuilder("b", "n", GENERATION)
7072
.setAcl(ACL)
7173
.setComponentCount(COMPONENT_COUNT)
@@ -88,6 +90,7 @@ public class BlobInfoTest {
8890
.setSize(SIZE)
8991
.setUpdateTime(UPDATE_TIME)
9092
.setCreateTime(CREATE_TIME)
93+
.setStorageClass(STORAGE_CLASS)
9194
.build();
9295
private static final BlobInfo DIRECTORY_INFO = BlobInfo.newBuilder("b", "n/")
9396
.setSize(0L)
@@ -188,6 +191,7 @@ public void testBuilder() {
188191
assertEquals(SIZE, BLOB_INFO.getSize());
189192
assertEquals(UPDATE_TIME, BLOB_INFO.getUpdateTime());
190193
assertEquals(CREATE_TIME, BLOB_INFO.getCreateTime());
194+
assertEquals(STORAGE_CLASS, BLOB_INFO.getStorageClass());
191195
assertFalse(BLOB_INFO.isDirectory());
192196
assertEquals("b", DIRECTORY_INFO.getBucket());
193197
assertEquals("n/", DIRECTORY_INFO.getName());
@@ -296,6 +300,7 @@ private void compareBlobs(BlobInfo expected, BlobInfo value) {
296300
assertEquals(expected.getSelfLink(), value.getSelfLink());
297301
assertEquals(expected.getSize(), value.getSize());
298302
assertEquals(expected.getUpdateTime(), value.getUpdateTime());
303+
assertEquals(expected.getStorageClass(), value.getStorageClass());
299304
}
300305

301306
private void compareCustomerEncryptions(CustomerEncryption expected, CustomerEncryption value) {
@@ -342,6 +347,7 @@ public void testToPbAndFromPb() {
342347
assertNull(blobInfo.getSelfLink());
343348
assertEquals(0L, (long) blobInfo.getSize());
344349
assertNull(blobInfo.getUpdateTime());
350+
assertNull(blobInfo.getStorageClass());
345351
assertTrue(blobInfo.isDirectory());
346352
}
347353

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ public class ITStorageTest {
100100
new SecretKeySpec(BaseEncoding.base64().decode(BASE64_KEY), "AES256");
101101
private static final byte[] COMPRESSED_CONTENT = BaseEncoding.base64()
102102
.decode("H4sIAAAAAAAAAPNIzcnJV3DPz0/PSVVwzskvTVEILskvSkxPVQQA/LySchsAAAA=");
103+
private static final String STORAGE_CLASS_COLDLINE = "COLDLINE";
104+
private static final String STORAGE_CLASS_STANDARD = "STANDARD";
103105

104106
@BeforeClass
105107
public static void beforeClass() throws NoSuchAlgorithmException, InvalidKeySpecException {
@@ -789,6 +791,29 @@ public void testCopyBlobUpdateMetadata() {
789791
assertTrue(storage.delete(BUCKET, targetBlobName));
790792
}
791793

794+
@Test
795+
public void testCopyBlobUpdateStorageClass() {
796+
String sourceBlobName = "test-copy-blob-update-storage-class-source";
797+
BlobId source = BlobId.of(BUCKET, sourceBlobName);
798+
BlobInfo sourceInfo =
799+
BlobInfo.newBuilder(source).setStorageClass(STORAGE_CLASS_STANDARD).build();
800+
Blob remoteSourceBlob = storage.create(sourceInfo, BLOB_BYTE_CONTENT);
801+
assertNotNull(remoteSourceBlob);
802+
assertEquals(STORAGE_CLASS_STANDARD, remoteSourceBlob.getStorageClass());
803+
804+
String targetBlobName = "test-copy-blob-update-storage-class-target";
805+
BlobInfo targetInfo = BlobInfo
806+
.newBuilder(BUCKET, targetBlobName).setStorageClass(STORAGE_CLASS_COLDLINE).build();
807+
Storage.CopyRequest req = Storage.CopyRequest.of(source, targetInfo);
808+
CopyWriter copyWriter = storage.copy(req);
809+
assertEquals(BUCKET, copyWriter.getResult().getBucket());
810+
assertEquals(targetBlobName, copyWriter.getResult().getName());
811+
assertEquals(STORAGE_CLASS_COLDLINE, copyWriter.getResult().getStorageClass());
812+
assertTrue(copyWriter.isDone());
813+
assertTrue(remoteSourceBlob.delete());
814+
assertTrue(storage.delete(BUCKET, targetBlobName));
815+
}
816+
792817
@Test
793818
public void testCopyBlobNoContentType() {
794819
String sourceBlobName = "test-copy-blob-no-content-type-source";

0 commit comments

Comments
 (0)