From 5a4586439d273b9e48c2f2ea0c69bfb1aa27de26 Mon Sep 17 00:00:00 2001 From: andrey-qlogic Date: Mon, 21 Jan 2019 12:38:51 +0000 Subject: [PATCH] 4117: Added Md5String() method and updated tests. --- .../com/google/cloud/storage/BlobInfo.java | 20 ++++++++++++++++++- .../com/google/cloud/storage/BlobTest.java | 3 +++ .../storage/snippets/StorageSnippets.java | 1 + 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/google-cloud-clients/google-cloud-storage/src/main/java/com/google/cloud/storage/BlobInfo.java b/google-cloud-clients/google-cloud-storage/src/main/java/com/google/cloud/storage/BlobInfo.java index 2ace22d6f9f1..0aca9cd95e60 100644 --- a/google-cloud-clients/google-cloud-storage/src/main/java/com/google/cloud/storage/BlobInfo.java +++ b/google-cloud-clients/google-cloud-storage/src/main/java/com/google/cloud/storage/BlobInfo.java @@ -25,13 +25,13 @@ import com.google.api.services.storage.model.ObjectAccessControl; import com.google.api.services.storage.model.StorageObject; import com.google.api.services.storage.model.StorageObject.Owner; -import com.google.cloud.storage.Blob.Builder; import com.google.common.base.Function; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.io.BaseEncoding; import java.io.Serializable; import java.math.BigInteger; import java.util.AbstractMap; @@ -674,6 +674,24 @@ public String getMd5() { return Data.isNull(md5) ? null : md5; } + /** + * Returns the MD5 hash of blob's data decoded to string. + * + * @see Hashes and ETags: + * Best Practices + */ + public String getMd5String() { + if (md5 == null) { + return null; + } + byte[] decodedMd5 = BaseEncoding.base64().decode(md5); + StringBuilder stringBuilder = new StringBuilder(); + for (byte b : decodedMd5) { + stringBuilder.append(String.format("%02x", b & 0xff)); + } + return stringBuilder.toString(); + } + /** * Returns the CRC32C checksum of blob's data as described in RFC 4960, Appendix B; encoded in diff --git a/google-cloud-clients/google-cloud-storage/src/test/java/com/google/cloud/storage/BlobTest.java b/google-cloud-clients/google-cloud-storage/src/test/java/com/google/cloud/storage/BlobTest.java index ff517d360dd9..c8ce99a1110f 100644 --- a/google-cloud-clients/google-cloud-storage/src/test/java/com/google/cloud/storage/BlobTest.java +++ b/google-cloud-clients/google-cloud-storage/src/test/java/com/google/cloud/storage/BlobTest.java @@ -76,6 +76,7 @@ public class BlobTest { private static final Long GENERATION = 1L; private static final String GENERATED_ID = "B/N:1"; private static final String MD5 = "0xFF00"; + private static final String MD5_STRING = "d31145d3"; private static final String MEDIA_LINK = "http://media/b/n"; private static final Map METADATA = ImmutableMap.of("n1", "v1", "n2", "v2"); private static final Long META_GENERATION = 10L; @@ -516,6 +517,7 @@ public void testBuilder() { assertEquals(ETAG, blob.getEtag()); assertEquals(GENERATED_ID, blob.getGeneratedId()); assertEquals(MD5, blob.getMd5()); + assertEquals(MD5_STRING, blob.getMd5String()); assertEquals(MEDIA_LINK, blob.getMediaLink()); assertEquals(METADATA, blob.getMetadata()); assertEquals(META_GENERATION, blob.getMetageneration()); @@ -547,6 +549,7 @@ public void testBuilder() { assertNull(blob.getEtag()); assertNull(blob.getGeneratedId()); assertNull(blob.getMd5()); + assertNull(blob.getMd5String()); assertNull(blob.getMediaLink()); assertNull(blob.getMetadata()); assertNull(blob.getMetageneration()); diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/StorageSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/StorageSnippets.java index ab2ec4df8edf..7c1f58992ed0 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/StorageSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/StorageSnippets.java @@ -1141,6 +1141,7 @@ public void getBlobMetadata(String bucketName, String blobName) throws StorageEx System.out.println("Id: " + blob.getBlobId()); System.out.println("KmsKeyName: " + blob.getKmsKeyName()); System.out.println("Md5Hash: " + blob.getMd5()); + System.out.println("Md5String: " + blob.getMd5String()); System.out.println("MediaLink: " + blob.getMediaLink()); System.out.println("Metageneration: " + blob.getMetageneration()); System.out.println("Name: " + blob.getName());