JCLOUDS-306. expose Container.anybodyRead
Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/commit/523b1342 Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/tree/523b1342 Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/diff/523b1342 Branch: refs/heads/master Commit: 523b134256a781e7c8a5aaf314301cee7f7bd702 Parents: fd3f8cd Author: Adrian Cole <[email protected]> Authored: Sun Sep 29 23:47:23 2013 -0700 Committer: Adrian Cole <[email protected]> Committed: Mon Sep 30 00:16:17 2013 -0700 ---------------------------------------------------------------------- .../openstack/swift/v1/domain/Container.java | 37 +++++++++++++++++--- .../v1/functions/ParseContainerFromHeaders.java | 3 +- .../swift/v1/features/ContainerApiMockTest.java | 3 -- .../features/CreatePublicContainerLiveTest.java | 29 +++------------ 4 files changed, 39 insertions(+), 33 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/523b1342/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/domain/Container.java ---------------------------------------------------------------------- diff --git a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/domain/Container.java b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/domain/Container.java index cfee278..eda6a6b 100644 --- a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/domain/Container.java +++ b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/domain/Container.java @@ -25,9 +25,11 @@ import java.util.Map; import java.util.Map.Entry; import org.jclouds.openstack.swift.v1.features.ContainerApi; +import org.jclouds.openstack.swift.v1.options.CreateContainerOptions; import com.google.common.base.Objects; import com.google.common.base.Objects.ToStringHelper; +import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; /** @@ -40,13 +42,16 @@ public class Container implements Comparable<Container> { private final String name; private final long objectCount; private final long bytesUsed; + private final Optional<Boolean> anybodyRead; private final Map<String, String> metadata; - @ConstructorProperties({ "name", "count", "bytes", "metadata" }) - protected Container(String name, long objectCount, long bytesUsed, Map<String, String> metadata) { + @ConstructorProperties({ "name", "count", "bytes", "anybodyRead", "metadata" }) + protected Container(String name, long objectCount, long bytesUsed, Optional<Boolean> anybodyRead, + Map<String, String> metadata) { this.name = checkNotNull(name, "name"); this.objectCount = objectCount; this.bytesUsed = bytesUsed; + this.anybodyRead = anybodyRead == null ? Optional.<Boolean> absent() : anybodyRead; this.metadata = metadata == null ? ImmutableMap.<String, String> of() : metadata; } @@ -63,6 +68,17 @@ public class Container implements Comparable<Container> { } /** + * Absent except in {@link ContainerApi#get(String) GetContainer} commands. + * + * When present, designates that the container is publicly readable. + * + * @see CreateContainerOptions#anybodyRead() + */ + public Optional<Boolean> anybodyRead() { + return anybodyRead; + } + + /** * Empty except in {@link ContainerApi#get(String) GetContainer} commands. * * <h3>Note</h3> @@ -92,7 +108,7 @@ public class Container implements Comparable<Container> { @Override public int hashCode() { - return Objects.hashCode(name(), objectCount(), bytesUsed(), metadata()); + return Objects.hashCode(name(), objectCount(), bytesUsed(), anybodyRead(), metadata()); } @Override @@ -101,10 +117,11 @@ public class Container implements Comparable<Container> { } protected ToStringHelper string() { - return toStringHelper("") // + return toStringHelper("").omitNullValues() // .add("name", name()) // .add("objectCount", objectCount()) // .add("bytesUsed", bytesUsed()) // + .add("anybodyRead", anybodyRead().orNull()) // .add("metadata", metadata()); } @@ -129,6 +146,7 @@ public class Container implements Comparable<Container> { protected String name; protected long objectCount; protected long bytesUsed; + protected Optional<Boolean> anybodyRead = Optional.absent(); protected Map<String, String> metadata = ImmutableMap.of(); /** @@ -156,6 +174,14 @@ public class Container implements Comparable<Container> { } /** + * @see Container#anybodyRead() + */ + public Builder anybodyRead(Boolean anybodyRead) { + this.anybodyRead = Optional.fromNullable(anybodyRead); + return this; + } + + /** * Will lower-case all metadata keys due to a swift implementation * decision. * @@ -171,13 +197,14 @@ public class Container implements Comparable<Container> { } public Container build() { - return new Container(name, objectCount, bytesUsed, metadata); + return new Container(name, objectCount, bytesUsed, anybodyRead, metadata); } public Builder fromContainer(Container from) { return name(from.name()) // .objectCount(from.objectCount()) // .bytesUsed(from.bytesUsed()) // + .anybodyRead(from.anybodyRead().orNull()) // .metadata(from.metadata()); } } http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/523b1342/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseContainerFromHeaders.java ---------------------------------------------------------------------- diff --git a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseContainerFromHeaders.java b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseContainerFromHeaders.java index e246af5..5fb3c9f 100644 --- a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseContainerFromHeaders.java +++ b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseContainerFromHeaders.java @@ -27,7 +27,7 @@ import com.google.common.base.Function; public class ParseContainerFromHeaders implements Function<HttpResponse, Container>, InvocationContext<ParseContainerFromHeaders> { - private String name; + String name; @Override public Container apply(HttpResponse from) { @@ -35,6 +35,7 @@ public class ParseContainerFromHeaders implements Function<HttpResponse, Contain .name(name) // .bytesUsed(Long.parseLong(from.getFirstHeaderOrNull("X-Container-Bytes-Used"))) // .objectCount(Long.parseLong(from.getFirstHeaderOrNull("X-Container-Object-Count"))) // + .anybodyRead(".r:*,.rlistings".equals(from.getFirstHeaderOrNull("X-Container-Read"))) // .metadata(EntriesWithoutMetaPrefix.INSTANCE.apply(from.getHeaders())).build(); } http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/523b1342/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java ---------------------------------------------------------------------- diff --git a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java index 159021e..6431a99 100644 --- a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java +++ b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java @@ -36,9 +36,6 @@ import com.squareup.okhttp.mockwebserver.MockResponse; import com.squareup.okhttp.mockwebserver.MockWebServer; import com.squareup.okhttp.mockwebserver.RecordedRequest; -/** - * @author Adrian Cole - */ @Test public class ContainerApiMockTest extends BaseSwiftMockTest { http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/523b1342/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/CreatePublicContainerLiveTest.java ---------------------------------------------------------------------- diff --git a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/CreatePublicContainerLiveTest.java b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/CreatePublicContainerLiveTest.java index 83f586e..f6251d0 100644 --- a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/CreatePublicContainerLiveTest.java +++ b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/CreatePublicContainerLiveTest.java @@ -16,40 +16,22 @@ */ package org.jclouds.openstack.swift.v1.features; -import static org.jclouds.io.Payloads.newStringPayload; import static org.jclouds.openstack.swift.v1.options.CreateContainerOptions.Builder.anybodyRead; -import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; -import java.io.InputStream; - -import org.jclouds.http.options.GetOptions; import org.jclouds.openstack.swift.v1.internal.BaseSwiftApiLiveTest; -import org.jclouds.util.Strings2; import org.testng.annotations.AfterClass; import org.testng.annotations.Test; -import com.google.common.collect.ImmutableMap; - -/** - * @author Adrian Cole - */ @Test(groups = "live", testName = "CreatePublicContainerLiveTest") public class CreatePublicContainerLiveTest extends BaseSwiftApiLiveTest { private String name = getClass().getSimpleName(); - private String containerName = getClass().getSimpleName() + "Container"; - public void anybodyReadObjectUri() throws Exception { + public void anybodyReadUpdatesMetadata() throws Exception { for (String regionId : api.configuredRegions()) { - api.containerApiInRegion(regionId).createIfAbsent(containerName, anybodyRead()); - api.containerApiInRegion(regionId).get(containerName); - - ObjectApi objectApi = api.objectApiInRegionForContainer(regionId, containerName); - objectApi.replace(name, newStringPayload("swifty"), ImmutableMap.<String, String> of()); - - InputStream publicStream = objectApi.get(name, new GetOptions()).uri().toURL().openStream(); - - assertEquals(Strings2.toStringAndClose(publicStream), "swifty"); + api.containerApiInRegion(regionId).createIfAbsent(name, anybodyRead()); + assertTrue(api.containerApiInRegion(regionId).get(name).anybodyRead().get()); } } @@ -57,8 +39,7 @@ public class CreatePublicContainerLiveTest extends BaseSwiftApiLiveTest { @AfterClass(groups = "live") public void tearDown() { for (String regionId : api.configuredRegions()) { - api.objectApiInRegionForContainer(regionId, containerName).delete(name); - api.containerApiInRegion(regionId).deleteIfEmpty(containerName); + api.containerApiInRegion(regionId).deleteIfEmpty(name); } super.tearDown(); }
