You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2017/01/23 23:52:01 UTC

jclouds git commit: JCLOUDS-1228: Include PublicAccess in responses

Repository: jclouds
Updated Branches:
  refs/heads/master 32bb2db06 -> 87a6f2a61


JCLOUDS-1228: Include PublicAccess in responses

REST API version 2016-05-31 includes PublicAccess in List Containers
and Get Container Properties APIs.


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/87a6f2a6
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/87a6f2a6
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/87a6f2a6

Branch: refs/heads/master
Commit: 87a6f2a615d2986490e85e26b86ce0ed6f04ac17
Parents: 32bb2db
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Jan 20 00:29:48 2017 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Jan 20 12:02:18 2017 -0800

----------------------------------------------------------------------
 .../azureblob/domain/ContainerProperties.java   |  2 ++
 .../MutableContainerPropertiesWithMetadata.java |  2 ++
 .../jclouds/azureblob/domain/PublicAccess.java  |  3 +++
 .../internal/ContainerPropertiesImpl.java       | 21 +++++++++++++++++++-
 ...ableContainerPropertiesWithMetadataImpl.java | 18 +++++++++++++++++
 .../ParseContainerPropertiesFromHeaders.java    |  1 +
 .../AccountNameEnumerationResultsHandler.java   |  7 ++++++-
 .../azureblob/AzureBlobClientLiveTest.java      | 17 +++++++++++-----
 ...ccountNameEnumerationResultsHandlerTest.java | 13 ++++++------
 .../src/test/resources/test_list_containers.xml |  2 ++
 .../resources/test_list_containers_options.xml  |  2 ++
 11 files changed, 75 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/87a6f2a6/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/ContainerProperties.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/ContainerProperties.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/ContainerProperties.java
