JCLOUDS-929: Plumb delimiter and prefix to GCS.
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/834b3d5d Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/834b3d5d Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/834b3d5d Branch: refs/heads/master Commit: 834b3d5d2f1a2b80f611532c5262fedefc50be1a Parents: efdc715 Author: Timur Alperovich <[email protected]> Authored: Thu Aug 20 15:29:41 2015 -0700 Committer: Timur Alperovich <[email protected]> Committed: Thu Aug 20 17:55:48 2015 -0700 ---------------------------------------------------------------------- ...ListContainerOptionsToListObjectOptions.java | 11 ++++++- .../functions/ObjectListToStorageMetadata.java | 30 ++++++++------------ ...loudStorageContainerIntegrationLiveTest.java | 10 ------- 3 files changed, 22 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/834b3d5d/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java ---------------------------------------------------------------------- diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java index 581e9ce..15b5f4f 100644 --- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java +++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java @@ -26,18 +26,27 @@ import com.google.common.base.Function; public class BlobStoreListContainerOptionsToListObjectOptions implements Function<ListContainerOptions, ListObjectOptions> { public ListObjectOptions apply(ListContainerOptions from) { + if (from.getDir() != null && (from.getPrefix() != null || from.getDelimiter() != null)) { + throw new IllegalArgumentException("Cannot pass both directory and prefix/delimiter"); + } checkNotNull(from, "set options to instance NONE instead of passing null"); ListObjectOptions httpOptions = new ListObjectOptions(); - if (!from.isRecursive()) { + if (!from.isRecursive() && from.getDelimiter() == null) { httpOptions = httpOptions.delimiter("/"); } + if (from.getDelimiter() != null) { + httpOptions = httpOptions.delimiter(from.getDelimiter()); + } if (from.getDir() != null) { String path = from.getDir(); if (!path.endsWith("/")) path += "/"; httpOptions = httpOptions.prefix(path); } + if (from.getPrefix() != null) { + httpOptions.prefix(from.getPrefix()); + } if (from.getMarker() != null) { httpOptions = httpOptions.pageToken(from.getMarker()); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/834b3d5d/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java ---------------------------------------------------------------------- diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java index 22f00da..4f7f1d0 100644 --- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java +++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java @@ -16,22 +16,22 @@ */ package org.jclouds.googlecloudstorage.blobstore.functions; -import java.util.Map; +import java.util.SortedSet; import javax.inject.Inject; -import org.jclouds.blobstore.domain.BlobMetadata; +import org.jclouds.blobstore.domain.MutableStorageMetadata; import org.jclouds.blobstore.domain.PageSet; import org.jclouds.blobstore.domain.StorageMetadata; import org.jclouds.blobstore.domain.StorageType; +import org.jclouds.blobstore.domain.internal.MutableStorageMetadataImpl; import org.jclouds.blobstore.domain.internal.PageSetImpl; -import org.jclouds.blobstore.domain.internal.StorageMetadataImpl; import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject; import org.jclouds.googlecloudstorage.domain.ListPageWithPrefixes; import com.google.common.base.Function; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; +import com.google.common.collect.Sets; public class ObjectListToStorageMetadata implements Function<ListPageWithPrefixes<GoogleCloudStorageObject>, PageSet<? extends StorageMetadata>> { @@ -46,19 +46,13 @@ public class ObjectListToStorageMetadata from = ListPageWithPrefixes.create(null, null, null); } - return new PageSetImpl<StorageMetadata>(Iterables.transform(Iterables.transform(from, object2blobMd), - new Function<BlobMetadata, StorageMetadata>() { - public StorageMetadata apply(BlobMetadata input) { - Map<String, String> userMetaData = (input != null && input.getUserMetadata() != null) ? input - .getUserMetadata() : ImmutableMap.<String, String> of(); - if (input.getContentMetadata().getContentType().equals("application/directory")) { - return new StorageMetadataImpl(StorageType.RELATIVE_PATH, input.getProviderId(), input - .getName(), input.getLocation(), input.getUri(), input.getETag(), input - .getCreationDate(), input.getLastModified(), userMetaData, - input.getSize()); - } - return input; - } - }), from.nextPageToken()); + SortedSet<StorageMetadata> results = Sets.<StorageMetadata> newTreeSet(Iterables.transform(from, object2blobMd)); + for (String prefix : from.prefixes()) { + MutableStorageMetadata metadata = new MutableStorageMetadataImpl(); + metadata.setType(StorageType.RELATIVE_PATH); + metadata.setName(prefix); + results.add(metadata); + } + return new PageSetImpl<StorageMetadata>(results, from.nextPageToken()); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/834b3d5d/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java index d4f5fb8..c129ae8 100644 --- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java +++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java @@ -105,14 +105,4 @@ public class GoogleCloudStorageContainerIntegrationLiveTest extends BaseContaine public void testListMarkerAfterLastKey() throws Exception { throw new SkipException("cannot specify arbitrary markers"); } - - @Override - public void testContainerListWithPrefix() { - throw new SkipException("Prefix option has not been plumbed down to GCS"); - } - - @Override - public void testDelimiterList() { - throw new SkipException("Prefix option has not been plumbed down to GCS"); - } }
