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 <[email protected]> Authored: Fri Jan 20 00:29:48 2017 -0800 Committer: Andrew Gaul <[email protected]> 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>
