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

Reply via email to