index 59fb7f6..2cdabdf 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/ContainerProperties.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/ContainerProperties.java
@@ -29,5 +29,7 @@ public interface ContainerProperties extends Comparable<ContainerProperties> {
 
    String getETag();
 
+   PublicAccess getPublicAccess();
+
    Map<String, String> getMetadata();
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/87a6f2a6/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/MutableContainerPropertiesWithMetadata.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/MutableContainerPropertiesWithMetadata.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/MutableContainerPropertiesWithMetadata.java
index b4a6ed7..2055d5c 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/MutableContainerPropertiesWithMetadata.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/MutableContainerPropertiesWithMetadata.java
@@ -46,6 +46,8 @@ public interface MutableContainerPropertiesWithMetadata extends ContainerPropert
     */
    void setETag(String eTag);
 
+   void setPublicAccess(PublicAccess publicAccess);
+
    /**
     * @see ListableContainerProperties#setMetadata
     */

http://git-wip-us.apache.org/repos/asf/jclouds/blob/87a6f2a6/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/PublicAccess.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/PublicAccess.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/PublicAccess.java
index 61d0a1a..7ea4ec2 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/PublicAccess.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/PublicAccess.java
@@ -40,4 +40,7 @@ public enum PublicAccess {
     */
    PRIVATE;
 
+   public static PublicAccess fromString(String string) {
+      return valueOf(string.toUpperCase());
+   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/87a6f2a6/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/ContainerPropertiesImpl.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/ContainerPropertiesImpl.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/ContainerPropertiesImpl.java
index 128e0a0..f9ffb95 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/ContainerPropertiesImpl.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/ContainerPropertiesImpl.java
@@ -23,6 +23,7 @@ import java.util.Date;
 import java.util.Map;
 
 import org.jclouds.azureblob.domain.ContainerProperties;
+import org.jclouds.azureblob.domain.PublicAccess;
 
 import com.google.common.collect.Maps;
 
@@ -35,14 +36,21 @@ public class ContainerPropertiesImpl implements ContainerProperties {
    private final URI url;
    private final Date lastModified;
    private final String eTag;
+   private final PublicAccess publicAccess;
    private final Map<String, String> metadata = Maps.newLinkedHashMap();
 
-   public ContainerPropertiesImpl(URI url, Date lastModified, String eTag, Map<String, String> metadata) {
+   public ContainerPropertiesImpl(URI url, Date lastModified, String eTag, Map<String, String> metadata, PublicAccess publicAccess) {
       this.url = checkNotNull(url, "url");
       this.name = checkNotNull(url.getPath(), "url.getPath()").replaceFirst("/", "");
       this.lastModified = checkNotNull(lastModified, "lastModified");
       this.eTag = checkNotNull(eTag, "eTag");
       this.metadata.putAll(checkNotNull(metadata, "metadata"));
+      this.publicAccess = checkNotNull(publicAccess);
+   }
+
+   @Deprecated
+   public ContainerPropertiesImpl(URI url, Date lastModified, String eTag, Map<String, String> metadata) {
+      this(url, lastModified, eTag, metadata, PublicAccess.PRIVATE);
    }
 
    /**
@@ -90,6 +98,11 @@ public class ContainerPropertiesImpl implements ContainerProperties {
    }
 
    @Override
+   public PublicAccess getPublicAccess() {
+      return publicAccess;
+   }
+
+   @Override
    public int hashCode() {
       final int prime = 31;
       int result = 1;
@@ -97,6 +110,7 @@ public class ContainerPropertiesImpl implements ContainerProperties {
       result = prime * result + ((lastModified == null) ? 0 : lastModified.hashCode());
       result = prime * result + ((name == null) ? 0 : name.hashCode());
       result = prime * result + ((url == null) ? 0 : url.hashCode());
+      result = prime * result + ((publicAccess == null) ? 0 : publicAccess.hashCode());
       return result;
    }
 
@@ -129,6 +143,11 @@ public class ContainerPropertiesImpl implements ContainerProperties {
             return false;
       } else if (!url.equals(other.url))
          return false;
+      if (publicAccess == null) {
+         if (other.publicAccess != null)
+            return false;
+      } else if (!publicAccess.equals(other.publicAccess))
+         return false;
       return true;
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/87a6f2a6/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/MutableContainerPropertiesWithMetadataImpl.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/MutableContainerPropertiesWithMetadataImpl.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/MutableContainerPropertiesWithMetadataImpl.java
index a424b56..4c10033 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/MutableContainerPropertiesWithMetadataImpl.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/MutableContainerPropertiesWithMetadataImpl.java
@@ -22,6 +22,7 @@ import java.util.Map;
 
 import org.jclouds.azureblob.domain.ContainerProperties;
 import org.jclouds.azureblob.domain.MutableContainerPropertiesWithMetadata;
+import org.jclouds.azureblob.domain.PublicAccess;
 
 import com.google.common.collect.Maps;
 
@@ -35,6 +36,7 @@ public class MutableContainerPropertiesWithMetadataImpl implements
    private URI url;
    private Date lastModified;
    private String eTag;
+   private PublicAccess publicAccess;
 
    private Map<String, String> metadata = Maps.newHashMap();
 
@@ -65,6 +67,11 @@ public class MutableContainerPropertiesWithMetadataImpl implements
       return eTag;
    }
 
+   @Override
+   public PublicAccess getPublicAccess() {
+      return publicAccess;
+   }
+
    /**
     *{@inheritDoc}
     */
@@ -89,6 +96,11 @@ public class MutableContainerPropertiesWithMetadataImpl implements
       this.eTag = eTag;
    }
 
+   @Override
+   public void setPublicAccess(PublicAccess publicAccess) {
+      this.publicAccess = publicAccess;
+   }
+
    /**
     *{@inheritDoc}
     */
@@ -130,6 +142,7 @@ public class MutableContainerPropertiesWithMetadataImpl implements
       result = prime * result + ((metadata == null) ? 0 : metadata.hashCode());
       result = prime * result + ((name == null) ? 0 : name.hashCode());
       result = prime * result + ((url == null) ? 0 : url.hashCode());
+      result = prime * result + ((publicAccess == null) ? 0 : publicAccess.hashCode());
       return result;
    }
 
@@ -167,6 +180,11 @@ public class MutableContainerPropertiesWithMetadataImpl implements
             return false;
       } else if (!url.equals(other.url))
          return false;
+      if (publicAccess == null) {
+         if (other.publicAccess != null)
+            return false;
+      } else if (!publicAccess.equals(other.publicAccess))
+         return false;
       return true;
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/87a6f2a6/providers/azureblob/src/main/java/org/jclouds/azureblob/functions/ParseContainerPropertiesFromHeaders.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/functions/ParseContainerPropertiesFromHeaders.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/functions/ParseContainerPropertiesFromHeaders.java
index a4f407c..9fd9be2 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azureblob/functions/ParseContainerPropertiesFromHeaders.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/functions/ParseContainerPropertiesFromHeaders.java
@@ -63,6 +63,7 @@ public class ParseContainerPropertiesFromHeaders implements Function<HttpRespons
       parseLastModifiedOrThrowException(from, to);
       addETagTo(from, to);
       to.setUrl(request.getEndpoint());
+      to.setPublicAccess(new ParsePublicAccessHeader().apply(from));
       return to;
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/87a6f2a6/providers/azureblob/src/main/java/org/jclouds/azureblob/xml/AccountNameEnumerationResultsHandler.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/xml/AccountNameEnumerationResultsHandler.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/xml/AccountNameEnumerationResultsHandler.java
index 1d71aeb..48b3a6e 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azureblob/xml/AccountNameEnumerationResultsHandler.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/xml/AccountNameEnumerationResultsHandler.java
@@ -29,6 +29,7 @@ import javax.inject.Inject;
 import org.jclouds.azure.storage.domain.BoundedSet;
 import org.jclouds.azure.storage.domain.internal.BoundedHashSet;
 import org.jclouds.azureblob.domain.ContainerProperties;
+import org.jclouds.azureblob.domain.PublicAccess;
 import org.jclouds.azureblob.domain.internal.ContainerPropertiesImpl;
 import org.jclouds.date.DateService;
 import org.jclouds.http.functions.ParseSax;
@@ -56,6 +57,7 @@ public class AccountNameEnumerationResultsHandler extends
    private String currentName;
    private Date currentLastModified;
    private String currentETag;
+   private PublicAccess currentPublicAccess = PublicAccess.PRIVATE;
    private boolean inMetadata;
 
    private Map<String, String> currentMetadata = Maps.newHashMap();
@@ -111,10 +113,11 @@ public class AccountNameEnumerationResultsHandler extends
             throw propagate(use);
          }
          containerMetadata.add(new ContainerPropertiesImpl(currentUrl, currentLastModified,
-                  currentETag, currentMetadata));
+                  currentETag, currentMetadata, currentPublicAccess));
          currentName = null;
          currentLastModified = null;
          currentETag = null;
