diff --git a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java index eedfa277d6..5aa926f648 100644 --- a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java +++ b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java @@ -215,6 +215,7 @@ public Blob getBlob(String container, String name, GetOptions options) { } Blob blob = new BlobImpl(toBlobMetadata(container).apply(object)); blob.setPayload(object.payload()); + blob.setAllHeaders(object.headers()); return blob; } diff --git a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/domain/SwiftObject.java b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/domain/SwiftObject.java index 81f690cf56..47d8c34c1a 100644 --- a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/domain/SwiftObject.java +++ b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/domain/SwiftObject.java @@ -32,6 +32,8 @@ import com.google.common.base.Objects; import com.google.common.base.Objects.ToStringHelper; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; /** * @see { private final URI uri; private final String etag; private final Date lastModified; + private final Multimap headers; private final Map metadata; private final Payload payload; - protected SwiftObject(String name, URI uri, String etag, Date lastModified, Map metadata, - Payload payload) { + protected SwiftObject(String name, URI uri, String etag, Date lastModified, + Multimap headers, Map metadata, Payload payload) { this.name = checkNotNull(name, "name"); this.uri = checkNotNull(uri, "uri of %s", uri); this.etag = checkNotNull(etag, "etag of %s", name).replace("\"", ""); this.lastModified = checkNotNull(lastModified, "lastModified of %s", name); + this.headers = headers == null ? ImmutableMultimap. of() : checkNotNull(headers, "headers of %s", name); this.metadata = metadata == null ? ImmutableMap. of() : metadata; this.payload = checkNotNull(payload, "payload of %s", name); } @@ -81,6 +85,10 @@ public Date lastModified() { return lastModified; } + public Multimap headers() { + return headers; + } + /** * Empty except in {@link ObjectApi#head(String) GetObjectMetadata} or * {@link ObjectApi#get(String) GetObject} commands. @@ -159,6 +167,7 @@ public static class Builder { protected String etag; protected Date lastModified; protected Payload payload; + protected Multimap headers; protected Map metadata = ImmutableMap.of(); /** @@ -201,6 +210,11 @@ public Builder payload(Payload payload) { return this; } + public Builder headers(Multimap headers) { + this.headers = headers; + return this; + } + /** * Will lower-case all metadata keys due to a swift implementation * decision. @@ -217,7 +231,7 @@ public Builder metadata(Map metadata) { } public SwiftObject build() { - return new SwiftObject(name, uri, etag, lastModified, metadata, payload); + return new SwiftObject(name, uri, etag, lastModified, headers, metadata, payload); } public Builder fromObject(SwiftObject from) { @@ -225,6 +239,7 @@ public Builder fromObject(SwiftObject from) { .uri(from.uri()) // .etag(from.etag()) // .lastModified(from.lastModified()) // + .headers(from.headers()) // .metadata(from.metadata()) // .payload(from.payload()); } diff --git a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectFromResponse.java b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectFromResponse.java index 34bf19715f..158aa6d9c9 100644 --- a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectFromResponse.java +++ b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectFromResponse.java @@ -52,6 +52,7 @@ public SwiftObject apply(HttpResponse from) { .etag(from.getFirstHeaderOrNull(ETAG)) // .payload(from.getPayload()) // .lastModified(dates.rfc822DateParse(from.getFirstHeaderOrNull(LAST_MODIFIED))) // + .headers(from.getHeaders()) .metadata(EntriesWithoutMetaPrefix.INSTANCE.apply(from.getHeaders())).build(); }