From fe13b07233c520b21fcf4e86c093696401cf8e69 Mon Sep 17 00:00:00 2001 From: Timur Alperovich Date: Tue, 9 Jun 2015 14:28:29 -0700 Subject: [PATCH] JCLOUDS-929: Implement delimiter support in S3. Plumb the delimiter option to the S3 API. --- .../functions/BucketToResourceList.java | 6 +----- .../functions/ContainerToBucketListOptions.java | 16 +++++++++++++--- .../functions/BucketToContainerListOptions.java | 4 ++-- .../integration/S3ContainerLiveTest.java | 7 ------- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/apis/s3/src/main/java/org/jclouds/s3/blobstore/functions/BucketToResourceList.java b/apis/s3/src/main/java/org/jclouds/s3/blobstore/functions/BucketToResourceList.java index 9d40322e4de..7d02aecc7a7 100644 --- a/apis/s3/src/main/java/org/jclouds/s3/blobstore/functions/BucketToResourceList.java +++ b/apis/s3/src/main/java/org/jclouds/s3/blobstore/functions/BucketToResourceList.java @@ -24,7 +24,6 @@ import org.jclouds.blobstore.domain.PageSet; import org.jclouds.blobstore.domain.StorageMetadata; -import org.jclouds.blobstore.domain.StorageType; import org.jclouds.blobstore.domain.internal.PageSetImpl; import org.jclouds.s3.domain.ListBucketResponse; @@ -60,10 +59,7 @@ public PageSet apply(ListBucketResponse from) { Map nameToMd = Maps.uniqueIndex(contents, indexer); for (String prefix : from.getCommonPrefixes()) { - prefix = prefix.endsWith("/") ? prefix.substring(0, prefix.lastIndexOf('/')) : prefix; - if (!nameToMd.containsKey(prefix) - || nameToMd.get(prefix).getType() != StorageType.RELATIVE_PATH) - contents.add(prefix2ResourceMd.apply(prefix)); + contents.add(prefix2ResourceMd.apply(prefix)); } return new PageSetImpl(contents, from.getNextMarker()); } diff --git a/apis/s3/src/main/java/org/jclouds/s3/blobstore/functions/ContainerToBucketListOptions.java b/apis/s3/src/main/java/org/jclouds/s3/blobstore/functions/ContainerToBucketListOptions.java index fd8e924167c..a5d9231b624 100644 --- a/apis/s3/src/main/java/org/jclouds/s3/blobstore/functions/ContainerToBucketListOptions.java +++ b/apis/s3/src/main/java/org/jclouds/s3/blobstore/functions/ContainerToBucketListOptions.java @@ -36,12 +36,22 @@ public ListBucketOptions apply(ListContainerOptions from) { ListBucketOptions httpOptions = new ListBucketOptions(); if (!from.isRecursive()) { - httpOptions.delimiter("/"); + if (from.getDelimiter() != null) { + httpOptions.delimiter(from.getDelimiter().toString()); + } else { + httpOptions.delimiter("/"); + } } if (from.getDir() != null) {// TODO unit test String path = from.getDir(); - if (!path.endsWith("/")) - path = path + "/"; + if (from.getDelimiter() != null) { + if (!path.endsWith(from.getDelimiter().toString())) { + path += from.getDelimiter(); + } + } else { + if (!path.endsWith("/")) + path = path + "/"; + } httpOptions.withPrefix(path); } if (from.getPrefix() != null) { diff --git a/apis/s3/src/test/java/org/jclouds/s3/blobstore/functions/BucketToContainerListOptions.java b/apis/s3/src/test/java/org/jclouds/s3/blobstore/functions/BucketToContainerListOptions.java index 51e159c4738..578097789a7 100644 --- a/apis/s3/src/test/java/org/jclouds/s3/blobstore/functions/BucketToContainerListOptions.java +++ b/apis/s3/src/test/java/org/jclouds/s3/blobstore/functions/BucketToContainerListOptions.java @@ -30,8 +30,8 @@ public ListContainerOptions apply(ListBucketOptions[] optionsList) { if (optionsList.length != 0) { if (optionsList[0].getDelimiter() == null) { options.recursive(); - } else if (!optionsList[0].getDelimiter().equals("/")) { - throw new IllegalArgumentException("only '/' is allowed as a blobstore delimiter"); + } else { + options.delimiter(optionsList[0].getDelimiter()); } if (optionsList[0].getMarker() != null) { options.afterMarker(optionsList[0].getMarker()); diff --git a/apis/s3/src/test/java/org/jclouds/s3/blobstore/integration/S3ContainerLiveTest.java b/apis/s3/src/test/java/org/jclouds/s3/blobstore/integration/S3ContainerLiveTest.java index 8bcb78adccd..7c90ea62039 100644 --- a/apis/s3/src/test/java/org/jclouds/s3/blobstore/integration/S3ContainerLiveTest.java +++ b/apis/s3/src/test/java/org/jclouds/s3/blobstore/integration/S3ContainerLiveTest.java @@ -18,7 +18,6 @@ import org.jclouds.blobstore.integration.internal.BaseBlobStoreIntegrationTest; import org.jclouds.blobstore.integration.internal.BaseContainerLiveTest; -import org.testng.SkipException; import org.testng.annotations.Test; @Test(groups = "live", testName = "S3ContainerLiveTest") @@ -28,10 +27,4 @@ public S3ContainerLiveTest() { provider = "s3"; BaseBlobStoreIntegrationTest.SANITY_CHECK_RETURNED_BUCKET_NAME = true; } - - @Override - @Test - public void testDelimiterList() { - throw new SkipException("not yet implemented"); - } }