+         currentPublicAccess = PublicAccess.PRIVATE;
          currentMetadata = Maps.newHashMap();
       } else if (qName.equals("Name")) {
          currentName = currentText.toString().trim();
@@ -122,6 +125,8 @@ public class AccountNameEnumerationResultsHandler extends
          currentLastModified = dateParser.rfc822DateParse(currentText.toString().trim());
       } else if (qName.equals("Etag")) {
          currentETag = currentText.toString().trim();
+      } else if (qName.equals("PublicAccess")) {
+         currentPublicAccess = PublicAccess.fromString(currentText.toString().trim());
       }
       currentText.setLength(0);
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/87a6f2a6/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientLiveTest.java b/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientLiveTest.java
index 07f1944..2489ea2 100644
--- a/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientLiveTest.java
+++ b/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientLiveTest.java
@@ -129,11 +129,18 @@ public class AzureBlobClientLiveTest extends BaseBlobStoreIntegrationTest {
             throw e;
          }
       }
-      // TODO
-      // URL url = new URL(String.format("http://%s.blob.core.windows.net/%s",
-      // identity,
-      // publicContainer));
-      // Utils.toStringAndClose(url.openStream());
+
+      ContainerProperties properties = null;
+      for (ContainerProperties p : getApi().listContainers(includeMetadata())) {
+         if (p.getName().equals(publicContainer)) {
+            properties = p;
+            break;
+         }
+      }
+      assertThat(properties.getPublicAccess()).isEqualTo(PublicAccess.BLOB);
+
+      properties = getApi().getContainerProperties(publicContainer);
+      assertThat(properties.getPublicAccess()).isEqualTo(PublicAccess.BLOB);
    }
 
    @Test(timeOut = 10 * 60 * 1000)

http://git-wip-us.apache.org/repos/asf/jclouds/blob/87a6f2a6/providers/azureblob/src/test/java/org/jclouds/azureblob/xml/AccountNameEnumerationResultsHandlerTest.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/test/java/org/jclouds/azureblob/xml/AccountNameEnumerationResultsHandlerTest.java b/providers/azureblob/src/test/java/org/jclouds/azureblob/xml/AccountNameEnumerationResultsHandlerTest.java
index ac08fb4..fd42d99 100644
--- a/providers/azureblob/src/test/java/org/jclouds/azureblob/xml/AccountNameEnumerationResultsHandlerTest.java
+++ b/providers/azureblob/src/test/java/org/jclouds/azureblob/xml/AccountNameEnumerationResultsHandlerTest.java
@@ -25,6 +25,7 @@ import java.util.SortedSet;
 import org.jclouds.azure.storage.domain.BoundedSet;
 import org.jclouds.azure.storage.domain.internal.BoundedHashSet;
 import org.jclouds.azureblob.domain.ContainerProperties;
+import org.jclouds.azureblob.domain.PublicAccess;
 import org.jclouds.azureblob.domain.internal.ContainerPropertiesImpl;
 import org.jclouds.date.DateService;
 import org.jclouds.http.functions.BaseHandlerTest;
