2828import com .google .common .base .MoreObjects ;
2929import com .google .common .collect .ImmutableList ;
3030import com .google .common .collect .ImmutableMap ;
31+ import com .google .common .collect .ImmutableSet ;
3132import com .google .common .collect .Lists ;
3233
3334import java .io .Serializable ;
3435import java .math .BigInteger ;
36+ import java .util .AbstractMap ;
3537import java .util .List ;
3638import java .util .Map ;
3739import java .util .Objects ;
40+ import java .util .Set ;
3841
3942/**
4043 * Google Storage object metadata.
@@ -81,6 +84,14 @@ public StorageObject apply(BlobInfo blobInfo) {
8184 private final String contentLanguage ;
8285 private final Integer componentCount ;
8386
87+ public static final class ImmutableEmptyMap <K , V > extends AbstractMap <K , V > {
88+
89+ @ Override
90+ public Set <Entry <K , V >> entrySet () {
91+ return ImmutableSet .of ();
92+ }
93+ }
94+
8495 public static final class Builder {
8596
8697 private BlobId blobId ;
@@ -99,7 +110,7 @@ public static final class Builder {
99110 private String md5 ;
100111 private String crc32c ;
101112 private String mediaLink ;
102- private ImmutableMap <String , String > metadata ;
113+ private Map <String , String > metadata ;
103114 private Long generation ;
104115 private Long metageneration ;
105116 private Long deleteTime ;
@@ -188,7 +199,8 @@ Builder mediaLink(String mediaLink) {
188199 }
189200
190201 public Builder metadata (Map <String , String > metadata ) {
191- this .metadata = metadata != null ? ImmutableMap .copyOf (metadata ) : null ;
202+ this .metadata = metadata != null ?
203+ ImmutableMap .copyOf (metadata ) : Data .<Map >nullOf (ImmutableEmptyMap .class );
192204 return this ;
193205 }
194206
@@ -315,7 +327,7 @@ public String mediaLink() {
315327 }
316328
317329 public Map <String , String > metadata () {
318- return metadata ;
330+ return Data . isNull ( metadata ) ? null : metadata ;
319331 }
320332
321333 public Long generation () {
0 commit comments