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();
    }

Reply via email to