@@ -57,15 +58,15 @@ public class AccountNameEnumerationResultsHandlerTest extends BaseHandlerTest {
       contents.add(new ContainerPropertiesImpl(URI
                .create("http://myaccount.blob.core.windows.net/audio"), dateService
                .rfc822DateParse("Wed, 13 Aug 2008 20:39:39 GMT"), "0x8CACB9BD7C6B1B2", Maps
-               .<String, String> newHashMap()));
+               .<String, String> newHashMap(), PublicAccess.CONTAINER));
       contents.add(new ContainerPropertiesImpl(URI
                .create("http://myaccount.blob.core.windows.net/images"), dateService
                .rfc822DateParse("Wed, 14 Aug 2008 20:39:39 GMT"), "0x8CACB9BD7C1EEEC", Maps
-               .<String, String> newHashMap()));
+               .<String, String> newHashMap(), PublicAccess.BLOB));
       contents.add(new ContainerPropertiesImpl(URI
                .create("http://myaccount.blob.core.windows.net/textfiles"), dateService
                .rfc822DateParse("Wed, 15 Aug 2008 20:39:39 GMT"), "0x8CACB9BD7BACAC3", Maps
-               .<String, String> newHashMap()));
+               .<String, String> newHashMap(), PublicAccess.PRIVATE));
       BoundedSet<ContainerProperties> list = new BoundedHashSet<ContainerProperties>(contents, URI
                .create("http://myaccount.blob.core.windows.net/"), null, null, 3, "video");
 
@@ -80,15 +81,15 @@ public class AccountNameEnumerationResultsHandlerTest extends BaseHandlerTest {
       contents.add(new ContainerPropertiesImpl(URI
                .create("http://myaccount.blob.core.windows.net/audio"), dateService
                .rfc822DateParse("Wed, 13 Aug 2008 20:39:39 GMT"), "0x8CACB9BD7C6B1B2", Maps
-               .<String, String> newHashMap()));
+               .<String, String> newHashMap(), PublicAccess.CONTAINER));
       contents.add(new ContainerPropertiesImpl(URI
                .create("http://myaccount.blob.core.windows.net/images"), dateService
                .rfc822DateParse("Wed, 14 Aug 2008 20:39:39 GMT"), "0x8CACB9BD7C1EEEC", Maps
-               .<String, String> newHashMap()));
+               .<String, String> newHashMap(), PublicAccess.BLOB));
       contents.add(new ContainerPropertiesImpl(URI
                .create("http://myaccount.blob.core.windows.net/textfiles"), dateService
                .rfc822DateParse("Wed, 15 Aug 2008 20:39:39 GMT"), "0x8CACB9BD7BACAC3", Maps
-               .<String, String> newHashMap()));
+               .<String, String> newHashMap(), PublicAccess.PRIVATE));
       InputStream is = getClass().getResourceAsStream("/test_list_containers_options.xml");
       BoundedSet<ContainerProperties> list = new BoundedHashSet<ContainerProperties>(contents, URI
                .create("http://myaccount.blob.core.windows.net"), "prefix", "marker", 1, "video");

http://git-wip-us.apache.org/repos/asf/jclouds/blob/87a6f2a6/providers/azureblob/src/test/resources/test_list_containers.xml
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/test/resources/test_list_containers.xml b/providers/azureblob/src/test/resources/test_list_containers.xml
index 348f266..facadaa 100644
--- a/providers/azureblob/src/test/resources/test_list_containers.xml
+++ b/providers/azureblob/src/test/resources/test_list_containers.xml
@@ -6,11 +6,13 @@
       <Name>audio</Name>
       <Last-Modified>Wed, 13 Aug 2008 20:39:39 GMT</Last-Modified>
       <Etag>0x8CACB9BD7C6B1B2</Etag>
+      <PublicAccess>container</PublicAccess>
     </Container>
     <Container>
       <Name>images</Name>
       <Last-Modified>Wed, 14 Aug 2008 20:39:39 GMT</Last-Modified>
       <Etag>0x8CACB9BD7C1EEEC</Etag>
+      <PublicAccess>blob</PublicAccess>
     </Container>
     <Container>
       <Name>textfiles</Name>

http://git-wip-us.apache.org/repos/asf/jclouds/blob/87a6f2a6/providers/azureblob/src/test/resources/test_list_containers_options.xml
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/test/resources/test_list_containers_options.xml b/providers/azureblob/src/test/resources/test_list_containers_options.xml
index 4a1c45e..76b86bd 100644
--- a/providers/azureblob/src/test/resources/test_list_containers_options.xml
+++ b/providers/azureblob/src/test/resources/test_list_containers_options.xml
@@ -8,11 +8,13 @@
       <Name>audio</Name>
       <Last-Modified>Wed, 13 Aug 2008 20:39:39 GMT</Last-Modified>
       <Etag>0x8CACB9BD7C6B1B2</Etag>
+      <PublicAccess>container</PublicAccess>
     </Container>
     <Container>
       <Name>images</Name>
       <Last-Modified>Wed, 14 Aug 2008 20:39:39 GMT</Last-Modified>
       <Etag>0x8CACB9BD7C1EEEC</Etag>
+      <PublicAccess>blob</PublicAccess>
     </Container>
     <Container>
       <Name>textfiles</Name>