Provide all headers to SwiftObject and Blob
This commit provides parity with the existing Swift and all other
providers.
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 eedfa27..5aa926f 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 @@
}
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 81f690c..47d8c34 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 <a
@@ -44,15 +46,17 @@
private final URI uri;
private final String etag;
private final Date lastModified;
+ private final Multimap<String, String> headers;
private final Map<String, String> metadata;
private final Payload payload;
- protected SwiftObject(String name, URI uri, String etag, Date lastModified, Map<String, String> metadata,
- Payload payload) {
+ protected SwiftObject(String name, URI uri, String etag, Date lastModified,
+ Multimap<String, String> headers, Map<String, String> 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.<String, String> of() : checkNotNull(headers, "headers of %s", name);
this.metadata = metadata == null ? ImmutableMap.<String, String> of() : metadata;
this.payload = checkNotNull(payload, "payload of %s", name);
}
@@ -81,6 +85,10 @@
return lastModified;
}
+ public Multimap<String, String> headers() {
+ return headers;
+ }
+
/**
* Empty except in {@link ObjectApi#head(String) GetObjectMetadata} or
* {@link ObjectApi#get(String) GetObject} commands.
@@ -159,6 +167,7 @@
protected String etag;
protected Date lastModified;
protected Payload payload;
+ protected Multimap<String, String> headers;
protected Map<String, String> metadata = ImmutableMap.of();
/**
@@ -201,6 +210,11 @@
return this;
}
+ public Builder headers(Multimap<String, String> headers) {
+ this.headers = headers;
+ return this;
+ }
+
/**
* Will lower-case all metadata keys due to a swift implementation
* decision.
@@ -217,7 +231,7 @@
}
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 @@
.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 34bf197..158aa6d 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 @@
.etag(from.getFirstHeaderOrNull(ETAG)) //
.payload(from.getPayload()) //
.lastModified(dates.rfc822DateParse(from.getFirstHeaderOrNull(LAST_MODIFIED))) //
+ .headers(from.getHeaders())
.metadata(EntriesWithoutMetaPrefix.INSTANCE.apply(from.getHeaders())).build();
}